
    #hU                        S SK Jr  S SKJr  S SKJr  SSKJr  S r " S S5      r	 " S	 S
\	5      r
 " S S\	5      r " S S\	5      r\
\	l        \\	l        S \	l        S \	l        S \	l        S rS rg)    )annotations)defaultdict)Callable   )grammarsc                |    [        U [        R                  5      (       a  UR                  U R                  U 5      $ U $ N)
isinstancer   RuleRefgetname)node	rule_dicts     M/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/leftrec.pyfollowr      s/    $(())}}TYY--    c                  ^    \ rS rSr% SS jrS rS rS\S'   S\S'   S\S'   S\S	'   S\S
'   Srg)Nullable   c                (    X l         X0l        Xl        g r	   resolvednullablechildren)selfr   r   r   s       r   __init__Nullable.__init__   s       r   c                    g r	    )r   r   r   s      r   resolveNullable.resolve   s    r   c                ,    SU l         Xl        S U l        g NTr   )r   ns     r   resolve_withNullable.resolve_with   s    r   r   allanyofnoyes)r   r   r   N)FF)	__name__
__module____qualname____firstlineno__r   r    r%   __annotations____static_attributes__r   r   r   r   r      s,    !

 
M	MLL	Mr   r   c                      \ rS rSrS rSrg)_All)   c                *   / nU R                    Hb  n[        XB5      nUR                  nUR                  (       a&  UR                  (       d  U R                  S5          g MQ  UR                  U5        Md     U(       d  U R                  S5        g X0l         g )NFTr   r   _nullabilityr   r   r%   appendr   r   r   
unresolvedcr$   s         r   r    _All.resolve*   sv    
Aq$AAzzzz%%e, "
 !!!$  d# 'Mr   r   Nr,   r-   r.   r/   r    r1   r   r   r   r3   r3   )   s    'r   r3   c                      \ rS rSrS rSrg)_Any>   c                *   / nU R                    Hb  n[        XB5      nUR                  nUR                  (       a&  UR                  (       a  U R                  S5          g MQ  UR                  U5        Md     U(       d  U R                  S5        g X0l         g NTFr6   r9   s         r   r    _Any.resolve?   st    
Aq$AAzz::%%d+  !!!$  e$&Mr   r=   Nr>   r   r   r   r@   r@   >   s    'r   r@   c                      \ rS rSrS rSrg)_SingleQ   c                    [        U R                  S   U5      R                  nUR                  (       d  g U R	                  UR
                  5        g )Nr   )r   r   r7   r   r%   r   )r   r   r   r$   s       r   r    _Single.resolveR   s9    4==#Y/<<zz!**%r   r   Nr>   r   r   r   rF   rF   Q   s    &r   rF   c                    [        U /5      $ r	   )rF   )childs    r   <lambda>rL   [   s    G
Gr   c                     [        S SS5      $ rC   r   r   r   r   rL   rL   ^   s    htT51r   c                     [        S SS5      $ r#   rN   r   r   r   rL   rL   _   s    xdD1r   c                r   ^^^^^ [        [        5      m[        5       mUUUU4S jmUUU4S jmT" U 5        g )Nc                   > U T;   a  g TR                  U 5        U R                  5        H  n[        UT5      nT" U5        M     T" U 5        g r	   )addchildren_listr   )modelrK   r    r   visitedwalks     r   rV   !resolve_nullability.<locals>.walkf   sI    GE((*E5),EK + 	r   c                >  > U R                   nUR                  (       d  UR                  U T5        UR                  (       a4  TU     H*  nUR                   nUR                  (       a  M"  T" U5        M,     g UR                   H  nTU   R	                  U 5        M     g g r	   )r7   r   r    r   r8   )rT   nullability	dependantr$   
dependantsr    r   s       r   r    $resolve_nullability.<locals>.resolveq   s    ((##y1##!+E!2I!..A:::% "3 %--AqM((/ . $r   )r   listset)grammarr   r[   r    rU   rV   s    `@@@@r   resolve_nullabilityr`   b   s,    T"JeG	 	0 	Mr   c           	       ^^^^^^^^	^
 U R                    Vs0 s H  oR                  U_M     snm[        U T5        SmSmSm[        U4S j5      m	S/m0 mS/mUUUUUUUU	U
4	S jm
U R	                  5        H  nT
" U5        M     g s  snf )Nr   r      c                    > T $ r	   r   )FIRSTs   r   rL   %find_left_recursion.<locals>.<lambda>   s    r   c                2  >	 TU    T:X  a  TTU '   Og [        U [        R                  5      =(       a    U R                  nU(       a  TR	                  T	S   5        T	S   T
U '   T	S==   S-  ss'   U R                  T5       Hh  n[        UT5      nT" U5        TU   T:X  d  M"  T
U   TS   :  d  M0  T
 H+  n[        U[        R                  5      (       d  M$  SUl        M-     SUl        Mj     U(       a  TR                  5         T
U 	 T	S==   S-  ss'   TTU '   g )Nr   r   rf   FT)	r
   r   Rule
is_leftrecr8   at_same_posr   is_memoizablepop)rT   leftrecrK   ruleCUTOFFrd   VISITEDlr_stack_positionsr   stack_depthstack_positionsstaterV   s       r   rV   !find_left_recursion.<locals>.walk   s   <5 !E%L UHMM2Gu7G7G%%k!n5!,QA!&&y1E5),EK e&#E*-?-CC ,D!$66-2* , $(  2  ""$E"A!er   )rulesr   r`   r   rS   )r_   rn   ro   rd   rp   rq   r   rr   rs   rt   rV   s     @@@@@@@@@r   find_left_recursionrw      s    $+MM$1D		4MI
 + EFG&E#KO$ $L %%'T
 (os   BN)
__future__r   collectionsr   collections.abcr    r   r   r   r3   r@   rF   r'   r(   r)   r*   r+   r`   rw   r   r   r   <module>r|      sx    " # $  *'8 '*'8 '&&h &  21J9r   