
    Xh                         d Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ  G d	 d
      Zee   Z G d d      Zd Zd Z G d d      Zy)z*Provides for superficial grammar analysis.    )Counterdefaultdict)ListDictIterator	FrozenSetSet   )bfsfzsetclassify
OrderedSet)GrammarError)RuleTerminalNonTerminalSymbol)
ParserConfc                       e Zd ZU dZeed<   eed<   dedefdZd Ze	de
fd       Zde
dd fd	Ze	defd
       ZdefdZdefdZy)RulePtr)ruleindexr   r   c                 x    t        |t              sJ |t        |j                        k  sJ || _        || _        y N)
isinstancer   len	expansionr   r   )selfr   r   s      Q/var/www/html/myenv/lib/python3.12/site-packages/lark/parsers/grammar_analysis.py__init__zRulePtr.__init__   s7    $%%%DNN++++	
    c                    | j                   j                  d | j                   D cg c]  }|j                   }}| j                   j                  | j                  d  D cg c]  }|j                   }}d| j                   j                  j                  ddj                  |      ddj                  |      dS c c}w c c}w )N<z :  z * >)r   r   r   nameoriginjoin)r   xbeforeafters       r   __repr__zRulePtr.__repr__   s    "&))"5"5ktzz"BCQ!&&CC!%!4!4TZZ[!ABABB#'99#3#3#8#8#((6:JCHHUZO\\ DBs   B= Creturnc                 H    | j                   j                  | j                     S r   )r   r   r   r   s    r   nextzRulePtr.next   s    yy""4::..r!   symc                 j    | j                   |k(  sJ t        | j                  | j                  dz         S )N   )r0   r   r   r   )r   r1   s     r   advancezRulePtr.advance    s-    yyCtyy$**Q,//r!   c                 Z    | j                   t        | j                  j                        k(  S r   )r   r   r   r   r/   s    r   is_satisfiedzRulePtr.is_satisfied$   s     zzS!4!4555r!   c                     t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S r   )r   r   NotImplementedr   r   )r   others     r   __eq__zRulePtr.__eq__(   s7    %)!!yyEJJ&D4::+DDr!   c                 D    t        | j                  | j                  f      S r   )hashr   r   r/   s    r   __hash__zRulePtr.__hash__-   s    TYY

+,,r!   N)__name__
__module____qualname__	__slots__r   __annotations__intr    r,   propertyr   r0   r4   boolr6   r:   r=    r!   r   r   r      s    !I
JJT # ]
 /f / /06 0i 0 6d 6 6Et E
-# -r!   r   c                   `    e Zd ZU dZeed<   eed<   eed f   ed<   eeee	   f   ed<   d Z
d Zy)	
LR0ItemSet)kernelclosuretransitions
lookaheadsrI   rJ   rK   rL   c                 z    t        |      | _        t        |      | _        i | _        t	        t
              | _        y r   )r   rI   rJ   rK   r   setrL   )r   rI   rJ   s      r   r    zLR0ItemSet.__init__<   s,    FmW~%c*r!   c                     ddj                  | j                  D cg c]  }t        |       c}      ddj                  | j                  D cg c]  }t        |       c}      dS c c}w c c}w )N{, z | })r(   rI   reprrJ   )r   rs     r   r,   zLR0ItemSet.__repr__B   sR    "ii$++(FQa(FGeieqeqSr`aTXYZT[SrIstt(FSrs   A*
A/N)r>   r?   r@   rA   StaterB   r   r   r	   r   r    r,   rF   r!   r   rH   rH   4   s@    BIMNfl*++VSY&''+ur!   rH   c                 <    |r| |kD  ryt        |       }| |z  } | |k7  S )NF)rN   )set1set2copys      r   
update_setrZ   F   s*    4$;t9DDLD4<r!   c           	      &   | D ch c]  }|j                   D ]  }|  c}}| D ch c]  }|j                   c}z  }t               }i }i }|D ]+  }|j                  r|hn	t               ||<   t               ||<   - d}|rd}| D ]  }t        |j                         |k  rt	        ||j                  h      rd}t        |j                         D ]A  \  }}t        |j                   d|       |k  r t	        ||j                     ||         s>d}A   |rd}|rd}| D ]  }t        |j                         D ]  \  }}|t        |j                         dz
  k(  st        |j                   |dz   d       |k  rt	        ||   ||j                           rd}t        |dz   t        |j                               D ]C  }	t        |j                   |dz   |	       |k  s"t	        ||   ||j                   |	            sBd}E   |r|||fS c c}}w c c}w )zhCalculate FOLLOW sets.

    Adapted from: http://lara.epfl.ch/w/cc09:algorithm_for_first_and_follow_setsTFNr3   )r   r'   rN   is_termrZ   	enumerater   range)
rulesr   r1   symbolsNULLABLEFIRSTFOLLOWchangedijs
             r   calculate_setsrg   N   s     %?t?s?s?[`BaSW4;;BaaG uHEF KKC5SUc
Es
 G
 
	D4>>"h.h6"G#DNN3 3t~~bq)*h6!%"4eCjA"&
	   G
 		+D#DNN3 +3c$..)!++s4>>!A#$3G/HH/T!&+vdkk/BC"&qsC$78 +A4>>!A#a01X=%fSk59J3KL&*G++		+  &(""o @Bas
   HHc                   :    e Zd Zd	dededefdZd
dedee   fdZ	y)GrammarAnalyzerparser_confdebugstrictc                    || _         || _        |j                  D ci c]/  }|t        t	        d|z         t	        |      t        d      g      1 }}|j                  t        |j                               z   }t        |d       | _
        t        |      t        t        |            k7  rUt        |      j                         D cg c]  \  }}|dkD  s| }	}}t        ddj!                  d |	D              z        |D ]<  }
|
j"                  D ]+  }|j$                  r|| j                  v rt        d|z         > |j                         D ci c]!  \  }}|| j'                  |j(                        # c}}| _        |j                         D ci c]/  \  }}|t-        t/        |t        |j"                              h      1 c}}| _        |j                  D ci c]%  }|t        t	        d|z         t	        |      g      ' }}|j                  t        |j                               z   }t        |      t        t        |            k(  sJ t        |d	       | _        |j                         D ci c]A  \  }}|t5        t/        |d
      g| j'                  |j(                  | j2                              C c}}| _        t9        |      \  | _        | _        | _        y c c}w c c}}w c c}}w c c}}w c c}w c c}}w )Nz$root_z$ENDc                     | j                   S r   r'   rT   s    r   <lambda>z*GrammarAnalyzer.__init__.<locals>.<lambda>   s    XYX`X` r!   r3   zRules defined twice: %srQ   c              3   2   K   | ]  }t        |        y wr   )str).0re   s     r   	<genexpr>z+GrammarAnalyzer.__init__.<locals>.<genexpr>   s     D`PQSVD`s   zUsing an undefined rule: %sc                     | j                   S r   ro   rp   s    r   rq   z*GrammarAnalyzer.__init__.<locals>.<lambda>   s
     r!   r   ) rk   rl   startr   r   r   r_   listvaluesr   rules_by_originr   rN   r   itemsr   r(   r   r\   expand_ruler'   start_statesr   r   
end_stateslr0_rules_by_originrH   lr0_start_statesrg   rb   rc   ra   )r   rj   rk   rl   rw   
root_rulesr_   itemcount
duplicatesrT   r1   	root_rulelr0_root_rules	lr0_ruless                  r   r    zGrammarAnalyzer.__init__   s   
 $/#4#46 T+h.>"?+eBTV^_eVfAghh 6
 6 !!D):):)<$==>FuN`>au:SZ(29%.2F2F2HV;4ETUI$VJV8499D`U_D`;``aa 	LA{{ Lsd.B.B'B&'Ds'JKKL	L 6@5E5E5GI!1	 #D$4$4Y5E5E$FF I 4>3C3C3EG/ui !%C	@S@S<T)U(V"WW G )..0  k(U2B&CkRWFXEY!ZZ 0 0  %%^-B-B-D(EE	9~S^!4454#+I7I#J  )7(<(<(>!@$E9 "'
GIq4I3JDL\L\]f]m]mos  pH  pH  MI  )J  "J !@ 2@1F.
DKC6 WIG0!@s*   4K(K-K-&K34K9!*K?:ALNsource_ruler-   c                     | j                   t        t                  dt        dt        t           ffd}t        |g|      D ]  } S )z4Returns all init_ptrs accessible by rule (recursive)r   r-   c              3      K   | j                   rJ |        |    D ][  }t        |d      }j                  |       |j                  s-|j                  }|j                   rFt        |t              sJ | ] y w)Nr   )r\   r   addr   r0   r   r   )r   rT   init_ptrnew_r	init_ptrsrz   s       r   _expand_rulez1GrammarAnalyzer.expand_rule.<locals>._expand_rule   sp     ||)T)#$T* $"1a=h';;$MME ==)%===#$s   AA;	A;"A;)rz   r   r   r   r   r   )r   r   rz   r   _r   s     `  @r   r|   zGrammarAnalyzer.expand_rule   s`     ""22Ow')		${ 	$x/D 	$ k]L1 	A	 r!   )FFr   )
r>   r?   r@   r   rE   r    r   r   r   r|   rF   r!   r   ri   ri      s:    %GJ %Gt %G4 %GN{ ZX_M` r!   ri   N)__doc__collectionsr   r   typingr   r   r   r   r	   utilsr   r   r   r   
exceptionsr   grammarr   r   r   r   commonr   r   rU   rH   rZ   rg   ri   rF   r!   r   <module>r      s[    , , 7 7 4 4 % 9 9 "- "-J 	'u u$;#|? ?r!   