§
    ŒŸj¬  ã                   óp   — d dl mZ d dlmZ d dlmZ ej        Zej        Zej        Z G d„ de¦  «        Z	dS )é    )Útree)ÚPythonTokenTypes)Ú
BaseParserc                   óœ  ‡ — e Zd ZdZi dej        “dej        “dej        “dej        “dej	        “dej
        “dej        “d	ej        “d
ej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “dej        “ej        ej        ej        ej        ej        ej        ej        ej        ej        ej        dœ
¥Zej        Zej        ej        ej        ej         ej!        ej"        ej#        ej$        ej%        ej&        ej'        ej(        ej)        ej*        iZ+dˆ fd„	Z,ˆ fd„Z-d„ Z.d„ Z/ˆ fd„Z0d„ Z1d„ Z2ˆ xZ3S )ÚParserzÈ
    This class is used to parse a Python file, it then divides them into a
    class structure of different scopes.

    :param pgen_grammar: The grammar object of pgen2. Loaded by load_grammar.
    Ú	expr_stmtÚclassdefÚfuncdefÚ
file_inputÚimport_nameÚimport_fromÚ
break_stmtÚcontinue_stmtÚreturn_stmtÚ
raise_stmtÚ
yield_exprÚdel_stmtÚ	pass_stmtÚglobal_stmtÚnonlocal_stmtÚ
print_stmtÚassert_stmt)
Úif_stmtÚ	with_stmtÚfor_stmtÚ
while_stmtÚtry_stmtÚsync_comp_forÚ	decoratorÚlambdefÚlambdef_nocondÚnamedexpr_testTc                 óz   •— t          ¦   «                              |||¬¦  «         g | _        g | _        d| _        d S )N)Úerror_recoveryr   )ÚsuperÚ__init__Úsyntax_errorsÚ_omit_dedent_listÚ_indent_counter)ÚselfÚpgen_grammarr$   Ústart_nonterminalÚ	__class__s       €ú`/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/parso/python/parser.pyr&   zParser.__init__@   sL   ø€ Ý‰Œ×Ò˜Ð'8Ø(6ð 	ñ 	8ô 	8ð 	8ð  ˆÔØ!#ˆÔØ ˆÔÐÐó    c                 ó¢   •— | j         r'| j        dk    rt          ‚|                      |¦  «        }t	          ¦   «                              |¦  «        S )Nr   )Ú_error_recoveryÚ_start_nonterminalÚNotImplementedErrorÚ_recovery_tokenizer%   Úparse)r*   Útokensr-   s     €r.   r5   zParser.parseH   sK   ø€ ØÔð 	5ØÔ&¨,Ò6Ð6Ý)Ð)à×,Ò,¨VÑ4Ô4ˆFå‰wŒw�}Š}˜VÑ$Ô$Ð$r/   c                 ó¶   — 	  | j         |         |¦  «        }n@# t          $ r3 |dk    r|d         g|dd…         z   }|                      ||¦  «        }Y nw xY w|S )a  
        Convert raw node information to a PythonBaseNode instance.

        This is passed to the parser driver which calls it whenever a reduction of a
        grammar rule produces a new complete node, so that the tree is build
        strictly bottom-up.
        Úsuiter   é   éÿÿÿÿ)Únode_mapÚKeyErrorÚdefault_node)r*   ÚnonterminalÚchildrenÚnodes       r.   Úconvert_nodezParser.convert_nodeQ   s   € ð		<Ø-�4”= Ô-¨hÑ7Ô7ˆDˆDøÝð 	<ð 	<ð 	<Ø˜gÒ%Ð%ð
 % QœK˜=¨8°A°b°D¬>Ñ9�Ø×$Ò$ [°(Ñ;Ô;ˆDˆDˆDð	<øøøð ˆs   ‚ ™:AÁAc                 óì   — |t           k    r:|| j        j        v rt          j        |||¦  «        S t          j        |||¦  «        S  | j                             |t          j        ¦  «        |||¦  «        S )N)	ÚNAMEÚ_pgen_grammarÚreserved_syntax_stringsr   ÚKeywordÚNameÚ	_leaf_mapÚgetÚOperator)r*   ÚtypeÚvalueÚprefixÚ	start_poss        r.   Úconvert_leafzParser.convert_leafe   sl   € à•4Š<ˆ<Ø˜Ô*ÔBÐBÐBÝ”| E¨9°fÑ=Ô=Ð=å”y ¨	°6Ñ:Ô:Ð:à6ˆtŒ~×!Ò! $­¬Ñ6Ô6°u¸iÈÑPÔPÐPr/   c                 ó˜  •— | j         d         j        }|r|d                              ¦   «         }nd }| j        dk    rî|j        t
          j        k    sD|j        t          k    rÉ|j         	                    d¦  «        s¯|j         	                    d¦  «        s•| j         d         j
        j        dk    rz	 | j         d         j
        j        t
          j                 }|j        j        r5|j        s.|j        | j         d         _
        |                      |¦  «         d S n# t$          $ r Y nw xY w| j        s!t)          ¦   «                              |¦  «        S d„ } || j         ¦  «        }|                      |dz   ¦  «        r|                      |¦  «         nr|\  }}}	}
|t.          k    r| j                             | j        ¦  «         t7          j        |j        ||	|
¦  «        }| j         d         j                             |¦  «         | j         d         }|j        dk    r+	 |j
        j        d	         |_
        d S # t$          $ r Y d S w xY wd S )
Nr:   r   ú
úÚsimple_stmtc                 óÈ   — t          t          t          | ¦  «        ¦  «        ¦  «        D ]7\  }}|j        dk    r n&|j        dk    rt	          |j        ¦  «        dk    r nŒ8|S )Nr   r8   é   )ÚreversedÚlistÚ	enumerater>   ÚlenÚnodes)ÚstackÚuntil_indexÚ
stack_nodes      r.   Úcurrent_suitez,Parser.error_recovery.<locals>.current_suiteŽ   su   € õ ,4µD½À5Ñ9IÔ9IÑ4JÔ4JÑ+KÔ+Kð 	ð 	Ñ'�˜ZàÔ)¨\Ò9Ð9Ø�EØÔ+¨wÒ6Ð6õ ˜:Ô+Ñ,Ô,°Ò1Ð1Ø˜øØÐr/   rU   r8   Ústmt) r[   rZ   Úget_last_leafr2   rK   r   Ú	ENDMARKERÚDEDENTrL   ÚendswithÚdfaÚ	from_ruleÚtransitionsÚNEWLINEÚnext_dfaÚis_finalÚ
dfa_pushesÚ
_add_tokenr<   r1   r%   r$   Ú_stack_removalÚINDENTr(   Úappendr)   r   ÚPythonErrorLeafÚnamer>   Úarcs)r*   ÚtokenÚ	tos_nodesÚ	last_leafÚplanr^   r\   ÚtyprL   rN   rM   Ú
error_leafÚtosr-   s                €r.   r$   zParser.error_recoveryo   sc  ø€ Ø”J˜r”NÔ(ˆ	Øð 	Ø! "œ×3Ò3Ñ5Ô5ˆIˆIàˆIàÔ" lÒ2Ð2Ø”Õ/Ô9Ò9Ð9Ø”J¥&Ò(Ð(°´×1IÒ1IÈ$Ñ1OÔ1OÐ(Ø"œ×1Ò1°$Ñ7Ô7ð )ð Œz˜"Œ~Ô!Ô+¨}Ò<Ð<ð
Øœ: bœ>Ô-Ô9Õ:JÔ:RÔS�Dð ”}Ô-ð °d´oð ð .2¬]˜œ
 2œÔ*ØŸš¨Ñ.Ô.Ð.Ø˜øøõ  ð ð ð Ø�Dðøøøð Ô#ð 	1Ý‘7”7×)Ò)¨%Ñ0Ô0Ð0ð	ð 	ð 	ð $�m D¤JÑ/Ô/ˆà×Ò˜{¨Q™Ñ/Ô/ð 
	4Ø�OŠO˜EÑ"Ô"Ð"Ð"à,1Ñ)ˆC�˜	 6Ø•fŠ}ˆ}ð Ô&×-Ò-¨dÔ.BÑCÔCÐCåÔ-¨c¬h¸¸yÈ&ÑQÔQˆJØŒJ�rŒNÔ ×'Ò'¨
Ñ3Ô3Ð3àŒj˜ŒnˆØŒ?˜gÒ%Ð%ðØœ'œ, vÔ.�”��øÝð ð ð à��ðøøøð &Ð%s$   Â3'D Ä
D)Ä(D)È H9 È9
IÉIc                 óæ   — d„ | j         |d …         D ¦   «         }|r<t          j        |¦  «        }| j         |dz
           j                             |¦  «         g | j         |d …<   t          |¦  «        S )Nc                 ó&   — g | ]}|j         D ]}|‘ŒŒS © )rZ   )Ú.0r]   r@   s      r.   ú
<listcomp>z)Parser._stack_removal.<locals>.<listcomp>¶   s)   € ÐbÐbÐb˜jÐQ[ÔQaÐbÐbÈ�TÐbÐbÐbÐbr/   rU   )r[   r   ÚPythonErrorNoderZ   rn   Úbool)r*   Ústart_indexÚ	all_nodesr@   s       r.   rl   zParser._stack_removalµ   sv   € ØbÐb¨D¬J°{°|°|Ô,DÐbÑbÔbˆ	àð 	;ÝÔ'¨	Ñ2Ô2ˆDØŒJ�{ Q‘Ô'Ô-×4Ò4°TÑ:Ô:Ð:à#%ˆŒ
�;�<�<Ñ Ý�I‰ŒÐr/   c              #   ó  K  — |D ]„}|d         }|t           k    rP| j        }|r6|d         | j        k    r%|                     ¦   «          | xj        dz  c_        ŒT| xj        dz  c_        n|t          k    r| xj        dz  c_        |V — Œ…d S )Nr   r:   rU   )rb   r(   r)   Úpoprm   )r*   r6   rr   rv   Úos        r.   r4   zParser._recovery_tokenize¿   s·   è è € Øð 	ð 	ˆEØ˜”(ˆCØ•fŠ}ˆ}ð Ô*�Øð ˜˜2œ $Ô"6Ò6Ð6Ø—E’E‘G”G�GØÐ(Ô(¨AÑ-Ð(Ô(ØàÐ$Ô$¨Ñ)Ð$Ô$Ð$Ø�’�ØÐ$Ô$¨Ñ)Ð$Ô$ØˆKˆKˆKˆKð	ð 	r/   )Tr   )4Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚExprStmtÚClassÚFunctionÚModuleÚ
ImportNameÚ
ImportFromÚKeywordStatementÚ
ReturnStmtÚ	YieldExprÚ
GlobalStmtÚ
AssertStmtÚIfStmtÚWithStmtÚForStmtÚ	WhileStmtÚTryStmtÚSyncCompForÚ	DecoratorÚLambdaÚ	NamedExprr;   Ú
PythonNoder=   r   ÚSTRINGÚStringÚNUMBERÚNumberrg   ÚNewlinera   Ú	EndMarkerÚFSTRING_STRINGÚFStringStringÚFSTRING_STARTÚFStringStartÚFSTRING_ENDÚ
FStringEndrH   r&   r5   rA   rO   r$   rl   r4   Ú__classcell__)r-   s   @r.   r   r      sW  ø€ € € € € ðð ðØ�T”]ðà�D”Jðð 	�4”=ðð 	�d”kð	ð
 	�t”ðð 	�t”ðð 	�dÔ+ðð 	˜Ô.ðð 	�t”ðð 	�dÔ+ðð 	�d”nðð 	�DÔ)ðð 	�TÔ*ðð 	�t”ðð 	˜Ô.ðð  	�dÔ+ð!ð" 	�t”ð#ð$ ”;Ø”]Ø”LØ”nØ”LØÔ)ð ”^Ø”;Øœ+Øœ.ð=ð ð €Hð@ ”?€Lð 	Ô ¤ØÔ ¤ØÔ  $¤,ØÔ" D¤NØÔ'¨Ô);ØÔ&¨Ô(9ØÔ$ d¤oð€Ið!ð !ð !ð !ð !ð !ð%ð %ð %ð %ð %ðð ð ð(Qð Qð QðDð Dð Dð Dð DðLð ð ðð ð ð ð ð ð r/   r   N)
Úparso.pythonr   Úparso.python.tokenr   Úparso.parserr   rC   rm   rb   r   r{   r/   r.   ú<module>r®      s“   ðØ Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ø #Ð #Ð #Ð #Ð #Ð #ð Ô€Ø	Ô	 €Ø	Ô	 €ðCð Cð Cð Cð CˆZñ Cô Cð Cð Cð Cr/   