
    #hm                       S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  SS	KJr  SS
KJr  SSKJr  SSKJrJr  SSKJrJr  SSKJrJr  SSKJr  SSKJrJrJ r J!r!J"r"  Sr#Sr$ " S S\%5      r&S r'S r(S r) " S S\5      r* " S S\5      r+ " S S\+5      r, " S S\+5      r- " S  S!\+5      r. " S" S#\+5      r/ " S$ S%\/5      r0 " S& S'\+5      r1 " S( S)\+5      r2\2r3 " S* S+\25      r4 " S, S-\+5      r5 " S. S/\+5      r6 " S0 S1\65      r7 " S2 S3\+5      r8 " S4 S5\25      r9 " S6 S7\25      r: " S8 S9\25      r; " S: S;\+5      r< " S< S=\+5      r= " S> S?\25      r> " S@ SA\25      r? " SB SC\?5      r@ " SD SE\25      rA " SF SG\A5      rB " SH SI\B5      rC " SJ SK\B5      rD " SL SM\A5      rE " SN SO\E5      rF " SP SQ\+5      rG " SR SS\25      rH " ST SU\+5      rI " SV SW\25      rJ " SX SY\J5      rK " SZ S[\J5      rL " S\ S]\K5      rM " S^ S_\+5      rN " S` Sa\+5      rO " Sb Sc\25      rP " Sd Se\25      rQ " Sf Sg\Q5      rR " Sh Si\+5      rSg)j    )annotationsN)defaultdict)Mapping)copy)	takewhile)Path   )AST)
OrderedSet)ParseContext)	FailedRefGrammarError)ParserConfigRuleInfo)Nullablefind_left_recursion)Node)chunkscompress_seqindentretrimH   z^\s*#include.*$c                      \ rS rSrS rSrg)_ref   c                    SU  S3$ )N<> selfs    N/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/tatsu/grammars.py__repr___ref.__repr__   s    4&{    r    N)__name__
__module____qualname____firstlineno__r$   __static_attributes__r    r&   r#   r   r      s    r&   r   c                    [        U 5      4$ N)r   names    r#   refr0      s    J=r&   c                   ^^ T(       d  [        U4S jU  5       5      $ U (       d  [        U4S jT 5       5      $ [        UU4S jU  5       5      $ )Nc              3  ,   >#    U  H	  oS T v   M     g 7fr-   r    ).0aks     r#   	<genexpr>kdot.<locals>.<genexpr>$        %1abqE1   c              3  ,   >#    U  H	  oS T v   M     g 7fr-   r    )r3   br5   s     r#   r6   r7   &   r8   r9   c              3  F   >#    U  H  nT  H  o!U-   S T v   M     M     g 7fr-   r    )r3   r4   r;   r5   ys      r#   r6   r7   (   s!     6AAqUBQKAK   !oset)xr=   r5   s    ``r#   kdotrB   "   s<    %1%%%%1%%%6666r&   c                2    SR                  S U  5       5      $ )N c              3  t   #    U  H.  oR                  5       (       a  S UR                  5       -   OUv   M0     g7f)_N)isupperlowerr3   cs     r#   r6   !pythonize_name.<locals>.<genexpr>,   s'     G$Qiikk3?q8$s   68joinr.   s    r#   pythonize_namerN   +   s    77G$GGGr&   c                  L   ^  \ rS rSr  S SU 4S jjjr\S 5       rS rSrU =r	$ )ModelContext/   c                  > [         R                  " U40 UD6nUR                  US9n[        TU ]  US9  U Vs0 s H  oUR
                  U_M     snU l        g s  snf )N)startconfig)r   newreplacesuper__init__r/   rules)r"   rZ   rS   rU   settingsrule	__class__s         r#   rY   ModelContext.__init__0   sY     !!&5H5e,'278%$iio%8
8s   Ac                .    U R                   R                  $ r-   )
_tokenizerposr!   s    r#   ra   ModelContext.pos?   s    """r&   c                ^    [         R                  " U R                  U   R                  U 5      $ r-   )	functoolspartialrZ   parse)r"   r/   s     r#   
_find_ruleModelContext._find_ruleC   s$      D!1!7!7>>r&   )rZ   NN)rU   ParserConfig | None)
r'   r(   r)   r*   rY   propertyra   rg   r+   __classcell__r]   s   @r#   rP   rP   /   s=    
 &*9
 $9 9 # #? ?r&   rP   c                     ^  \ rS rSr\S 5       rSU 4S jjrS rS rSS jr	SS jr
S rSS	 jrSS
 jrS rS rS rS rSS jrS rS rS rS rS rS rSS jrS rSrU =r$ )ModelG   c                     [        5       R                  5        V s/ s H3  n [        U [        5      (       d  M  [	        U [
        5      (       d  M1  U PM5     sn $ s  sn f r-   )globalsvalues
isinstancetype
issubclassro   )rJ   s    r#   classesModel.classesH   sM     Y%%'
'!T" '1!U'; '
 	
 
s   AAAc                ^  > [         TU ]  XS9  S U l        S U l        [	        5       U l        S U l        U R                  5       U l        [        U R                  [        5      (       aG  U R                  (       a  [        R                  " 5       U l        g [        R                  " 5       U l        g g )N)astctx)rX   rY   
_lookahead	_firstsetr@   _follow_setvalue	_nullable_nullabilityrt   intr   yesno)r"   rz   r{   r]   s      r#   rY   Model.__init__P   s~    S*6
 NN,d''--  $,LLN!$,KKM!	 .r&   c                    S Ul         g r-   )	last_noder"   r{   s     r#   rf   Model.parse]   s	    r&   c                    / $ r-   r    r!   s    r#   definesModel.defines`       	r&   c                   Uc  g [        US5      (       d  g [        [        U R                  5       5      5      nUR	                  5        VVs/ s H  u  pEU(       a  M  UPM     nnnUR	                  5        VVs/ s H  u  pEU(       d  M  UPM     nnnUR                  Xg5        UR                  Xg5        g s  snnf s  snnf )N_define)hasattrdictr   r   itemsr   )r"   r{   rz   r   r5   listkeys	list_keyss           r#   _add_defined_attributesModel._add_defined_attributesc   s    ;sI&&|DLLN34!(=ga=&-mmo>o71Qo	>D$D$ >>s   B6B69B<
B<c                    U R                   c0  [        U R                  U5      U R                  U5      U5      U l         U R                   $ r-   )r|   rB   firstset	followsetr"   r5   s     r#   	lookaheadModel.lookaheadp   s8    ??""4==#3T^^A5FJDOr&   c                `    SR                  [        S U R                  5        5       5      5      $ )N c              3  N   #    U  H  o(       d  M  [        US    5      v   M     g7f)r   Nrepr)r3   fs     r#   r6   &Model.lookahead_str.<locals>.<genexpr>v   s      I3CaqztAaDzz3Cs   
%%)rM   sortedr   r!   s    r#   lookahead_strModel.lookahead_stru   s#    xxI4>>3CIIJJr&   c                |    U R                   c$  U R                  U[        [        5      5      U l         U R                   $ r-   )r}   _firstr   r@   r   s     r#   r   Model.firstsetx   s-    >>!![[K,=>DN~~r&   c                    U R                   $ r-   )r~   r   s     r#   r   Model.followset}   s    r&   c                    [        5       $ r-   r?   r"   rZ   s     r#   missing_rulesModel.missing_rules   	    vr&   c                    [        5       $ r-   r?   r!   s    r#   _used_rule_namesModel._used_rule_names   r   r&   c                    [        5       $ r-   r?   r"   r5   r   s      r#   r   Model._first   r   r&   c                    U$ r-   r    r"   r5   flr4   s       r#   _followModel._follow   s    r&   c                .    U R                   R                  $ r-   )r   nullabler   s     r#   is_nullableModel.is_nullable   s      )))r&   c                    gNFr    r!   s    r#   r   Model._nullable       r&   c                    / $ r-   r    r   s     r#   at_same_posModel.at_same_pos   r   r&   c                ^    U R                   u  pU(       d  gSR                  S U 5       5      $ )NrD   
c              3     #    U  HS  nS R                  SR                  U5      R                  SS5      R                  SS5      R                  5       5      v   MU     g7f)z	(* {} *)
r   z(*rD   z*)N)formatrM   rW   striprI   s     r#   r6   %Model.comments_str.<locals>.<genexpr>   sP      
 		! 4 4T2 > F FtR P V V XYYs   AA)commentsrM   )r"   r   _eols      r#   comments_strModel.comments_str   s1    yy 

 
 	
r&   c                    gNr	   r    r!   s    r#   	nodecountModel.nodecount   s    r&   c                "    U R                  5       $ r-   _to_strr!   s    r#   prettyModel.pretty       ||~r&   c                     U R                  SS9$ )NTleanr   r!   s    r#   pretty_leanModel.pretty_lean   s    |||&&r&   c                H    S[        U 5      R                  [        U 5      4-  $ )Nz%s:%d)ru   r'   idr"   r   s     r#   r   Model._to_str   s     $t*--r$x888r&   c                "    U R                  5       $ r-   r   r!   s    r#   __str__Model.__str__   r   r&   )r}   r~   r|   r   r   ri   r-   r	   F)r'   r(   r)   r*   staticmethodrw   rY   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   rl   rm   s   @r#   ro   ro   G   s    
 
2%
K
 *
'9 r&   ro   c                  *    \ rS rSrS rSS jrS rSrg)Void   c                "    UR                  5       $ r-   )_voidr   s     r#   rf   
Void.parse       yy{r&   c                    g)Nz()r    r   s     r#   r   Void._to_str       r&   c                    gNTr    r!   s    r#   r   Void._nullable   r   r&   r    Nr   )r'   r(   r)   r*   rf   r   r   r+   r    r&   r#   r   r      s    r&   r   c                  $    \ rS rSrS rSS jrSrg)Any   c                "    UR                  5       $ r-   )_anyr   s     r#   rf   	Any.parse   s    xxzr&   c                    g)Nz/./r    r   s     r#   r   Any._to_str   r   r&   r    Nr   r'   r(   r)   r*   rf   r   r+   r    r&   r#   r   r      s    r&   r   c                  $    \ rS rSrS rSS jrSrg)Fail   c                "    UR                  5       $ r-   )_failr   s     r#   rf   
Fail.parse   r   r&   c                    g)Nz!()r    r   s     r#   r   Fail._to_str   r   r&   r    Nr   r   r    r&   r#   r  r     s    r&   r  c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )Comment   c                <   > S U l         [        TU ]	  [        US9S9  g )Ncommentrz   )r  rX   rY   r
   r"   rz   kwargsr]   s      r#   rY   Comment.__init__   s    S-.r&   c                "    SU R                    S3$ )Nz(* z *)r  r   s     r#   r   Comment._to_str   s    T\\N#&&r&   r  r-   r   r'   r(   r)   r*   rY   r   r+   rl   rm   s   @r#   r
  r
     s    /' 'r&   r
  c                      \ rS rSrSS jrSrg)
EOLComment   c                "    SU R                    S3$ )Nz  # r   r  r   s     r#   r   EOLComment._to_str   s    dll^2&&r&   r    Nr   )r'   r(   r)   r*   r   r+   r    r&   r#   r  r     s    'r&   r  c                  $    \ rS rSrS rSS jrSrg)EOF   c                $    UR                  5         g r-   )
_check_eofr   s     r#   rf   	EOF.parse   s    r&   c                    g)N$r    r   s     r#   r   EOF._to_str       r&   r    Nr   r   r    r&   r#   r  r     s    r&   r  c                  l   ^  \ rS rSrSU 4S jjrS rS rS rS rS r	S r
S	 rSS
 jrS rS rSrU =r$ )	Decorator   c                   > Ub
  U=U l         nO[        U[        5      (       d	  [        US9n[        TU ]  US9  [        U R                   [
        5      (       d   eg )Nexpr  )r*  rt   r
   rX   rY   ro   )r"   rz   r*  r  r]   s       r#   rY   Decorator.__init__   sS    ?  DHsC%% #,CS!$((E****r&   c                8    U R                   R                  U5      $ r-   r*  rf   r   s     r#   rf   Decorator.parse   s    xx~~c""r&   c                6    U R                   R                  5       $ r-   )r*  r   r!   s    r#   r   Decorator.defines       xx!!r&   c                8    U R                   R                  U5      $ r-   )r*  r   r   s     r#   r   Decorator.missing_rules   s    xx%%e,,r&   c                6    U R                   R                  5       $ r-   )r*  r   r!   s    r#   r   Decorator._used_rule_names   s    xx((**r&   c                8    U R                   R                  X5      $ r-   )r*  r   r   s      r#   r   Decorator._first   s    xxq$$r&   c                :    U R                   R                  XU5      $ r-   )r*  r   r   s       r#   r   Decorator._follow   s    xxq))r&   c                <    SU R                   R                  5       -   $ r   )r*  r   r!   s    r#   r   Decorator.nodecount   s    488%%'''r&   c                4    U R                   R                  US9$ )Nr   r*  r   r   s     r#   r   Decorator._to_str  s    xxT**r&   c                B    [         R                  " U R                  5      $ r-   r   ofr*  r!   s    r#   r   Decorator._nullable      {{488$$r&   c                    U R                   /$ r-   r)  r   s     r#   r   Decorator.at_same_pos  s    zr&   r)  ri   r   r'   r(   r)   r*   rY   rf   r   r   r   r   r   r   r   r   r   r+   rl   rm   s   @r#   r&  r&     s?    +#"-+%*(+% r&   r&  c                  $    \ rS rSrS rSS jrSrg)Groupi  c                    UR                  5          U R                  R                  U5        UR                  sS S S 5        $ ! , (       d  f       g = fr-   )_groupr*  rf   r   r   s     r#   rf   Group.parse  s,    ZZ\HHNN3== \\s   'A
Ac                    U R                   R                  US9n[        UR                  5       5      S:  a  S[	        U5       S3$ S[        U5       S3$ )Nr   r	   z(
z
)())r*  r   len
splitlinesr   r   )r"   r   r*  s      r#   r   Group._to_str  sS    hhD)s~~ 1$S))tCyk##r&   r    Nr   r   r    r&   r#   rH  rH    s    !
$r&   rH  c                  >   ^  \ rS rSrU 4S jrS rS rSS jrSrU =r	$ )Tokeni  c                F   > [         TU ]  5         U R                  nXl        g r-   )rX   __post_init__rz   tokenr"   rz   r]   s     r#   rU  Token.__post_init__  s    hh
r&   c                8    UR                  U R                  5      $ r-   )_tokenrV  r   s     r#   rf   Token.parse#  s    zz$**%%r&   c                    U R                   41$ r-   rV  r   s      r#   r   Token._first&      r&   c                ,    [        U R                  5      $ r-   )r   rV  r   s     r#   r   Token._to_str)  s    DJJr&   r]  r   )
r'   r(   r)   r*   rU  rf   r   r   r+   rl   rm   s   @r#   rS  rS    s    
&   r&   rS  c                  D   ^  \ rS rSrU 4S jrS rS rSS jrS rSr	U =r
$ )	Constanti-  c                D   > [         TU ]  5         U R                  U l        g r-   )rX   rU  rz   literalr"   r]   s    r#   rU  Constant.__post_init__.  s    xxr&   c                8    UR                  U R                  5      $ r-   )	_constantre  r   s     r#   rf   Constant.parse2  s    }}T\\**r&   c                    S1$ Nr    r    r   s      r#   r   Constant._first5  	    tr&   c                $    SU R                   < S3$ )N`re  r   s     r#   r   Constant._to_str8  s    4<<"!$$r&   c                    gr   r    r!   s    r#   r   Constant._nullable;  r   r&   rq  r   )r'   r(   r)   r*   rU  rf   r   r   r   r+   rl   rm   s   @r#   rc  rc  -  s!     +% r&   rc  c                  D   ^  \ rS rSrU 4S jrU 4S jrSU 4S jjrSrU =r$ )Alerti?  c                   > [         TU ]  5         U R                  R                  R                  U l        [        U R                  R                  5      U l        g r-   )rX   rU  rz   messagere  rO  levelrf  s    r#   rU  Alert.__post_init__@  s9    xx''//(
r&   c                "   > [         TU ]  U5      $ r-   )rX   rf   r"   r{   r]   s     r#   rf   Alert.parseE  s    w}S!!r&   c                B   > SU R                   -   [        TU ]	  5        3$ )N^)ry  rX   r   r"   r   r]   s     r#   r   Alert._to_strH  s$    

"#EGO$5#677r&   )ry  re  r   )	r'   r(   r)   r*   rU  rf   r   r+   rl   rm   s   @r#   rv  rv  ?  s    )
"8 8r&   rv  c                  Z   ^  \ rS rSrU 4S jr\S 5       rS rS rS
S jr	S r
S rS	rU =r$ )PatterniL  c                   > [         TU ]  5         U R                  n[        U[        5      (       d  U/nXl        [        R                  " U R                  5      U l	        g r-   )
rX   rU  rz   rt   r   patternsr   compilepatternregexrW  s     r#   rU  Pattern.__post_init__M  sD    hh#t$$%CZZ-
r&   c                8    SR                  U R                  5      $ NrD   )rM   r  r!   s    r#   r  Pattern.patternU  s    wwt}}%%r&   c                8    UR                  U R                  5      $ r-   )_patternr  r   s     r#   rf   Pattern.parseY  s    ||DLL))r&   c                |    U n[        U R                  R                  S5      5      (       a  [        SU4/5      $ U41$ )NrD   r    )boolr  matchr@   )r"   r5   r   rA   s       r#   r   Pattern._first\  s;    

  $%%aT
##D6Mr&   c                    / nS U R                    5        H9  nSU;   a  UR                  SS5      nSU S3nOSU S3nUR                  U5        M;     SR                  U5      $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7fr-   )str)r3   ps     r#   r6   "Pattern._to_str.<locals>.<genexpr>e  s     2MqCFFM   /"z\"z?"z
+ )r  rW   appendrM   )r"   r   partspatnewpatr  s         r#   r   Pattern._to_strc  sh    2DMM2CczS%0VHAC5
LL 3 {{5!!r&   c                J    [        U R                  R                  S5      5      $ r  )r  r  r  r!   s    r#   r   Pattern._nullablen  s    DJJ$$R())r&   c                :    U R                   R                  SS5      $ )Nz\\\)r  rW   r!   s    r#   r$   Pattern.__repr__q  s    ||##FD11r&   )r  r  r   )r'   r(   r)   r*   rU  rk   r  rf   r   r   r   r$   r+   rl   rm   s   @r#   r  r  L  s:    . & &*	"*2 2r&   r  c                  8   ^  \ rS rSrU 4S jrSS jrS rSrU =r$ )	Lookaheadiu  c                x   > UR                  5          [        TU ]	  U5      sS S S 5        $ ! , (       d  f       g = fr-   )_ifrX   rf   r|  s     r#   rf   Lookahead.parsev  s"    WWY7=% YY   +
9c                :    SU R                   R                  US9-   $ )N&r   r=  r   s     r#   r   Lookahead._to_strz  s    TXX%%4%000r&   c                    gr   r    r!   s    r#   r   Lookahead._nullable}  r   r&   r    r   	r'   r(   r)   r*   rf   r   r   r+   rl   rm   s   @r#   r  r  u  s    &1 r&   r  c                  8   ^  \ rS rSrU 4S jrSS jrS rSrU =r$ )NegativeLookaheadi  c                x   > UR                  5          [        TU ]	  U5      sS S S 5        $ ! , (       d  f       g = fr-   )_ifnotrX   rf   r|  s     r#   rf   NegativeLookahead.parse  s"    ZZ\7=% \\r  c                L    S[        U R                  R                  US95      -   $ )N!r   )r  r*  r   r   s     r#   r   NegativeLookahead._to_str  s$    S))t)4555r&   c                    gr   r    r!   s    r#   r   NegativeLookahead._nullable  r   r&   r    r   r  rm   s   @r#   r  r    s    &6 r&   r  c                  >   ^  \ rS rSrU 4S jrU 4S jrSS jrSrU =r$ )SkipToi  c                H   >^^ [         TU ]  mTR                  UU4S j5      $ )Nc                    > T" T 5      $ r-   r    )r{   super_parses   r#   <lambda>SkipTo.parse.<locals>.<lambda>  s
    K$4r&   )rX   rf   _skip_to)r"   r{   r  r]   s    `@r#   rf   SkipTo.parse  s    gm||455r&   c                <   > [        S15      [        TU ]	  X5      -  $ )Nr-   )r@   rX   r   )r"   r5   r   r]   s      r#   r   SkipTo._first  s    WI!555r&   c                :    SU R                   R                  US9-   $ )Nz->r   r=  r   s     r#   r   SkipTo._to_str  s    dhh&&D&111r&   r    r   )	r'   r(   r)   r*   rf   r   r   r+   rl   rm   s   @r#   r  r    s    662 2r&   r  c                  h   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rSS
 jrS rS rSrU =r$ )Sequencei  c                T   > UR                   (       d   eSU l         [        TU ]	  US9  g )Nr    r  )sequencerX   rY   r  s      r#   rY   Sequence.__init__  s&    |||S!r&   c                    U R                    Vs/ s H  o"R                  U5      PM     snUl        UR                  $ s  snf r-   )r  rf   r   )r"   r{   ss      r#   rf   Sequence.parse  s1    /3}}=}!}=}} >s   =c                x    U R                    VVs/ s H  oR                  5         H  o"PM     M     snn$ s  snnf r-   )r  r   )r"   r  ds      r#   r   Sequence.defines  s*    ==>=a))+Q+=>>>   "6c                    [        5       R                  " U R                   Vs/ s H  o"R                  U5      PM     sn6 $ s  snf r-   )r@   unionr  r   )r"   rZ   r  s      r#   r   Sequence.missing_rules  s0    v||dmmLmooe4mLMML   Ac                    [        5       R                  " U R                   Vs/ s H  oR                  5       PM     sn6 $ s  snf r-   )r@   r  r  r   )r"   r  s     r#   r   Sequence._used_rule_names  s0    v||DMMJMq002MJKKJ   A c                x    S1nU R                    H   nUR                  X5      n[        X5U5      nM"     X0l        U$ rl  )r  r   rB   r}   )r"   r5   r   resultr  rA   s         r#   r   Sequence._first  s>    AA &Q'F   r&   c                    Un[        U R                  5       HY  n[        U[        5      (       a  X%R                  ==   U-  ss'   UR                  XU5        [        UR                  US9XA5      nM[     U$ )N)r5   )reversedr  rt   RuleRefr/   r   rB   r   )r"   r5   r   r4   fsrA   s         r#   r   Sequence._follow  sb    $--(A!W%%66
b 
IIaR ajj1jor-B	 )
 r&   c                @    S[        S U R                   5       5      -   $ )Nr	   c              3  @   #    U  H  oR                  5       v   M     g 7fr-   r   )r3   r  s     r#   r6   %Sequence.nodecount.<locals>.<genexpr>  s     <m{{}}m   )sumr  r!   s    r#   r   Sequence.nodecount  s    3<dmm<<<<r&   c           	     B   U R                  5       nU R                   Vs/ s H  n[        UR                  US95      PM     nnSR	                  U5      n[        U5      [        ::  a!  [        UR                  5       5      S::  a  X%-   $ USR	                  U5      -   $ s  snf )Nr   r   r	   r   )r   r  r  r   rM   rO  	PEP8_LLENrP  )r"   r   r   r  seqsingles         r#   r   Sequence._to_str  s    $$&26--@-Qs199$9'(-@#v;)#F,=,=,?(@A(E$$diin,, As   "Bc                B    [         R                  " U R                  5      $ r-   )r   allr  r!   s    r#   r   Sequence._nullable  s    ||DMM**r&   c                   ^ [        [        U4S jU R                  5      5      n[        U5      [        U R                  5      :  a'  UR	                  U R                  [        U5         5        U$ )Nc                &   > U R                  T5      $ r-   )r   )rJ   r{   s    r#   r  &Sequence.at_same_pos.<locals>.<lambda>  s    c(:r&   )r   r   r  rO  r  )r"   r{   heads    ` r#   r   Sequence.at_same_pos  sL    I:DMMJKt9s4==))KKc$i01r&   )r}   r  r   rF  rm   s   @r#   r  r    sA    "
?NL	=-+ r&   r  c                  l   ^  \ rS rSrSU 4S jjrS rS rS rS rS r	S r
S	 rSS
 jrS rS rSrU =r$ )Choicei  c                   > / U l         [        TU ]	  [        US9S9  [	        U R                   [
        5      (       d   [        U R                   5      5       eg )Noptionsr  )r  rX   rY   r
   rt   r   r   r  s      r#   rY   Choice.__init__  sD    S-.$,,--AtDLL/AA-r&   c                   UR                  5          U R                   HH  nUR                  5          UR                  U5      Ul        UR                  sS S S 5        s  sS S S 5        $    U R                  5       nU(       a  UR                  SU S35        UR                  S5         S S S 5        g ! , (       d  f       M  = f! , (       d  f       g = f)Nzexpecting one of: :zno available options)_choicer  _optionrf   r   r   _error)r"   r{   or   s       r#   rf   Choice.parse  s    [[]\\[[]$%GGCLCM== #] ]!
 **,I

/	{!<=JJ-. ]"] ]s)    C"B1C(A C1
C ;C
Cc                x    U R                    VVs/ s H  oR                  5         H  o"PM     M     snn$ s  snnf r-   )r  r   )r"   r  r  s      r#   r   Choice.defines  s*    <<=<aA<===r  c                    [        5       R                  " U R                   Vs/ s H  o"R                  U5      PM     sn6 $ s  snf r-   )r@   r  r  r   )r"   rZ   r  s      r#   r   Choice.missing_rules  s0    v||dllKlooe4lKLLKr  c                    [        5       R                  " U R                   Vs/ s H  oR                  5       PM     sn6 $ s  snf r-   )r@   r  r  r   )r"   r  s     r#   r   Choice._used_rule_names  s0    v||DLLILq002LIJJIr  c                r    [        5       nU R                   H  nX4R                  X5      -  nM     X0l        U$ r-   )r@   r  r   r}   )r"   r5   r   r  r  s        r#   r   Choice._first  s1    Ahhqn$F r&   c                P    U R                    H  nUR                  XU5        M     U$ r-   )r  r   )r"   r5   r   r4   r  s        r#   r   Choice._follow  s#    AIIaQ r&   c                @    S[        S U R                   5       5      -   $ )Nr	   c              3  @   #    U  H  oR                  5       v   M     g 7fr-   r  r3   r  s     r#   r6   #Choice.nodecount.<locals>.<genexpr>   s     ;l{{}}lr  )r  r  r!   s    r#   r   Choice.nodecount  s    3;dll;;;;r&   c           	     p   U R                    Vs/ s H  n[        UR                  US95      PM     nn[        S U 5       5      nSR	                  S U 5       5      nU(       a  SR	                  S U 5       5      $ U(       a.  [        U5      [        :  a  SSR	                  S	 U 5       5      -   $ U$ s  snf )
Nr   c              3  Z   #    U  H!  n[        UR                  5       5      S :  v   M#     g7f)r	   N)rO  rP  r  s     r#   r6   !Choice._to_str.<locals>.<genexpr>  s      =WC'!+Ws   )+z | c              3  $   #    U  H  ov   M     g 7fr-   r    r  s     r#   r6   r    s     /w!Aw   z
|
c              3  8   #    U  H  n[        U5      v   M     g 7fr-   )r   r  s     r#   r6   r  	  s     ;7aq		7r  z| z
| c              3  $   #    U  H  ov   M     g 7fr-   r    r  s     r#   r6   r    s     %9Aar  )r  r  r   anyrM   rO  r  )r"   r   r  r  multir  s         r#   r   Choice._to_str  s    6:llCl3qyydy+,lC=W==/w//<<;7;;;Vy0&++%9%9999M Ds   "B3c                B    [         R                  " U R                  5      $ r-   )r   r  r  r!   s    r#   r   Choice._nullable  s    ||DLL))r&   c                    U R                   $ r-   r  r   s     r#   r   Choice.at_same_pos  s    ||r&   )r}   r  r-   r   rF  rm   s   @r#   r  r    sB    B
>MK
<* r&   r  c                  (   ^  \ rS rSrU 4S jrSrU =r$ )Optioni  c                H   > [         TU ]  U5      nU R                  X5        U$ r-   )rX   rf   r   )r"   r{   r  r]   s      r#   rf   Option.parse  s$    s#$$S1r&   r    )r'   r(   r)   r*   rf   r+   rl   rm   s   @r#   r#  r#    s     r&   r#  c                  0    \ rS rSrS rS rSS jrS rSrg)	Closurei  c                2   ^ ^ TR                  UU 4S j5      $ )Nc                 :   > TR                   R                  T 5      $ r-   r-  r{   r"   s   r#   r  Closure.parse.<locals>.<lambda>  s    DHHNN3$7r&   )_closurer   s   ``r#   rf   Closure.parse  s    ||788r&   c                    U R                   R                  X5      nS1n[        U5       H  n[        XCU5      nM     [	        S15      U-  $ rl  )r*  r   rangerB   r@   r"   r5   r   efirstr  _is         r#   r   Closure._first!  sF    &(B&!,F RDzF""r&   c                    [        U R                  R                  US95      n[        UR	                  5       5      S::  a  SU S3$ S[        U5       S3$ Nr   r	   {}z{
z
})r  r*  r   rO  rP  r   )r"   r   sexps      r#   r   Closure._to_str(  sS    488###./t !Q&vR= &,t,,r&   c                    gr   r    r!   s    r#   r   Closure._nullable/  r   r&   r    Nr   	r'   r(   r)   r*   rf   r   r   r   r+   r    r&   r#   r'  r'    s    9#-r&   r'  c                  >   ^  \ rS rSrS rS rSU 4S jjrS rSrU =r	$ )PositiveClosurei3  c                2   ^ ^ TR                  UU 4S j5      $ )Nc                 :   > TR                   R                  T 5      $ r-   r-  r*  s   r#   r  'PositiveClosure.parse.<locals>.<lambda>5  s    TXX^^C-@r&   )_positive_closurer   s   ``r#   rf   PositiveClosure.parse4  s    $$%@AAr&   c                ~    U R                   R                  X5      nS1n[        U5       H  n[        XCU5      nM     U$ rl  )r*  r   r/  rB   r0  s         r#   r   PositiveClosure._first7  s:    &(B&!,F r&   c                $   > [         TU ]  US9S-   $ Nr   +rX   r   r  s     r#   r   PositiveClosure._to_str>      wD)C//r&   c                B    [         R                  " U R                  5      $ r-   r@  r!   s    r#   r   PositiveClosure._nullableA  rC  r&   r    r   )
r'   r(   r)   r*   rf   r   r   r   r+   rl   rm   s   @r#   r>  r>  3  s    B0% %r&   r>  c                  L   ^  \ rS rSrSrS	U 4S jjrS rS rS
S jrS r	Sr
U =r$ )JoiniE  %c                Z   > [         TU ]  UR                  5        UR                  U l        g r-   )rX   rY   r*  sepr  s      r#   rY   Join.__init__H  s    !77r&   c                F   ^ ^ UU 4S jnUU 4S jnT R                  TX25      $ )Nc                 :   > TR                   R                  T 5      $ r-   )rR  rf   r*  s   r#   rR  Join.parse.<locals>.sepM      88>>#&&r&   c                 :   > TR                   R                  T 5      $ r-   r-  r*  s   r#   r*  Join.parse.<locals>.expP  rW  r&   )	_do_parse)r"   r{   rR  r*  s   ``  r#   rf   
Join.parseL  s     	'	' ~~c3,,r&   c                $    UR                  X#5      $ r-   )_joinr"   r{   r*  rR  s       r#   rZ  Join._do_parseU  s    yy""r&   c                   U R                   R                  US9n[        U R                  R                  US95      n[	        UR                  5       5      S::  a  U U R                   SU S3$ U U R                   SU S3$ r5  )rR  r   r  r*  rO  rP  JOINOP)r"   r   ssepr8  s       r#   r   Join._to_strX  s    xxT*488###./t !Q&VDKK=4&33VDKK=TF$77r&   c                    gr   r    r!   s    r#   r   Join._nullable`  r   r&   )rR  r-   r   )r'   r(   r)   r*   ra  rY   rf   rZ  r   r   r+   rl   rm   s   @r#   rO  rO  E  s&    F-#8 r&   rO  c                  8   ^  \ rS rSrS rSU 4S jjrS rSrU =r$ )PositiveJoinid  c                $    UR                  X#5      $ r-   )_positive_joinr^  s       r#   rZ  PositiveJoin._do_parsee  s    !!#++r&   c                $   > [         TU ]  US9S-   $ rG  rI  r  s     r#   r   PositiveJoin._to_strh  rK  r&   c                B    [         R                  " U R                  5      $ r-   r@  r!   s    r#   r   PositiveJoin._nullablek  rC  r&   r    r   	r'   r(   r)   r*   rZ  r   r   r+   rl   rm   s   @r#   rg  rg  d  s    ,0% %r&   rg  c                      \ rS rSrSrS rSrg)LeftJoinio  r   c                $    UR                  X#5      $ r-   )
_left_joinr^  s       r#   rZ  LeftJoin._do_parser  s    ~~c''r&   r    Nr'   r(   r)   r*   ra  rZ  r+   r    r&   r#   rq  rq  o  s    F(r&   rq  c                      \ rS rSrSrS rSrg)	RightJoiniv  r   c                $    UR                  X#5      $ r-   )_right_joinr^  s       r#   rZ  RightJoin._do_parsey  s    s((r&   r    Nru  r    r&   r#   rw  rw  v  s    F)r&   rw  c                      \ rS rSrSrS rSrg)Gatheri}  .c                $    UR                  X#5      $ r-   )_gatherr^  s       r#   rZ  Gather._do_parse  s    {{3$$r&   r    Nru  r    r&   r#   r|  r|  }  s    F%r&   r|  c                  8   ^  \ rS rSrS rSU 4S jjrS rSrU =r$ )PositiveGatheri  c                $    UR                  X#5      $ r-   )_positive_gatherr^  s       r#   rZ  PositiveGather._do_parse  s    ##C--r&   c                $   > [         TU ]  US9S-   $ rG  rI  r  s     r#   r   PositiveGather._to_str  rK  r&   c                B    [         R                  " U R                  5      $ r-   r@  r!   s    r#   r   PositiveGather._nullable  rC  r&   r    r   ro  rm   s   @r#   r  r    s    .0% %r&   r  c                  0    \ rS rSrS rS rSS jrS rSrg)	EmptyClosurei  c                "    UR                  5       $ r-   )_empty_closurer   s     r#   rf   EmptyClosure.parse  s    !!##r&   c                    S1$ rl  r    r   s      r#   r   EmptyClosure._first  rn  r&   c                    g)Nz{}r    r   s     r#   r   EmptyClosure._to_str  r   r&   c                    gr   r    r!   s    r#   r   EmptyClosure._nullable  r   r&   r    Nr   r<  r    r&   r#   r  r    s    $r&   r  c                  4    \ rS rSrS rS rS	S jrSrS rSr	g)
Optionali  c                    S Ul         U R                  XR                  5        UR                  5          U R                  R                  U5      sS S S 5        $ ! , (       d  f       g = fr-   )r   r   rz   	_optionalr*  rf   r   s     r#   rf   Optional.parse  s>    $$S''2]]_88>>#& __s   A
A&c                R    [        S15      U R                  R                  X5      -  $ rl  )r@   r*  r   r   s      r#   r   Optional._first  s     RDzDHHOOA111r&   c                ,   [        U R                  R                  US95      nSn[        U R                  [        5      (       a  [        U R                  5      nX2-  $ [        U R                  [        5      (       a  U R                  R                  nX2-  $ )Nr   z[%s])r  r*  r   rt   r  r   str_templaterH  )r"   r   r*  templates       r#   r   Optional._to_str  sv    $(("""-.dhh''D--.H ~ %((((,,C~r&   z8
            [
            %s
            ]
            c                    gr   r    r!   s    r#   r   Optional._nullable  r   r&   r    Nr   )
r'   r(   r)   r*   rf   r   r   r  r   r+   r    r&   r#   r  r    s    '2Lr&   r  c                  0    \ rS rSrS rS rSS jrS rSrg)	Cuti  c                $    UR                  5         g r-   )_cutr   s     r#   rf   	Cut.parse  s    
r&   c                    S1$ )N)~r    r   s      r#   r   
Cut._first  s	    xr&   c                    g)Nr  r    r   s     r#   r   Cut._to_str  r$  r&   c                    gr   r    r!   s    r#   r   Cut._nullable  r   r&   r    Nr   r<  r    r&   r#   r  r    s    r&   r  c                  H   ^  \ rS rSrSU 4S jjrS rU 4S jrSS jrSrU =r	$ )	Namedi  c                Z   > [         TU ]  UR                  5        UR                  U l        g r-   )rX   rY   r*  r/   r  s      r#   rY   Named.__init__  s    !HH	r&   c                l    U R                   R                  U5      nX!R                  U R                  '   U$ r-   )r*  rf   rz   r/   r"   r{   r   s      r#   rf   Named.parse  s)    s#"		r&   c                >   > U R                   S4/[        TU ]	  5       Q$ r   r/   rX   r   rf  s    r#   r   Named.defines  s!    E"7UW_%677r&   c                    U(       a  U R                   R                  SS9$ U R                   SU R                   R                  US9 3$ )NTr   r  r*  r   r/   r   s     r#   r   Named._to_str  sE    88###..))Adhh..D.9:;;r&   r.   r-   r   )
r'   r(   r)   r*   rY   rf   r   r   r+   rl   rm   s   @r#   r  r    s    
8< <r&   r  c                  8   ^  \ rS rSrS rU 4S jrSS jrSrU =r$ )	NamedListi  c                    U R                   R                  U5      nUR                  R                  U R                  U5        U$ r-   )r*  rf   rz   _setlistr/   r  s      r#   rf   NamedList.parse  s1    s#E*r&   c                >   > U R                   S4/[        TU ]	  5       Q$ r   r  rf  s    r#   r   NamedList.defines  s!    D!6EGO$566r&   c                    U(       a  U R                   R                  SS9$ U R                   SU R                   R                  US9< 3$ )NTr   z+:r  r   s     r#   r   NamedList._to_str  sE    88###..))Btxx//T/:=>>r&   r    r   )	r'   r(   r)   r*   rf   r   r   r+   rl   rm   s   @r#   r  r    s    
7? ?r&   r  c                  2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )Overridei  c                0   > [         TU ]  [        SUS9S9  g N@)r/   r*  r  rX   rY   r
   r  s      r#   rY   Override.__init__      Scs34r&   c                    / $ r-   r    r!   s    r#   r   Override.defines  r   r&   r    r-   r'   r(   r)   r*   rY   r   r+   rl   rm   s   @r#   r  r        5 r&   r  c                  2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )OverrideListi  c                0   > [         TU ]  [        SUS9S9  g r  r  r  s      r#   rY   OverrideList.__init__  r  r&   c                    / $ r-   r    r!   s    r#   r   OverrideList.defines  r   r&   r    r-   r  rm   s   @r#   r  r    r  r&   r  c                  *    \ rS rSrS rSS jrS rSrg)Speciali  c                    U R                   41$ r-   r   r   s      r#   r   Special._first  r_  r&   c                "    SU R                    S3$ )N?r  r   s     r#   r   Special._to_str  s    4::,a  r&   c                    gr   r    r!   s    r#   r   Special._nullable  r   r&   r    Nr   )r'   r(   r)   r*   r   r   r   r+   r    r&   r#   r  r    s    !r&   r  c                  d   ^  \ rS rSrU 4S jrS rS rS rS rS r	SS jr
SS	 jrSS
 jrSrU =r$ )r  i  c                D   > [         TU ]  5         U R                  U l        g r-   )rX   rU  rz   r/   rf  s    r#   rU  RuleRef.__post_init__  s    HH	r&   c                     UR                  U R                  5      nU" 5       $ ! [         a!    UR                  U R                  [        S9   g f = f)N)exclass)rg   r/   KeyErrorr  r   )r"   r{   r\   s      r#   rf   RuleRef.parse
  sG    	>>$)),D 6M  	5JJtyy)J4	5s   $ (AAc                b    U R                   U;  a  [        U R                   15      $ [        5       $ r-   r/   r@   r   s     r#   r   RuleRef.missing_rules  s&    99E!$$vr&   c                    U R                   1$ r-   r.   r!   s    r#   r   RuleRef._used_rule_names  s    		{r&   c                    [        X R                     5      [        U R                  5      1-  U l        U R                  $ r-   )r@   r/   r0   r}   r   s      r#   r   RuleRef._first  s.    a		l+s499~.>>~~r&   c                `    X R                   ==   U-  ss'   [        U5      U R                   1-  $ r-   r  r   s       r#   r   RuleRef._follow  s'    
99Aw$))$$r&   c                j    U R                   c  [        U R                  5      1U l         U R                   $ r-   )r}   r0   r/   r   s     r#   r   RuleRef.firstset"  s(    >>!!$))n-DN~~r&   c                    U R                   $ r-   r.   r   s     r#   r   RuleRef._to_str'  s    yyr&   c                <    XR                      R                  U5      $ r-   )r/   r   r   s     r#   r   RuleRef.is_nullable*  s    99~))#..r&   )r}   r/   r   r   r-   )r'   r(   r)   r*   rU  rf   r   r   r   r   r   r   r   r+   rl   rm   s   @r#   r  r    s5    
%
/ /r&   r  c                  2   ^  \ rS rSrU 4S jrSS jrSrU =r$ )RuleIncludei.  c                   > [        U[        5      (       d   [        UR                  5      5       e[        TU ]  UR                  5        Xl        g r-   )rt   Ruler  r/   rX   rY   r*  r\   )r"   r\   r]   s     r#   rY   RuleInclude.__init__/  s9    $%%5s499~5%"	r&   c                4    SU R                   R                   3$ )Nr   )r\   r/   r   s     r#   r   RuleInclude._to_str4  s    499>>"##r&   )r\   r   r  rm   s   @r#   r  r  .  s    
$ $r&   r  c                  h   ^  \ rS rSrSU 4S jjrS rS rS rS rS r	\
S 5       rSS	 jrS
rSrU =r$ )r  i8  c                  > Ub  [        U[        5      (       d   U5       e[        TU ]  X1S9  X l        X@l        XPl        U=(       d    / U l        SU R                  ;   U l        S U l	        SU l
        SU R                  ;  U l        g )N)r*  rz   r/   Fnomemo)rt   r   rX   rY   r/   paramskwparams
decoratorsis_namebase
is_leftrecis_memoizable)r"   rz   r/   r*  r   r  r  r]   s          r#   rY   Rule.__init__9  sz    :h#@#@J(J@S*	 $*0	%T__<r&   c                8    U R                  XR                  5      $ r-   )
_parse_rhsr*  r   s     r#   rf   
Rule.parseF      sHH--r&   c           	         [        U R                  UR                  U R                  U R                  U R
                  U R                  U R                  5      nUR                  U5      $ r-   )	r   r/   rf   r  r  r  r   r  _call)r"   r{   r*  ruleinfos       r#   r	  Rule._parse_rhsI  sP    IIIIOOLLKKMM
 yy""r&   c                x    U R                   R                  X5      X R                     -  U l        U R                  $ r-   )r*  r   r/   r}   r   s      r#   r   Rule._firstX  s+    .99=~~r&   c                R    U R                   R                  XX R                     5      $ r-   )r*  r   r/   r   s       r#   r   Rule._follow\  s    xxr))}55r&   c                B    [         R                  " U R                  5      $ r-   r@  r!   s    r#   r   Rule._nullable_  rC  r&   c                    [        U [        [        -  5      (       d*  [        U [        5      (       a   U R	                  5       (       a  [        U 5      $ [        U 5      $ r-   )rt   r   floatr  isalnumr   )r  s    r#   
param_reprRule.param_reprb  s;    au%%*Q*<*<q6M7Nr&   c                  ^  T R                  5       nU(       a  SnOT R                  (       a%  SR                  U 4S jT R                   5       5      OSnSnT R                  (       a3  SR                  U 4S jT R                  R	                  5        5       5      nU(       a  U(       a
  SU SU S3nO9U(       a  SU S3nO+U(       a$  [        T R                  5      S:X  a  SU 3OSU S3nT R                  (       a  S	T R                  R                  < 3OSn[        T R                  5      R                  T R                  UU[        T R                  R                  US
95      UT R                  (       a  SS9$ SS9$ )NrD   z, c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr-   r  )r3   r  r"   s     r#   r6   Rule._to_str.<locals>.<genexpr>o  s     Bk$//!,,kr>   c              3  T   >#    U  H  u  pU S TR                  U5       3v   M     g7f)=Nr  )r3   r5   vr"   s      r#   r6   r  v  s/      %"7 c4??1-./"7   %(rM  rN  r	   z::z < r   z@name
)r/   r  r   r*  r   r  )r   r   rM   r  r   rO  r  r/   r   r  r   r   r*  r   r  )r"   r   r   r   r  r  s   `     r#   r   Rule._to_stri  s]   $$&F ;; 		BdkkBB  H}}99 %"&--"5"5"7% 
 (VHBxj2XJa 4;;'1, MVHA  ,099TYY^^&'"D%%&--txx''T'23!%I . 
 	
 46 . 
 	
r&   z                {is_name}{comments}{name}{base}{params}
                    =
                {exp}
                    ;
                )	r}   r  r  r  r  r  r  r/   r   r-   r   )r'   r(   r)   r*   rY   rf   r	  r   r   r   r   r  r   r  r+   rl   rm   s   @r#   r  r  8  sB    =.
#6%  &
PLr&   r  c                  :   ^  \ rS rSr SU 4S jjrS rS rSrU =r$ )	BasedRulei  c           	     :  > [         TU ]  UUUU=(       d    UR                  U=(       d    UR                  US9  X@l        [        U R                  R                  U R                  /S9nUR                  U R                  R                  5        [        US9U l
        g )N)r  )r  r  )rX   rY   r   r  r  r
   r*  set_parseinfo	parseinfor  rhs)	r"   rz   r/   r*  r  r   r  r  r]   s	           r#   rY   BasedRule.__init__  s     	!dkk%! 	 	
 	DIIMM48845$))--.$r&   c                8    U R                  XR                  5      $ r-   )r	  r)  r   s     r#   rf   BasedRule.parse  r  r&   c                6    U R                   R                  5       $ r-   )r)  r   r!   s    r#   r   BasedRule.defines  r1  r&   )r  r)  r-   )	r'   r(   r)   r*   rY   rf   r   r+   rl   rm   s   @r#   r%  r%    s    AE% ." "r&   r%  c                     ^  \ rS rSr  S   SU 4S jjjr\S 5       r\S 5       r\R                  S 5       rS r	S r
S r\S	 5       rSS
 jrSS jrSS jrSSS jjrS rSS jrSrU =r$ )Grammari  c                 > [         T	U ]  5         [        U[        5      (       d   [	        U5      5       eU=(       d    0 nX@l        [        R                  " SX0S.UD6nUR                  " S0 UD6nX0l	        X l
        U Vs0 s H  ofR                  U_M     snU l        UR                  " S0 UD6nUc  U R
                  R                  S5      nUc  [        UR                   5      R"                  nXl        U R%                  ['        S U R                   5       5      5      nU(       a+  SR)                  S/[+        U5      Q5      n[-        SU-   5      eU R/                  5         UR0                  (       a  [3        U 5        g g s  snf )N)rU   ownergrammarc              3  8   #    U  H  oR                   v   M     g 7fr-   r.   r3   rs     r#   r6   #Grammar.__init__.<locals>.<genexpr>  s     )E*Q&&*r  r   rD   z#Unknown rules, no parser generated:r    )rX   rY   rt   r   r  
directivesr   rV   rW   rU   rZ   r/   rulemapmergegetr   filenamestemr   r@   rM   r   r   _calc_lookahead_setsleft_recursionr   )
r"   r/   rZ   rU   r8  r[   r\   missingmsgr]   s
            r#   rY   Grammar.__init__  sF    	%&&2E
2&%2
$!!JJzJ+(+
49:ED		4E:+
+<??&&y1D<(--D	$$T)E$**)E%EF))R2&/23CDsJKK!!#  % !! ;s    Fc                .    U R                   R                  $ r-   )rU   keywordsr!   s    r#   rD  Grammar.keywords  s    {{###r&   c                .    U R                   R                  $ r-   rU   	semanticsr!   s    r#   rH  Grammar.semantics  s    {{$$$r&   c                $    XR                   l        g r-   rG  )r"   r   s     r#   rH  rI    s     %r&   c                    [        5       R                  " U R                   Vs/ s H  o"R                  U5      PM     sn6 $ s  snf r-   )r@   r  rZ   r   )r"   rZ   r\   s      r#   r   Grammar.missing_rules  s7    v||48JJ?JD  'J?
 	
?r  c                6   U R                   (       d  0 $ SU R                   S   R                  1n0 nX:w  a^  UnU[        5       R                  " U R                    Vs/ s H%  nUR                  U;   d  M  UR	                  5       PM'     sn6 -  nX:w  a  M^  U$ s  snf )NrS   r   )rZ   r/   r@   r  r   )r"   usedprevr\   s       r#   r   Grammar._used_rule_names  s    zzIA++,lDDFLL !%

 *yyD( ,D))+ * D l s   B
3B
c                    U R                  5       nU R                   Vs/ s H  o"R                  U;   d  M  UPM     sn$ s  snf r-   )r   rZ   r/   )r"   rN  r\   s      r#   
used_rulesGrammar.used_rules  s5    $$&!%AyyD/@AAAs   ??c                    U R                   $ r-   )r}   r!   s    r#   
first_setsGrammar.first_sets  s    ~~r&   c                D    U R                  5         U R                  5         g r-   )_calc_first_sets_calc_follow_setsr   s     r#   r>  Grammar._calc_lookahead_sets  s     r&   c                   [        [        5      nS nX2:w  aJ  [        U5      nU R                   H(  nX$R                  ==   UR                  X5      -  ss'   M*     X2:w  a  MJ  U R                   H  nX$R                     Ul        M     g r-   )r   r@   r   rZ   r/   r   r}   )r"   r5   r   f1r\   s        r#   rX  Grammar._calc_first_sets  sj    gaB

))A 11 # g JJDyy\DN r&   c                    [        [        5      nS nX2:w  a?  [        U5      nU R                   H  nUR	                  X[        5       5        M     X2:w  a  M?  U R                   H  nX$R
                     Ul        M     g r-   )r   r@   r   rZ   r   r/   r~   )r"   r5   r   fl1r\   s        r#   rY  Grammar._calc_follow_sets  sb    ir(C

QDF+ # i
 JJD!))}D r&   c                  U R                   R                  U5      nUR                  " S0 UD6nUR                  5       nUc  U R                  S   R
                  nXRl        Uc  [        U R                  US9nUR                  XS9$ )Nr   rT   r    )	rU   replace_configrW   effective_rule_namerZ   r/   
start_rulerP   rf   )r"   textrU   r{   r[   rS   s         r#   rf   Grammar.parse  sy    ++F3+(+**,=JJqM&&E %;tzz&9Cyyy--r&   c                @    S[        S U R                   5       5      -   $ )Nr	   c              3  @   #    U  H  oR                  5       v   M     g 7fr-   r  r5  s     r#   r6   $Grammar.nodecount.<locals>.<genexpr>+  s     9j{{}}jr  )r  rZ   r!   s    r#   r   Grammar.nodecount*  s    39djj9999r&   c                ,  ^ 1 SknSS1nS1nSnU R                   R                  5        HL  u  pg[        UXb;   a  SOSXd;   a  [        U5      OXc;   a  [	        U5      OUS9nUSR
                  " S0 UD6-  nMN     U(       a  US	-  nS	R                  S
 [        [        U R                  5      S5       5       5      R                  5       n	U	(       a  SU	-   S	-   OSn	SR                  U4S jU R                   5       5      R                  5       S	-   n
XY-   U
-   $ )N>   r   
whitespaceeol_commentsr   r3  	namecharsrD   r  )r/   framer   z"@@{name} :: {frame}{value}{frame}
r   c              3  X   #    U  H   nS SR                  S U 5       5      -   v   M"     g7f)z@@keyword :: r   c              3  @   #    U  H  oc  M  [        U5      v   M     g 7fr-   r   )r3   r5   s     r#   r6   ,Grammar._to_str.<locals>.<genexpr>.<genexpr>D  s     &K1wtAwws   NrL   rI   s     r#   r6   "Grammar._to_str.<locals>.<genexpr>C  s+      
5 chh&K&KKK5s   (*   z

c              3  T   >#    U  H  n[        UR                  TS 95      v   M     g7f)r   N)r  r   )r3   r\   r   s     r#   r6   rs  J  s$     LDLLdL344r"  r    )r8  r   r   r   r  r   rM   r   r   rD  r   rZ   rstrip)r"   r   regex_directivesustr_directivesstring_directivesr8  	directiver   fmtrD  rZ   s    `         r#   r   Grammar._to_str-  s$   E%y1(M
 $ 5 5 7I&:c !5 K !3 U
C ?FFMMMJ !8 $J99 
F4==115
 
 %' 	 086H$t+R KKLLL
&(T $u,,r&   )rU   r8  r/   r9  rZ   ri   )rU   rj   r8  zdict | Noner   )rU   rj   re  r  r   )r'   r(   r)   r*   rY   rk   rD  rH  setterr   r   rR  rU  r>  rX  rY  rf   r   r   r+   rl   rm   s   @r#   r0  r0    s     '+"&$&
 $$&  $& $&L $ $ % % & &

"B  !
*	-.:- -r&   r0  )T
__future__r   rd   collectionsr   collections.abcr   r   	itertoolsr   pathlibr   rz   r
   r   r@   contextsr   
exceptionsr   r   infosr   r   leftrecr   r   objectmodelr   utilr   r   r   r   r   r  	PRAGMA_REr  r   r0   rB   rN   rP   ro   r   r   r  r
  r  r  r&  
_DecoratorrH  rS  rc  rv  r  r  r  r  r  r  r#  r'  r>  rO  rg  rq  rw  r|  r  r  r  r  r  r  r  r  r  r  r  r  r%  r0  r    r&   r#   <module>r     s]   "  # #     + " / ) 2  8 8	 	3 
7H?< ?0fD fR5 % 5 'e '' '
% ' 'V 
$I $ E   u $
8H 
8&2e &2R		 			 	
2Y 
2:u :z<U <~Y i ,%g %$9 >%4 %(| () )%T %%V %5 y :% <I <&? ?u 9 e &/e &/R$) $^9 ^B" "0[-e [-r&   