
    Mh                     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       S/var/www/html/test/jupyter/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4Fww}}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7DD 	< 	< 	<g%%
 %QK=8AbD>9$$[(;;DDD	< 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|E9f===y	6:::6t~!!$66ui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     ,4D59I9I4J4J+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   JrN(	 	!"3355III"l22/999J&((1I1I$1O1O("11$77 ) z"~!+}<<
:b>-9:J:RSD }- do  .2]
2*...     D # 	177))%000	 	 	 $mDJ//{Q// 
	4OOE"""",1)C	6f}} &--d.BCCC-chy&QQJJrN ''
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bjQ[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bDJ{||,Dbbb	 	;'	22DJ{Q'-44T:::#%
;<< 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EEGGG((A-(($$)$$$$$)$$KKKK	 	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]DJ 	4= 	dk	
 	t 	t 	d+ 	. 	t 	d+ 	dn 	D) 	T* 	t 	.  	d+!" 	t#$ ;]LnL) ^;+.=  H@ ?L 	 $,"DN');&(9$do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/   