
    ^h                         S r SSKJrJr  SSKJrJrJrJrJ	r	  SSK
JrJrJrJr  SSKJr  SSKJrJrJrJr  SSKJr   " S	 S
5      r\\   r " S S5      rS rS r " S S5      rg)z*Provides for superficial grammar analysis.    )Counterdefaultdict)ListDictIterator	FrozenSetSet   )bfsfzsetclassify
OrderedSet)GrammarError)RuleTerminalNonTerminalSymbol)
ParserConfc                       \ rS rSr% Sr\\S'   \\S'   S\S\4S jrS r	\
S\4S j5       rS	\SS 4S
 jr\
S\4S j5       rS\4S jrS\4S jrSrg)RulePtr   )ruleindexr   r   c                     [        U[        5      (       d   eU[        UR                  5      ::  d   eXl        X l        g N)
isinstancer   len	expansionr   r   )selfr   r   s      W/home/james-whalen/.local/lib/python3.13/site-packages/lark/parsers/grammar_analysis.py__init__RulePtr.__init__   s6    $%%%%DNN++++	
    c                    U R                   R                  S U R                    Vs/ s H  oR                  PM     nnU R                   R                  U R                  S   Vs/ s H  oR                  PM     nnSU R                   R                  R                  < SSR                  U5      < SSR                  U5      < S3$ s  snf s  snf )N<z :  z * >)r   r   r   nameoriginjoin)r   xbeforeafters       r    __repr__RulePtr.__repr__   s    "&))"5"5ktzz"BC"BQ&&"BC!%!4!4TZZ[!AB!AA!AB#'99#3#3#8#8#((6:JCHHUZO\\ DBs   C"C	returnc                 H    U R                   R                  U R                     $ r   )r   r   r   r   s    r    nextRulePtr.next   s    yy""4::..r#   symc                 l    U R                   U:X  d   e[        U R                  U R                  S-   5      $ )N   )r3   r   r   r   )r   r5   s     r    advanceRulePtr.advance    s-    yyCtyy$**Q,//r#   c                 Z    U R                   [        U R                  R                  5      :H  $ r   )r   r   r   r   r2   s    r    is_satisfiedRulePtr.is_satisfied$   s     zzS!4!4555r#   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r   )r   r   NotImplementedr   r   )r   others     r    __eq__RulePtr.__eq__(   s:    %))!!yyEJJ&D4::+DDr#   c                 D    [        U R                  U R                  45      $ r   )hashr   r   r2   s    r    __hash__RulePtr.__hash__-   s    TYY

+,,r#   )r   r   N)__name__
__module____qualname____firstlineno__	__slots__r   __annotations__intr!   r.   propertyr   r3   r8   boolr;   r@   rD   __static_attributes__ r#   r    r   r      s    !I
JJT # ]
 /f / /06 0i 0 6d 6 6Et E
-# -r#   r   c                   h    \ rS rSr% Sr\\S'   \\S'   \\S 4   \S'   \\\	\
   4   \S'   S rS rS	rg
)
LR0ItemSet4   )kernelclosuretransitions
lookaheadsrT   rU   rV   rW   c                 z    [        U5      U l        [        U5      U l        0 U l        [	        [
        5      U l        g r   )r   rT   rU   rV   r   setrW   )r   rT   rU   s      r    r!   LR0ItemSet.__init__<   s,    FmW~%c*r#   c                     SSR                  U R                   Vs/ s H  n[        U5      PM     sn5      < SSR                  U R                   Vs/ s H  n[        U5      PM     sn5      < S3$ s  snf s  snf )N{, z | })r*   rT   reprrU   )r   rs     r    r.   LR0ItemSet.__repr__B   s\    "ii$++(F+Qa+(FGeieqeqSreq`aTXYZT[eqSrIstt(FSrs   A2
A7)rU   rT   rW   rV   N)rF   rG   rH   rI   rJ   StaterK   r   r   r	   r   r!   r.   rO   rP   r#   r    rR   rR   4   s@    BIMNfl*++VSY&''+ur#   rR   c                 B    U(       a  X:  a  g[        U 5      nX-  n X:g  $ )NF)rY   )set1set2copys      r    
update_setrg   F   s$    4;t9DLD<r#   c           	         U  VVs1 s H  oR                     H  o"iM     M     snnU  Vs1 s H  oR                  iM     sn-  n[        5       n0 n0 nU H/  nUR                  (       a  U1O	[        5       XR'   [        5       Xb'   M1     SnU(       a  SnU  H  n[        UR                   5      U::  a  [	        XAR                  15      (       a  Sn[        UR                   5       HG  u  p[        UR                   SU 5      U::  a%  [	        XQR                     XR   5      (       a  SnMD  MF    M     M     U(       a  M  SnU(       a  SnU  H  n[        UR                   5       H  u  pU[        UR                   5      S-
  :X  d  [        UR                   US-   S 5      U::  a!  [	        Xb   XaR                     5      (       a  Sn[        US-   [        UR                   5      5       HJ  n	[        UR                   US-   U	 5      U::  d  M$  [	        Xb   XQR                   U	      5      (       d  MH  SnML     M     M     U(       a  M  XVU4$ s  snnf s  snf )zdCalculate FOLLOW sets.

Adapted from: http://lara.epfl.ch/w/cc09:algorithm_for_first_and_follow_setsTFNr7   )r   r)   rY   is_termrg   	enumerater   range)
rulesr   r5   symbolsNULLABLEFIRSTFOLLOWchangedijs
             r    calculate_setsrt   N   s     %?utssu?[`Ba[`SW;;[`BaaG uHEFKKC5SU
E 
 G
D4>>"h.h66"G#DNN3t~~bq)*h6!%"4ejAA"& B  4  '  G
D#DNN3c$..)!++s4>>!A#$3G/HH/T!&+vkk/BCC"&qsC$78A4>>!A#a01X=%fk59J3KLL&*G 9 4  ' (""o @Bas
   IIc                   J    \ rS rSrSS\S\S\4S jjrSS\S\\	   4S	 jjr
S
rg)GrammarAnalyzer   parser_confdebugstrictc                 H   X l         X0l        UR                   Vs0 s H0  nU[        [	        SU-   5      [	        U5      [        S5      /5      _M2     nnUR                  [        UR                  5       5      -   n[        US 5      U l
        [        U5      [        [        U5      5      :w  aY  [        U5      R                  5        VVs/ s H  u  pxUS:  d  M  UPM     n	nn[        SSR!                  S U	 5       5      -  5      eU HF  n
U
R"                   H3  nUR$                  (       a  M  XR                  ;   a  M'  [        SU-  5      e   MH     UR                  5        VVs0 s H   u  pLX@R'                  UR(                  5      _M"     snnU l        UR                  5        VVs0 s H/  u  pLU[-        [/        U[        UR"                  5      5      15      _M1     snnU l        UR                   Vs0 s H&  nU[        [	        SU-   5      [	        U5      /5      _M(     nnUR                  [        UR                  5       5      -   n[        U5      [        [        U5      5      :X  d   e[        US	 5      U l        UR                  5        VVs0 s HA  u  pLU[5        [/        US
5      /U R'                  UR(                  U R2                  5      5      _MC     snnU l        [9        U5      u  U l        U l        U l        g s  snf s  snnf s  snnf s  snnf s  snf s  snnf )Nz$root_z$ENDc                     U R                   $ r   r)   r`   s    r    <lambda>*GrammarAnalyzer.__init__.<locals>.<lambda>   s    XYX`X`r#   r7   zRules defined twice: %sr]   c              3   8   #    U  H  n[        U5      v   M     g 7fr   )str).0rr   s     r    	<genexpr>+GrammarAnalyzer.__init__.<locals>.<genexpr>   s     D`U_PQSVVU_s   zUsing an undefined rule: %sc                     U R                   $ r   r}   r~   s    r    r   r      s    r#   r   ) ry   rz   startr   r   r   rl   listvaluesr   rules_by_originr   rY   r   itemsr   r*   r   ri   expand_ruler)   start_statesr   r   
end_stateslr0_rules_by_originrR   lr0_start_statesrt   ro   rp   rn   )r   rx   ry   rz   r   
root_rulesrl   itemcount
duplicatesr`   r5   	root_rulelr0_root_rules	lr0_ruless                  r    r!   GrammarAnalyzer.__init__   s   
 $/#4#46#4% T+h.>"?+eBTV^_eVfAghh#4 	 6 !!D):):)<$==>FuN`>au:SZ(29%.2F2F2HV2H;4ETUI$2HJV8499D`U_D`;``aaA{{s.B.B'B&'Ds'JKK #  6@5E5E5GI5G!1 #$4$4Y5E5E$FF5GI 4>3C3C3EG3E/u !%C	@S@S<T)U(V"WW3EG )..0.E  k(U2B&CkRWFXEY!ZZ. 	 0  %%^-B-B-D(EE	9~S^!4454#+I7I#J  )7(<(<(>!@(>$E "'
GIq4I3JDL\L\]f]m]mos  pH  pH  MI  )J  "J(>!@ 2@1F.
DKC6 WIG0!@s*   7L	LL%'L(6L5-LALNsource_ruler0   c                    ^^ Tc  U R                   m[        [           " 5       mS[        S[        [           4UU4S jjn[        U/U5       H  nM     T$ )z4Returns all init_ptrs accessible by rule (recursive)r   r0   c              3   *  >#    U R                   (       a   U 5       eTU     Hm  n[        US5      nTR                  U5        UR                  (       d  M3  UR                  nUR                   (       a  MR  [        U[        5      (       d   eUv   Mo     g 7f)Nr   )ri   r   addr   r3   r   r   )r   r`   init_ptrnew_r	init_ptrsr   s       r    _expand_rule1GrammarAnalyzer.expand_rule.<locals>._expand_rule   sq     ||)T)#$T*"1a=h';;;$MME ===)%====# +s   ABB3 B)r   r   r   r   r   r   )r   r   r   r   _r   s     `  @r    r   GrammarAnalyzer.expand_rule   s`     ""22Ow')		${ 	$x/D 	$ 	$ k]L1A 2 r#   )
ro   rp   rn   ry   r   r   r   r   r   rz   )FFr   )rF   rG   rH   rI   r   rN   r!   r   r   r   r   rO   rP   r#   r    rv   rv      s?    %GJ %Gt %G4 %GN{ ZX_M`  r#   rv   N)__doc__collectionsr   r   typingr   r   r   r   r	   utilsr   r   r   r   
exceptionsr   grammarr   r   r   r   commonr   r   rb   rR   rg   rt   rv   rP   r#   r    <module>r      s[    , , 7 7 4 4 % 9 9 "- "-J 	'u u$;#|? ?r#   