
    Xh/                     V   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)y)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y)Actionc                     || _         y Nname)selfr!   s     N/var/www/html/myenv/lib/python3.12/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    yyr%   c                     t        |       S r   )strr'   s    r#   __repr__zAction.__repr__   s    4yr%   N)__name__
__module____qualname__r$   r(   r+    r%   r#   r   r      s    r%   r   ShiftReduceStateTc                   p    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y)ParseTableBasestatesstart_states
end_statesc                 .    || _         || _        || _        y r   )r5   r6   r7   )r"   r5   r6   r7   s       r#   r$   zParseTableBase.__init__'   s    ($r%   c                    t               }| j                  j                         D ci c][  \  }}||j                         D ci c]7  \  }\  }}|j                  |      |t        u rd|j                  |      fnd|f9 c}}}] }}}}}}|j                         || j                  | j                  dS c c}}}w c c}}}}}w )Nr   r   )tokensr5   r6   r7   )	r   r5   itemsgetr1   	serializereversedr6   r7   )	r"   memor:   stateactionstokenactionargr5   s	            r#   r=   zParseTableBase.serialize,   s    
 #'++"3"3"5
 
 w 07A A,} JJu%FfDTCMM$,?(@[\^aZbb A A
 
 oo' --//	
 	
A
s   C<B:C:Cc                 F   |d   }|d   j                         D ci c]Y  \  }}||j                         D ci c]5  \  }\  }}||   |dk(  rt        t        j                  ||      fnt        |f7 c}}}[ }	}}}}} | |	|d   |d         S c c}}}w c c}}}}}w )Nr:   r5   r   r6   r7   )r;   r1   r   deserializer0   )
clsdatar?   r:   r@   rA   rB   rC   rD   r5   s
             r#   rF   zParseTableBase.deserialize<   s    h #'x."6"6"8
 
 w 07A A,} 5MVUVYVT-=-=c4-H$I]bdg\hh A A
 

 64/l1CDD	A
s   B:B6BBN)r,   r-   r.   r   r2   r*   r   __annotations__r$   r=   classmethodrF   r/   r%   r#   r4   r4   "   sY    c5j))**sF{##S&[!!%

  E Er%   r4   c                       e Zd ZdZy)
ParseTablezoParse-table whose key is State, i.e. set[RulePtr]

    Slower than IntParseTable, but useful for debugging
    N)r,   r-   r.   __doc__r/   r%   r#   rL   rL   F   s     	r%   rL   r   c                   &    e Zd ZdZedefd       Zy)IntParseTablez3Parse-table whose key is int. Best for performance.parse_tablec           
      :   t        |j                        }t        |      D ci c]  \  }}||
 }}}i }|j                  j                         D ]H  \  }}|j                         D 	ci c]   \  }}	||	d   t        u r|	d   ||	d      fn|	" }}}	||||   <   J |j
                  j                         D 
ci c]  \  }
}|
||    }}
}|j                  j                         D 
ci c]  \  }
}|
||    }}
} | |||      S c c}}w c c}	}w c c}}
w c c}}
w )Nr   r   )listr5   	enumerater;   r0   r6   r7   )rG   rP   enumisstate_to_idx
int_stateslakvstartr6   r7   s                r#   from_ParseTablezIntParseTable.from_ParseTableQ   s4   K&&';DT?+KCAaAaC+K+K
 ''--/ 	/EArXXZ)a !A$%-QqT<!-.QF )B ),.JQ)	/ ?J>V>V>\>\>^_(%l1o-__<G<R<R<X<X<Z[qeLO+[
[:|Z88 ,L)
 `[s   D)%D8D(DN)r,   r-   r.   rM   rJ   rL   r]   r/   r%   r#   rO   rO   N   s    =9* 9 9r%   rO   c           
      |    i }g }t         j                  | d      }| D ]  }||   dk(  st        |||| |||        |S Nr   )dictfromkeystraverse)XRGFSNxs          r#   digraphrj   j   sQ    
A
AaA *Q419Q1aAq)* Hr%   c           
      v   |j                  |        t        |      }||| <   ||    || <   ||    D ]Y  }||   dk(  rt        |||||||       ||    }	|	dkD  sJ ||   }
|
dk7  sJ |
dkD  r
|
|	k  r|
|| <   ||    j                  ||          [ ||    |k(  r'||    }	 |j	                         }d||<   |||<   || k(  ry !y )Nr   )appendlenrb   updatepop)ri   rg   rh   rc   rd   re   rf   dyn_xn_yf_xzs                r#   rb   rb   {   s    HHQKAAAaDQ4AaDqT 	Q419Q1aAq)dQwwdaxx!G#)AaD	!AaD	 	tqydAAaDAaDAv  r%   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y)LALR_Analyzerlr0_itemsetsnonterminal_transitionslookbackincludesreadsdirectly_readsparser_confdebugstrictc                     t        j                  | |||       g | _        t        t              | _        t        t              | _        t        t              | _        t        t              | _        y r   )	r   r$   rz   r
   setr~   r}   r|   r{   )r"   r   r   r   s       r#   r$   zLALR_Analyzer.__init__   sO      {E6B')$)#. %
#C(#C(r%   Nc                      t                _        i dt        dt        t           f fd}t	         j
                  j                         |      D ]  } y )Nr@   returnc           	   3   J  K   t        | j                  d       \  }}t        |d       }|j                         D ]  \  }}t	        |D ch c]  }|j                  |       c}      }
j                  |d       }|pt        |      }	|D ]O  }|j                  r|j                  j                  r'|	j                  |j                  j                        z  }	Q t        ||	      }|
|<   || j                  |<   |  j                  j!                  |        y c c}w w)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
    277 r%   )r   closurer   r;   r   advancer<   r   r   r   is_termexpand_rulelr0_rules_by_originr   transitionsry   add)r@   _unsatrq   symrpsr   kernel	new_stater   cacher"   s             r#   stepz.LALR_Analyzer.compute_lr0_states.<locals>.step   s    $U]]4NOHAu 23AGGI  S#>B

3>?!IIfd3	$!&kG$ [!rww#t'7'7AYAY'ZZG[ !+67 ;I$-E&M)2!!#&  !!%(  ?s   AD#
D
"7D#D#1A2D#)r   ry   r   r   r   lr0_start_statesvalues)r"   r   r   r   s   `  @r#   compute_lr0_statesz LALR_Analyzer.compute_lr0_states   sT    E+-	)
 	)x
'; 	)( T**113T: 	A	r%   c                 \   | j                   j                         D ]l  }t        |j                        dk(  sJ |j                  D ]A  }|j                  dk(  sJ t        t        d      g      | j                  ||j                  f<   C n | j                  D ]  }t               }|j                  D ]  }|j                  r|j                  }|| j                  vr+||v r0|j                  |       ||f}| j                  j                  |       | j                  |   }| j                   |   }|j"                  |   }	|	j                  D ]\  }
|
j                  r|
j                  }|| j                  vr|j                  |       || j$                  v sJ|j                  |	|f       ^   y )Nr   r   z$END)r   r   rn   r   indexr   r   r~   r   ry   r   r   r   r   rz   rm   r}   r   NULLABLE)r"   rootr   r@   seenrV   ntdrr
next_staterp2s2s               r#   compute_reads_relationsz%LALR_Analyzer.compute_reads_relations   s   ))002 	QDt{{#q()(kk Qxx1}%}7:Xf=M;O7P##T277O4Q	Q && 	0E5Dmm 0??GGD4449QZ,,33B7((,JJrN"..q1
%-- 0C'' B!9!99r
T]]*z2./00	0r%   c           	         | j                   D ]  }|\  }}g }| j                  |   }|j                  D ]a  }|j                  j                  |k7  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s)  |j                  |
        |j                  dk(  s|j                  D ]F  }|j                  |j                  k(  s|j                  s*|j                  ||j                  f       H d |D ]   }
| j                  |
   j                  |       "  y )Nr   r   )rz   r{   r   ruleoriginranger   rn   	expansionr   r}   r   rm   r   r   r|   )r"   r   r@   nonterminalr|   r{   r   state2rU   rV   nt2jr   s                r#   compute_includes_lookbackz'LALR_Analyzer.compute_includes_lookback   s   .. 	+B!#E;H}}R(Hmm =77>>[0rxxRWW->->)?@ 
-A))!,A!1+C#//2F$**, "1q5#bgg.?.?*@A -77,,Q/t}}D!- !,
- 88q=%~~ =HH/S5E5E$LL&#(();<=%=*   +c"&&r*+3	+r%   c                 D   t        | j                  | j                  | j                        }t        | j                  | j                  |      }| j
                  j                         D ]7  \  }}|D ]-  \  }}||   D ]   }|j                  |   j                  |       " / 9 y r   )	rj   rz   r}   r~   r|   r{   r;   
lookaheadsr   )r"   	read_setsfollow_setsr   	lookbacksr@   r   rV   s           r#   compute_lookaheadsz LALR_Analyzer.compute_lookaheads  s    D88$**dFYFYZ	d::DMM9U!]]002 	2MB	( 2t$R 2A$$Q'++D122	2r%   c                 `   i }g }| j                   D ]  }|j                  j                         D ci c]  \  }}|t        |j                  f }}}|j
                  j                         D ]3  \  }}t        |      dkD  rl|D cg c]  }|j                  j                  xs d|f  }	}|	j                  d d       |	d d \  }
}|
d   |d   kD  r|
d   h}n|j                  |||f       |\  }||v r| j                  rt        d|j                   d      | j                  r7t        j                   d	|j                         t        j                   d
|       t        j                  d	|j                         t        j                  d
|       )t"        |f||<   6 |j                         D ci c]  \  }}|j                  | c}}||<    |rg }|D ]  \  }}}d|ddj%                  |D cg c]  }dt'        |      z    c}      }| j                  r;|ddj%                  |j                  D cg c]  }dt'        |      z    c}      z  z  }|j                  |        t        dj%                  |            |j                         D ci c]  \  }}|j                  | }}}i }|D ]Y  }|D ]R  }| j(                  D ]A  }|j*                  j,                  j                  d|z   k(  s*|j.                  s7||vsJ |||<   C T [ | j(                  j                         D ci c]  \  }}||j                   }}}t1        |||      }| j                  r|| _        y t4        j7                  |      | _        y c c}}w c c}w c c}}w c c}w c c}w c c}}w c c}}w )Nr   r   c                     | d   S r_   r/   )r   s    r#   r   z4LALR_Analyzer.compute_lalr1_states.<locals>.<lambda>  s
    1 r%   T)keyreverser   z#Shift/Reduce conflict for terminal z. [strict-mode]
 z;Shift/Reduce conflict for terminal %s: (resolving as shift)z * %szReduce/Reduce collision in z between the following rules:  z
	- z+
    collision occurred in state: {%s
    }z
	z

z$root_)ry   r   r;   r0   r   r   rn   optionsprioritysortrm   r   r   r!   r   r   warningr1   joinr*   r   r   r   r   rL   rP   rO   r]   )r"   mreduce_reduceitemsetrY   r   rA   rulesr   pbestsecond_bestr   rZ   r[   msgsmsgri   r5   r7   r@   r   r\   r6   _parse_tables                            r#   compute_lalr1_statesz"LALR_Analyzer.compute_lalr1_states  s   02(( 	CGLSL_L_LeLeLg,i:H"j -/
8J8J0K,K ,iG ,i$//557 1	Eu:>?DE!!)),,115EAEFF~tF<()"1%D+AwQ/!%a	%,,gr5-AB ={{*-PQSQXQXPYYk+lmm'dfhfmfmnw5%bdfdkdklWd3#)4.GBK/10 29BA16619BAgJ7	C: D&3 !"UY[]_]d]d  CH  fJ}~goruvwrxgx  fJ  ^K  L::JRWWovo~o~UjkV\_bcd_eVeU  NA  A  ACC 	!
 v{{4011,-GGI7DAq199a<77 *,
 	2E 2!22 2Eww~~**x%/?@R__$J666,1
5)22	2 CGBWBWB]B]B_a,%-aa!&,
C::+D,<<\JDm,i
 F* C
 fJU 8 bs)   N	#N6N7N<NN$3N*c                     | j                          | j                          | j                          | j                          | j	                          y r   )r   r   r   r   r   r'   s    r#   compute_lalrzLALR_Analyzer.compute_lalrG  s>    !$$&&&(!!!#r%   )FF)r   N)r,   r-   r.   r   r   rI   r   r   r   r   r   r   boolr$   r   r   r   r   r   r   r/   r%   r#   rx   rx      s    j/!!%
F(:";<<5V+,c%
D8H2I.JJKK5V+,c%
F8J2K.LLMMj&()3uZ5G/H+IIJJz612CK?@@)J )t )4 )8!0F+:2:Kx$r%   rx   N)*rM   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   r0   r1   r2   r4   rL   intrO   rj   rb   rx   r/   r%   r#   <module>r      s    F E E # K K % S S "   	w				"EWV_ "EH	( 	9N3' 98"2x$O x$r%   