
    
`i                         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dS )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dS )RulePtr)ruleindexr   r   c                     t          |t                    sJ |t          |j                  k    sJ || _        || _        d S N)
isinstancer   len	expansionr   r   )selfr   r   s      q/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lark/parsers/grammar_analysis.py__init__zRulePtr.__init__   sE    $%%%%%DN++++++	


    c                    d | j         j        d | j                 D             }d | j         j        | j        d          D             }d| j         j        j        dd                    |          dd                    |          dS )Nc                     g | ]	}|j         
S  name.0xs     r   
<listcomp>z$RulePtr.__repr__.<locals>.<listcomp>   s    CCCQ!&CCCr!   c                     g | ]	}|j         
S r$   r%   r'   s     r   r*   z$RulePtr.__repr__.<locals>.<listcomp>   s    BBBABBBr!   <z :  z * >)r   r   r   originr&   join)r   beforeafters      r   __repr__zRulePtr.__repr__   s    CC$)"5ktzk"BCCCBB!4TZ[[!ABBB#'9#3#8#8#8#((6:J:J:J:JCHHUZOOOO\\r!   returnc                 0    | j         j        | j                 S r   )r   r   r   r   s    r   nextzRulePtr.next   s    y"4:..r!   symc                 V    | j         |k    sJ t          | j        | j        dz             S )N   )r7   r   r   r   )r   r8   s     r   advancezRulePtr.advance    s-    yCty$*Q,///r!   c                 F    | j         t          | j        j                  k    S r   )r   r   r   r   r6   s    r   is_satisfiedzRulePtr.is_satisfied$   s    zS!45555r!   c                 z    t          |t                    st          S | j        |j        k    o| j        |j        k    S r   )r   r   NotImplementedr   r   )r   others     r   __eq__zRulePtr.__eq__(   s7    %)) 	"!!yEJ&D4:+DDr!   c                 8    t          | j        | j        f          S r   )hashr   r   r6   s    r   __hash__zRulePtr.__hash__-   s    TY
+,,,r!   N)__name__
__module____qualname__	__slots__r   __annotations__intr    r3   propertyr   r7   r;   boolr=   rA   rD   r$   r!   r   r   r      s        !I
JJJJJJT #    ] ] ]
 /f / / / X/06 0i 0 0 0 0 6d 6 6 6 X6Et E E E E
-# - - - - - -r!   r   c                   t    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dS )	
LR0ItemSet)kernelclosuretransitions
lookaheadsrO   rP   rQ   rR   c                     t          |          | _        t          |          | _        i | _        t	          t
                    | _        d S r   )r   rO   rP   rQ   r   setrR   )r   rO   rP   s      r   r    zLR0ItemSet.__init__<   s7    FmmW~~%c**r!   c                     dd                     d | j        D                       dd                     d | j        D                       dS )N{, c                 ,    g | ]}t          |          S r$   reprr(   rs     r   r*   z'LR0ItemSet.__repr__.<locals>.<listcomp>C   s    (F(F(FQa(F(F(Fr!   z | c                 ,    g | ]}t          |          S r$   rY   r[   s     r   r*   z'LR0ItemSet.__repr__.<locals>.<listcomp>C   s#    SrSrSr`aTXYZT[T[SrSrSrr!   })r0   rO   rP   r6   s    r   r3   zLR0ItemSet.__repr__B   sW     "ii(F(F$+(F(F(FGGGGSrSreieqSrSrSrIsIsIsIsttr!   N)rE   rF   rG   rH   StaterI   r   r   r	   r   r    r3   r$   r!   r   rN   rN   4   s         BIMMMNNNfl*++++VSY&''''+ + +u u u u ur!   rN   c                 J    |r| |k    rdS t          |           }| |z  } | |k    S )NF)rT   )set1set2copys      r   
update_setrd   F   s5     4$;;ut99DDLD4<r!   c           	         d | D             d | D             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 ]I\  }}t          |j        d|                   |k    r$t          ||j                 ||                   rd}I |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 ]N}	t          |j        |dz   |	                   |k    r)t          ||         ||j        |	                            rd}Oی||||fS )zhCalculate FOLLOW sets.

    Adapted from: http://lara.epfl.ch/w/cc09:algorithm_for_first_and_follow_setsc                 &    h | ]}|j         D ]}|S r$   )r   )r(   r   r8   s      r   	<setcomp>z!calculate_sets.<locals>.<setcomp>R   s'    ???t??s????r!   c                     h | ]	}|j         
S r$   r/   )r(   r   s     r   rg   z!calculate_sets.<locals>.<setcomp>R   s    BaBaBaSW4;BaBaBar!   TFNr:   )rT   is_termr   rd   r/   	enumerater   range)
rulessymbolsNULLABLEFIRSTFOLLOWr8   changedr   ijs
             r   calculate_setsru   N   sj    @?u???BaBa[`BaBaBaaG uuHEF  K2C55SUUc
EEs G
  
	 
	D4>""h..h66 #"G#DN33  3t~bqb)**h66!%"4eCjAA '"&    G
 + 		+ 		+D#DN33 + +3c$.))!+++s4>!A#$$3G/H/HH/T/T!&+vdk/BCC '"&qsC$7$788 + +A4>!A#a%011X==%fSk59J3KLL +&*G++	  + &(""r!   c                   B    e Zd Zd
dededefdZddedee         fd	Z	dS )GrammarAnalyzerFparser_confdebugstrictc                 P    | _         | _        d |j        D             }|j        t	          |                                          z   }t          |d            _        t          |          t          t          |                    k    rZd t          |                                          D             }t          dd                    d |D                       z            |D ].}|j        D ]$}|j        s| j        v st          d|z            %/ fd|                                D              _        d	 |                                D              _        d
 |j        D             }	|j        t	          |	                                          z   }
t          |
          t          t          |
                    k    sJ t          |
d            _         fd|	                                D              _        t)          |          \   _         _         _        d S )Nc           
          i | ]?}|t          t          d |z             t          |          t          d          g          @S )$root_z$END)r   r   r   r(   starts     r   
<dictcomp>z,GrammarAnalyzer.__init__.<locals>.<dictcomp>   sX     6 6 6 T+h.>"?"?+eBTBTV^_eVfVfAghh 6 6 6r!   c                     | j         S r   ri   r\   s    r   <lambda>z*GrammarAnalyzer.__init__.<locals>.<lambda>   s
    XYX` r!   c                 $    g | ]\  }}|d k    |S )r:   r$   )r(   itemcounts      r   r*   z,GrammarAnalyzer.__init__.<locals>.<listcomp>   s"    VVV;4ETUII$IIIr!   zRules defined twice: %srW   c              3   4   K   | ]}t          |          V  d S r   )str)r(   rs   s     r   	<genexpr>z+GrammarAnalyzer.__init__.<locals>.<genexpr>   s)      D`D`PQSVVD`D`D`D`D`D`r!   zUsing an undefined rule: %sc                 L    i | ] \  }}|                     |j                  !S r$   )expand_ruler/   r(   r   	root_ruler   s      r   r   z,GrammarAnalyzer.__init__.<locals>.<dictcomp>   sF     I I I!1	 #D$4$4Y5E$F$F I I Ir!   c                 v    i | ]6\  }}|t          t          |t          |j                            h          7S r$   )r   r   r   r   )r(   r   r   s      r   r   z,GrammarAnalyzer.__init__.<locals>.<dictcomp>   sT     G G G/ui !%C	@S<T<T)U)U(V"W"W G G Gr!   c           	      l    i | ]1}|t          t          d |z             t          |          g          2S )r}   )r   r   r~   s     r   r   z,GrammarAnalyzer.__init__.<locals>.<dictcomp>   sM     0 0 0  k(U2B&C&CkRWFXFXEY!Z!Z 0 0 0r!   c                     | j         S r   ri   r   s    r   r   z*GrammarAnalyzer.__init__.<locals>.<lambda>   s     r!   c           
          i | ]C\  }}|t          t          |d           g                    |j        j                            DS )r   )rN   r   r   r/   lr0_rules_by_originr   s      r   r   z,GrammarAnalyzer.__init__.<locals>.<dictcomp>   sv     !@ !@ !@$E9 "'
GIq4I4I3JDL\L\]f]mos  pH  MI  MI  )J  )J !@ !@ !@r!   )ry   rz   r   rm   listvaluesr   rules_by_originr   rT   r   itemsr   r0   r   rj   start_states
end_statesr   lr0_start_statesru   rp   rq   ro   )r   rx   ry   rz   
root_rulesrm   
duplicatesr\   r8   lr0_root_rules	lr0_ruless   `          r   r    zGrammarAnalyzer.__init__   s   
6 6#.#46 6 6
 !D):):)<)<$=$==>FuN`N`>a>au::SZZ((VV'%..2F2F2H2HVVVJ8499D`D`U_D`D`D`;`;``aaa 	L 	LA{ L L Lsd.B'B'B&'Ds'JKKKLI I I I5?5E5E5G5GI I IG G3=3C3C3E3EG G G0 0(.0 0 0  %^-B-B-D-D(E(EE	9~~S^^!4!44444#+I7I7I#J#J !@ !@ !@ !@(6(<(<(>(>!@ !@ !@ 2@1F1F.
DKr!   Nsource_ruler4   c                     | j         t          t                               dt          dt          t                   ffd}t          |g|          D ]}S )z4Returns all init_ptrs accessible by rule (recursive)Nr   r4   c              3      K   | j         r
J |             |          D ]W}t          |d          }                    |           |j        r)|j        }|j         st          |t                    sJ |V  Xd S )Nr   )rj   r   addr   r7   r   r   )r   r\   init_ptrnew_r	init_ptrsr   s       r   _expand_rulez1GrammarAnalyzer.expand_rule.<locals>._expand_rule   s      |))T))#$T* $ $"1a==h'''; $$ME = $)%=====#$ $r!   )r   r   r   r   r   r   )r   r   r   r   _r   s     `  @r   r   zGrammarAnalyzer.expand_rule   s     ""2Ow'))		${ 	$x/D 	$ 	$ 	$ 	$ 	$ 	$ 	$ k]L11 	 	Ar!   )FFr   )
rE   rF   rG   r   rL   r    r   r   r   r   r$   r!   r   rw   rw      sx        %G %GJ %Gt %G4 %G %G %G %GN { ZX_M`      r!   rw   N)__doc__collectionsr   r   typingr   r   r   r   r	   utilsr   r   r   r   
exceptionsr   grammarr   r   r   r   commonr   r   r_   rN   rd   ru   rw   r$   r!   r   <module>r      so   , , , , , , , , , , 7 7 7 7 7 7 7 7 7 7 7 7 7 7 4 4 4 4 4 4 4 4 4 4 4 4 % % % % % % 9 9 9 9 9 9 9 9 9 9 9 9      "- "- "- "- "- "- "- "-J 	'u u u u u u u u$  ;# ;# ;#|? ? ? ? ? ? ? ? ? ?r!   