
    
`i/                        d Z ddlmZmZmZmZmZmZmZ ddl	m
Z
 ddlmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZ dd
lmZ  G d d          Z ed          Z  ed          Z! ed          Z" G d dee"                   Z# G d de#d                   Z$ G d de#e%                   Z&d Z'd Z( G d de          Z)dS )zThis module builds a LALR(1) transition-table for lalr_parser.py

For now, shift/reduce conflicts are automatically resolved as shifts.
    )DictSetIteratorTupleListTypeVarGeneric)defaultdict   )classifyclassify_boolbfsfzset
Enumeratorlogger)GrammarError   )GrammarAnalyzerTerminal
LR0ItemSetRulePtrState)RuleSymbol)
ParserConfc                        e Zd Zd Zd Zd ZdS )Actionc                     || _         d S Nname)selfr!   s     n/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lark/parsers/lalr_analysis.py__init__zAction.__init__   s    			    c                     | j         S r   r    r"   s    r#   __str__zAction.__str__   s
    yr%   c                      t          |           S r   strr'   s    r#   __repr__zAction.__repr__   s    4yyr%   N)__name__
__module____qualname__r$   r(   r,    r%   r#   r   r      sA                r%   r   ShiftReduceStateTc                       e Zd ZU eeeeef         f         ed<   eeef         ed<   eeef         ed<   d Zd Z	e
d             ZdS )ParseTableBasestatesstart_states
end_statesc                 0    || _         || _        || _        d S r   )r6   r7   r8   )r"   r6   r7   r8   s       r#   r$   zParseTableBase.__init__'   s    ($r%   c                     t                      fd| j                                        D             }                                || j        | j        dS )Nc                 Z    i | ]'\  }}|fd |                                 D             (S )c                     i | ]@\  }\  }}                     |          |t          u rd |                              fnd|fAS )r   r   )getr2   	serialize.0tokenactionargmemotokenss       r#   
<dictcomp>z7ParseTableBase.serialize.<locals>.<dictcomp>.<dictcomp>0   sl     A A A,} JJu%%FfDTDTCMM$,?,?(@(@[\^aZb A A Ar%   itemsr@   stateactionsrD   rE   s      r#   rF   z,ParseTableBase.serialize.<locals>.<dictcomp>/   j     
 
 
 w  A A A A A07A A A
 
 
r%   )rE   r6   r7   r8   )r   r6   rH   reversedr7   r8   )r"   rD   r6   rE   s    ` @r#   r>   zParseTableBase.serialize,   sv    
 
 
 
 
 #'+"3"3"5"5
 
 
 oo'' -/	
 
 	
r%   c                     |d         fd|d                                          D             } | ||d         |d                   S )NrE   c                 Z    i | ]'\  }}|fd |                                 D             (S )c                     i | ]:\  }\  }}|         |d k    rt           t          j        |          fnt          |f;S )r   )r2   r   deserializer1   r?   s       r#   rF   z9ParseTableBase.deserialize.<locals>.<dictcomp>.<dictcomp>@   sd     A A A,} 5MVUVYYVT-=c4-H-H$I$I]bdg\h A A Ar%   rG   rI   s      r#   rF   z.ParseTableBase.deserialize.<locals>.<dictcomp>?   rL   r%   r6   r7   r8   rG   )clsdatarD   r6   rE   s     ` @r#   rQ   zParseTableBase.deserialize<   sl    h
 
 
 
 
 #'x."6"6"8"8
 
 

 s64/l1CDDDr%   N)r-   r.   r/   r   r3   r+   r   __annotations__r$   r>   classmethodrQ   r0   r%   r#   r5   r5   "   s         c5j))****sF{####S&[!!!!% % %

 
 
  E E [E E Er%   r5   c                       e Zd ZdZdS )
ParseTablezoParse-table whose key is State, i.e. set[RulePtr]

    Slower than IntParseTable, but useful for debugging
    N)r-   r.   r/   __doc__r0   r%   r#   rW   rW   F   s          	Dr%   rW   r   c                   .    e Zd ZdZedefd            ZdS )IntParseTablez3Parse-table whose key is int. Best for performance.parse_tablec                    t          |j                  }d t          |          D             i }|j                                        D ]0\  }}fd|                                D             }|||         <   1fd|j                                        D             }fd|j                                        D             } | |||          S )Nc                     i | ]\  }}||	S r0   r0   )r@   iss      r#   rF   z1IntParseTable.from_ParseTable.<locals>.<dictcomp>T   s    +K+K+KCAaAa+K+K+Kr%   c                 f    i | ]-\  }}||d          t           u r|d          |d                  fn|.S )r   r   )r1   )r@   kvstate_to_idxs      r#   rF   z1IntParseTable.from_ParseTable.<locals>.<dictcomp>X   sR     ) ) )a !A$%--QqT<!-..Q ) ) )r%   c                 (    i | ]\  }}||         S r0   r0   r@   startr_   rc   s      r#   rF   z1IntParseTable.from_ParseTable.<locals>.<dictcomp>]   s#    ___(%l1o___r%   c                 (    i | ]\  }}||         S r0   r0   re   s      r#   rF   z1IntParseTable.from_ParseTable.<locals>.<dictcomp>^   s#    [[[qeLO[[[r%   )listr6   	enumeraterH   r7   r8   )	rR   r[   enum
int_statesr_   lar7   r8   rc   s	           @r#   from_ParseTablezIntParseTable.from_ParseTableQ   s    K&''+K+K9T??+K+K+K
 '--// 	/ 	/EAr) ) ) )XXZZ) ) )B,.JQ)) `___k>V>\>\>^>^___[[[[K<R<X<X<Z<Z[[[
s:|Z888r%   N)r-   r.   r/   rX   rU   rW   rm   r0   r%   r#   rZ   rZ   N   s?        ==9* 9 9 9 [9 9 9r%   rZ   c           
          i }g }t                               | d          }| D ]#}||         dk    rt          |||| |||           $|S Nr   )dictfromkeystraverse)XRGFSNxs          r#   digraphrz   j   s[    
A
AaA * *Q4199Q1aAq)))Hr%   c           
         |                     |            t          |          }||| <   ||          || <   ||          D ]u}||         dk    rt          |||||||           ||          }	|	dk    sJ ||         }
|
dk    sJ |
dk    r|
|	k     r|
|| <   ||                              ||                    v||          |k    r0||          }	 |                                }d||<   |||<   || k    rd S 'd S )Nr   T)appendlenrr   updatepop)ry   rw   rx   rs   rt   ru   rv   dyn_xn_yf_xzs                r#   rr   rr   {   s#   HHQKKKAAAaDQ4AaDqT 	 	Q4199Q1aAq)))dQwwwwdaxxxx!GG#))AaD	!AaDtqyyd	AAaDAaDAvv	 yr%   c                      e Zd ZU ee         ed<   eeeef                  ed<   e	eeef         eeee
f                  f         ed<   e	eeef         eeeef                  f         ed<   e	eeef         eeeef                  f         ed<   e	eeef         ee         f         ed<   dded	ed
efdZddZd Zd Zd ZddZd ZdS )LALR_Analyzerlr0_itemsetsnonterminal_transitionslookbackincludesreadsdirectly_readsFparser_confdebugstrictc                 
   t          j        | |||           g | _        t          t                    | _        t          t                    | _        t          t                    | _        t          t                    | _        d S r   )	r   r$   r   r
   setr   r   r   r   )r"   r   r   r   s       r#   r$   zLALR_Analyzer.__init__   sb     {E6BBB')$)#.. %%
#C((#C((r%   returnNc                      t                       _        i dt          dt          t                   f fd}t	           j                                        |          D ]}d S )NrJ   r   c              3   
  	K   t          | j        d           \  }}t          |d           }|                                D ]\  	}t	          	fd|D                       }
                    |d           }|_t          |          }|D ]8}|j        s/|j        j	        s#|
                    |j        j                  z  }9t          ||          }|
|<   || j        	<   |V  j                            |            d S )Nc                     | j         S r   )is_satisfiedrps    r#   <lambda>z@LALR_Analyzer.compute_lr0_states.<locals>.step.<locals>.<lambda>   s    r r%   c                     | j         S r   )nextr   s    r#   r   z@LALR_Analyzer.compute_lr0_states.<locals>.step.<locals>.<lambda>   s    27 r%   c                 :    h | ]}|                               S r0   )advance)r@   r   syms     r#   	<setcomp>zALALR_Analyzer.compute_lr0_states.<locals>.step.<locals>.<setcomp>   s#    >>>B

3>>>r%   )r   closurer   rH   r   r=   r   r   r   is_termexpand_rulelr0_rules_by_originr   transitionsr   add)rJ   _unsatr   rpskernel	new_stater   r   r   cacher"   s            @r#   stepz.LALR_Analyzer.compute_lr0_states.<locals>.step   s*     $U]4N4NOOHAu 2 233AGGII    S>>>>#>>>??!IIfd33	$!&kkG$ [ [! [rw [#t'7'7AY'Z'ZZG *67 ; ;I$-E&M)2!#&!!%(((((r%   )r   r   r   r   r   lr0_start_statesvalues)r"   r   r   r   s   `  @r#   compute_lr0_statesz LALR_Analyzer.compute_lr0_states   s    EE+-	)
 	)x
'; 	) 	) 	) 	) 	) 	) 	)( T*1133T:: 	 	A	 	r%   c                    | j                                         D ]_}t          |j                  dk    sJ |j        D ];}|j        dk    sJ t          t          d          g          | j        ||j        f<   <`| j	        D ]}t                      }|j
        D ]}|j        r
|j        }|| j        vr||v r |                    |           ||f}| j                            |           | j        |         }| j        |         }|j        |         }	|	j
        D ]O}
|
j        r
|
j        }|| j        vr|                    |           || j        v r|                    |	|f           PҌd S )Nr   r   z$END)r   r   r~   r   indexr   r   r   r   r   r   r   r   r   r   r}   r   r   NULLABLE)r"   rootr   rJ   seenr_   ntdrr
next_staterp2s2s               r#   compute_reads_relationsz%LALR_Analyzer.compute_reads_relations   s   )0022 	Q 	QDt{##q((((k Q Qx1}}}}7:Xf=M=M;O7P7P#T27O44Q & 	0 	0E55Dm 0 0? GD44499QZ,33B777(,JrN".q1
%- 0 0C' ! B!999r


T]**z2.///00	0 	0r%   c           	         | j         D ]\}|\  }}g }| j        |         }|j        D ]}|j        j        |k    r|}t          |j        t          |j        j                            D ]}|j        j        |         }	||	f}
|j	        |	         }|
| j
        vr/t          |dz   t          |j        j                            D ]}|j        j        |         | j        vr n|                    |
           |j        dk    r=|j        D ]5}|j        |j        k    r#|j        r|                    ||j        f           6|D ]"}
| j        |
                             |           #^d S )Nr   r   )r   r   r   ruleoriginranger   r~   	expansionr   r   r   r}   r   r   r   )r"   r   rJ   nonterminalr   r   r   state2r^   r_   nt2jr   s                r#   compute_includes_lookbackz'LALR_Analyzer.compute_includes_lookback   s   . 	+ 	+B!#E;H}R(Hm = =7>[00rxRW->)?)?@@ 
- 
-A)!,A!1+C#/2F$*,, "1q5#bg.?*@*@AA - -7,Q/t}DD!E E !,,,8q==%~ = =H//S5E/$LL&#();<<< + +c"&&r****+3	+ 	+r%   c                     t          | j        | j        | j                  }t          | j        | j        |          }| j                                        D ]8\  }}|D ]0\  }}||         D ]"}|j        |                             |           #19d S r   )	rz   r   r   r   r   r   rH   
lookaheadsr   )r"   	read_setsfollow_setsr   	lookbacksrJ   r   r_   s           r#   compute_lookaheadsz LALR_Analyzer.compute_lookaheads  s    D8$*dFYZZ	d:DM9UU!]0022 	2 	2MB	( 2 2t$R 2 2A$Q'++D111122	2 	2r%   c                    i }g }| j         D ]|}d |j                                        D             }|j                                        D ]\  }}t	          |          dk    rfd |D             }|                    d d           |d d         \  }}	|d         |	d         k    r
|d         h}n|                    |||f           |\  }
||v r| j        rt          d	|j	         d
          | j
        r0t          j        d|j	                   t          j        d|
           t          j
        d|j	                   t          j
        d|
           t          |
f||<   d |                                D             ||<   ~|rg }|D ]q\  }}}d|dd                    d |D                       }| j
        r*|dd                    d |j        D                       z  z  }|                    |           rt          d                    |                    d |                                D             }i }|D ];}|D ]6}| j        D ],}|j        j        j	        d|z   k    r|j        r||vsJ |||<   -7<d | j                                        D             }t)          |||          }| j
        r	|| _        d S t,                              |          | _        d S )Nc                 2    i | ]\  }}|t           |j        fS r0   )r1   r   )r@   rl   r   s      r#   rF   z6LALR_Analyzer.compute_lalr1_states.<locals>.<dictcomp>  s<     ,i ,i ,i:H"j -/
8J0K ,i ,i ,ir%   r   c                 .    g | ]}|j         j        pd |fS )r   )optionspriorityr@   r   s     r#   
<listcomp>z6LALR_Analyzer.compute_lalr1_states.<locals>.<listcomp>  s'    EEE!!),115EEEr%   c                     | d         S ro   r0   )r   s    r#   r   z4LALR_Analyzer.compute_lalr1_states.<locals>.<lambda>  s
    1 r%   T)keyreverser   r   z#Shift/Reduce conflict for terminal z. [strict-mode]
 z;Shift/Reduce conflict for terminal %s: (resolving as shift)z * %sc                 $    i | ]\  }}|j         |S r0   r    r@   ra   rb   s      r#   rF   z6LALR_Analyzer.compute_lalr1_states.<locals>.<dictcomp>)  s     BBBA161BBBr%   zReduce/Reduce collision in z between the following rules:  c                 2    g | ]}d t          |          z   S )z
	- r*   r   s     r#   r   z6LALR_Analyzer.compute_lalr1_states.<locals>.<listcomp>.  sA      fJ  fJ  fJ}~goruvwrxrxgx  fJ  fJ  fJr%   z+
    collision occurred in state: {%s
    }c                 2    g | ]}d t          |          z   S )z
	r*   )r@   ry   s     r#   r   z6LALR_Analyzer.compute_lalr1_states.<locals>.<listcomp>0  s)    UUUjkV\_bcd_e_eVeUUUr%   z

c                 $    i | ]\  }}|j         |S r0   r   r   s      r#   rF   z6LALR_Analyzer.compute_lalr1_states.<locals>.<dictcomp>4  s     777DAq19a777r%   z$root_c                 $    i | ]\  }}||j         S r0   r   )r@   rf   rJ   s      r#   rF   z6LALR_Analyzer.compute_lalr1_states.<locals>.<dictcomp>?  s     aaa,%aaar%   )r   r   rH   r   r~   sortr}   r   r   r!   r   r   warningr2   joinr   r   r   r   r   rW   r[   rZ   rm   )r"   mreduce_reduceitemsetrK   rl   rulespbestsecond_bestr   msgsmsgr6   r8   rJ   r   rf   r7   _parse_tables                       r#   compute_lalr1_statesz"LALR_Analyzer.compute_lalr1_states  s   02( 	C 	CG,i ,iLSL_LeLeLgLg,i ,i ,iG$/5577 1 1	Eu::>>EEuEEEAFF~~tF<<<()"1"%D+AwQ//!%a	%,,gr5-ABBB =={ 4*+lQSQX+l+l+lmmm 4'dfhfmnnnw5555%bdfdklllWd3333#)4.GBKKBBBBBAgJJ 	2D&3 ! !"UUY[Y[Y[]_]d]d  fJ  fJ  CH  fJ  fJ  fJ  ^K  ^K  ^K  L: AJRWWUUovo~UUU  NA  NA  A  ACC    v{{40011177AGGII777 *,
 	2 	2E 2 2!2 2 2Ew~*x%/?@@R_@$J6666,1
5)22 ba$BWB]B]B_B_aaa!&,
CC: 	K+D,<<\JJDr%   c                     |                                   |                                  |                                  |                                  |                                  d S r   )r   r   r   r   r   r'   s    r#   compute_lalrzLALR_Analyzer.compute_lalrG  sb    !!!$$&&&&&(((!!!!!#####r%   )FF)r   N)r-   r.   r/   r   r   rT   r   r   r   r   r   r   boolr$   r   r   r   r   r   r   r0   r%   r#   r   r      s        j/!!!!%
F(:";<<<<5V+,c%
D8H2I.JJKKKK5V+,c%
F8J2K.LLMMMMj&()3uZ5G/H+IIJJJJz612CK?@@@@) )J )t )4 ) ) ) )   8!0 !0 !0F+ + +:2 2 2:K :K :K :Kx$ $ $ $ $r%   r   N)*rX   typingr   r   r   r   r   r   r	   collectionsr
   utilsr   r   r   r   r   r   
exceptionsr   grammar_analysisr   r   r   r   r   grammarr   r   commonr   r   r1   r2   r3   r5   rW   intrZ   rz   rr   r   r0   r%   r#   <module>r      s6    F E E E E E E E E E E E E E E E E E # # # # # # K K K K K K K K K K K K K K K K % % % % % % S S S S S S S S S S S S S S " " " " " " " "              	w						"E "E "E "E "EWV_ "E "E "EH	 	 	 	 	( 	 	 	9 9 9 9 9N3' 9 9 98  "  2x$ x$ x$ x$ x$O x$ x$ x$ x$ x$r%   