
    }fU                        d dl mZ d dlmZ d dlmZ ddlmZ d Z G d d      Z	 G d	 d
e	      Z
 G d de	      Z G d de	      Ze
e	_        ee	_        d e	_        d e	_        d e	_        d Zd Zy)    )annotations)defaultdict)Callable   )grammarsc                r    t        | t        j                        r|j                  | j                  |       S | S N)
isinstancer   RuleRefgetname)node	rule_dicts     L/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/tatsu/leftrec.pyfollowr      s,    $(()}}TYY--    c                  T    e Zd ZU ddZd Zd Zded<   ded<   ded<   ded<   ded	<   y
)Nullablec                .    || _         || _        || _        y r	   resolvednullablechildren)selfr   r   r   s       r   __init__zNullable.__init__   s       r   c                     y r	    )r   r   r   s      r   resolvezNullable.resolve   s    r   c                .    d| _         || _        d | _        y NTr   )r   ns     r   resolve_withzNullable.resolve_with   s    r   r   allanyofnoyesN)FF)__name__
__module____qualname__r   r   r"   __annotations__r   r   r   r   r      s,    !

 
M	MLL	Mr   r   c                      e Zd Zd Zy)_Allc                
   g }| j                   D ]W  }t        ||      }|j                  }|j                  r |j                  r4| j                  d        y |j                  |       Y |s| j                  d       y || _         y )NFTr   r   _nullabilityr   r   r"   appendr   r   r   
unresolvedcr!   s         r   r   z_All.resolve*   sx    
 		%Aq)$AAzzzz%%e,!!!$		% d# 'DMr   Nr(   r)   r*   r   r   r   r   r-   r-   )   s    'r   r-   c                      e Zd Zd Zy)_Anyc                
   g }| j                   D ]W  }t        ||      }|j                  }|j                  r |j                  s4| j                  d        y |j                  |       Y |s| j                  d       y || _         y NTFr/   r2   s         r   r   z_Any.resolve?   sv    
 	%Aq)$AAzz::%%d+!!!$	% e$&DMr   Nr5   r   r   r   r7   r7   >   s    'r   r7   c                      e Zd Zd Zy)_Singlec                    t        | j                  d   |      j                  }|j                  sy | j	                  |j
                         y )Nr   )r   r   r0   r   r"   r   )r   r   r   r!   s       r   r   z_Single.resolveR   s9    4==#Y/<<zz!**%r   Nr5   r   r   r   r;   r;   Q   s    &r   r;   c                    t        | g      S r	   )r;   )childs    r   <lambda>r?   [   s    G
G r   c                     t        d dd      S r9   r   r   r   r   r?   r?   ^   s    htT51 r   c                     t        d dd      S r    rA   r   r   r   r?   r?   _   s    xdD1 r   c                n    t        t              t               fdfd |        y )Nc                    | v ry j                  |        | j                         D ]  }t        |      } |         |        y r	   )addchildren_listr   )modelr>   r   r   visitedwalks     r   rI   z!resolve_nullability.<locals>.walkf   sN    GE((* 	E5),EK	 	r   c                   | j                   }|j                  sp|j                  |        |j                  r,|    D ]#  }|j                   }|j                  r |       % y |j                  D ]  }|   j	                  |         y y r	   )r0   r   r   r   r1   )rG   nullability	dependantr!   
dependantsr   r   s       r   r   z$resolve_nullability.<locals>.resolveq   s    ((##y1##!+E!2 I!..A::% %-- 0AqM((/0 $r   )r   listset)grammarr   rM   r   rH   rI   s    `@@@@r   resolve_nullabilityrQ   b   s'    T"JeG	0 	Mr   c           	       	
 | j                   D ci c]  }|j                  | c}t        |        dddt        fd      	dgi dg	
f	d
| j	                         D ]
  } 
|        y c c}w )Nr   r      c                      S r	   r   )FIRSTs   r   r?   z%find_left_recursion.<locals>.<lambda>   s     r   c                  	 |    k(  r| <   ny t        | t        j                        xr | j                  }|rj	                  	d          	d   
| <   	dxx   dz  cc<   | j                        D ][  }t        |      } |       |   k(  s 
|   d   kD  s,
D ]$  }t        |t        j                        sd|_        & d|_        ] |rj                          
| = 	dxx   dz  cc<   | <   y )Nr   r   rV   FT)	r
   r   Rule
is_leftrecr1   at_same_posr   is_memoizablepop)rG   leftrecr>   ruleCUTOFFrU   VISITEDlr_stack_positionsr   stack_depthstack_positionsstaterI   s       r   rI   z!find_left_recursion.<locals>.walk   s   <5 !E%L UHMM2Gu7G7G%%k!n5!,QA!&&y1 	(E5),EK e&#E*-?-CC , 3D!$6-2*3 $( 	(  ""$E"A!er   )rulesr   rQ   r   rF   )rP   r^   r_   rU   r`   ra   r   rb   rc   rd   rI   s     @@@@@@@@@r   find_left_recursionrf      s    $+MM 		4I
 + EFG&E#KO$ $L %%' T
os   BN)
__future__r   collectionsr   collections.abcr    r   r   r   r-   r7   r;   r#   r$   r%   r&   r'   rQ   rf   r   r   r   <module>rk      sx    " # $  *'8 '*'8 '&&h &  21J9r   