
    *                         S r SSKJr  SSKJrJrJrJrJrJ	r	  SSK
Jr  SSKJrJrJr  SSKJr   " S	 S
5      r\" S5      r\" S5      r " S S5      r " S S\5      rS rS r " S S\5      rg)zThis module builds a LALR(1) transition-table for lalr_parser.py

For now, shift/reduce conflicts are automatically resolved as shifts.
    )defaultdict   )classifyclassify_boolbfsfzset
Enumeratorlogger)GrammarError   )GrammarAnalyzerTerminal
LR0ItemSet)Rulec                   &    \ rS rSrS rS rS rSrg)Action   c                     Xl         g Nname)selfr   s     -lib/third_party/lark/parsers/lalr_analysis.py__init__Action.__init__   s    	    c                     U R                   $ r   r   r   s    r   __str__Action.__str__   s    yyr   c                     [        U 5      $ r   )strr   s    r   __repr__Action.__repr__   s    4yr   r   N)__name__
__module____qualname____firstlineno__r   r   r#   __static_attributes__ r   r   r   r      s    r   r   ShiftReducec                   0    \ rS rSrS rS r\S 5       rSrg)
ParseTable   c                 (    Xl         X l        X0l        g r   )statesstart_states
end_states)r   r1   r2   r3   s       r   r   ParseTable.__init__    s    ($r   c                    [        5       nU R                  R                  5        VVVVVs0 s H^  u  p4UUR                  5        VVVs0 s H8  u  nu  pgUR                  U5      U[        L a  SUR                  U5      4OSU4_M:     snnn_M`     nnnnnnUR                  5       UU R                  U R                  S.$ s  snnnf s  snnnnnf )Nr   r   )tokensr1   r2   r3   )	r	   r1   itemsgetr,   	serializereversedr2   r3   )	r   memor6   stateactionstokenactionargr1   s	            r   r9   ParseTable.serialize%   s    
 #'++"3"3"5
 #6 07A0?,} JJu%FfDTCMM$,?(@[\^aZbb0?A A"5 	 
 oo' --//	
 	
A
s   C?B?	C?Cc                 L   US   nUS   R                  5        VVVVVs0 s H[  u  pEUUR                  5        VVVs0 s H5  u  nu  pxX6   US:X  a  [        [        R                  " X5      4O[        U4_M7     snnn_M]     n	nnnnnU " XS   US   5      $ s  snnnf s  snnnnnf )Nr6   r1   r   r2   r3   )r7   r,   r   deserializer+   )
clsdatar;   r6   r<   r=   r>   r?   r@   r1   s
             r   rC   ParseTable.deserialize5   s    h #'x."6"6"8
 #9 07A0?,} MVUVYVT-=-=c-H$I]bdg\hh0?A A"8 	 

 6/l1CDD	A
s   B<B8	BB)r3   r2   r1   N)	r%   r&   r'   r(   r   r9   classmethodrC   r)   r*   r   r   r.   r.      s"    %

  E Er   r.   c                   $    \ rS rSr\S 5       rSrg)IntParseTable@   c           
      >   [        UR                  5      n[        U5       VVs0 s H  u  p4XC_M	     nnn0 nUR                  R                  5        HG  u  pGUR                  5        VV	s0 s H  u  pXS   [        L a  U	S   XYS      4OU	_M!     nnn	XvXT   '   MI     UR
                  R                  5        V
Vs0 s H
  u  pXU   _M     nn
nUR                  R                  5        V
Vs0 s H
  u  pXU   _M     nn
nU " XkU5      $ s  snnf s  sn	nf s  snn
f s  snn
f )Nr   r   )listr1   	enumerater7   r+   r2   r3   )rD   parse_tableenumisstate_to_idx
int_stateslakvstartr2   r3   s                r   from_ParseTableIntParseTable.from_ParseTableB   s   K&&''077
 ''--/EAXXZ)'ca A$%-QqT<!-.QF'  ),.) 0 ?J>V>V>\>\>^_>^(%1o->^_<G<R<R<X<X<Z[<ZeO+<Z
[:Z88 8)
 `[s   D)&D9D*Dr*   N)r%   r&   r'   r(   rG   rX   r)   r*   r   r   rI   rI   @   s    9 9r   rI   c           
      |    0 n/ n[         R                  U S5      nU  H  nXV   S:X  d  M  [        XdXPXU5        M     U$ Nr   )dictfromkeystraverse)XRGFSNxs          r   digraphrf   [   sD    
A
AaA419Q1q)  Hr   c           
      d   UR                  U 5        [        U5      nXrU '   XP   X`'   X@    HU  nX(   S:X  a  [        XX#XEU5        X    n	U	S:  d   eX(   n
U
S:w  d   eU
S:  a	  X:  a  XU '   X`   R                  Xh   5        MW     X    U:X  a%  X`   n UR	                  5       nSX,'   XU'   X:X  a  g M   g )Nr   )appendlenr^   updatepop)re   rc   rd   r_   r`   ra   rb   dyn_xn_yf_xzs                r   r^   r^   l   s    HHQKAAaD4ADT419Q1q)dQwwdaxx!G#)aD	AD  	tqydAADaDv  r   c                   B    \ rS rSrSS jrS rS rS rS rS r	S r
S	rg
)LALR_Analyzer   c                     [         R                  " XX#5        / U l        [        [        5      U l        [        [        5      U l        [        [        5      U l        [        [        5      U l        g r   )	r   r   nonterminal_transitionsr   setdirectly_readsreadsincludeslookback)r   parser_confdebugstricts       r   r   LALR_Analyzer.__init__   sK      EB')$)#. %
#C(#C(r   c                    ^ ^ [        5       T l        0 mUU 4S jn[        T R                  R	                  5       U5       H  nM     g )Nc           	   3   h  >#    [        U R                  S 5      u  p[        US 5      nUR                  5        H  u  pE[	        U Vs1 s H  ofR                  U5      iM     sn5      nT
R                  US 5      nUc}  [        U5      n	U H\  nUR                  (       a  M  UR                  R                  (       a  M3  U	TR                  UR                  TR                  5      -  n	M^     [        Xy5      nUT
U'   XR                  U'   Uv   M     TR                  R!                  U 5        g s  snf 7f)Nc                     U R                   $ r   )is_satisfiedrps    r   <lambda>@LALR_Analyzer.compute_lr0_states.<locals>.step.<locals>.<lambda>   s    rr   c                     U R                   $ r   )nextr   s    r   r   r      s    277r   )r   closurer   r7   r   advancer8   rx   r   r   is_termexpand_rulelr0_rules_by_originr   transitions
lr0_statesadd)r<   _unsatrm   symrpsr   kernel	new_stater   cacher   s             r   step.LALR_Analyzer.compute_lr0_states.<locals>.step   s     $U]]4NOHA 23AGGI#>#B

3#>?!IIfd3	$!&kG$!rww#t'7'7AYAY'ZZG % !+6 ;I$-E&M)2!!#& & OO&  ?s   AD2D-
";D2!D2>A4D2)rx   r   r   lr0_start_statesvalues)r   r   r   r   s   `  @r   compute_lr0_states LALR_Analyzer.compute_lr0_states   s;    %	'( T**113T:A ;r   c                    U R                   R                  5        Hp  n[        UR                  5      S:X  d   eUR                   HB  nUR                  S:X  d   e[        [        S5      /5      U R                  XR                  4'   MD     Mr     U R                   GH+  n[        5       nUR                   GH  nUR                  (       a  M  UR                  nXPR                  ;  a  M4  XT;   a  M;  UR                  U5        X54nU R                  R                  U5        U R                  U   nU R                   U   nUR"                  U   n	U	R                   He  n
U
R                  (       a  M  U
R                  nXR                  ;  a  UR                  U5        XR$                  ;   d  MS  UR                  X45        Mg     GM     GM.     g )Nr   r   z$END)r   r   rj   r   indexrx   r   ry   r   r   r   r   r   r   rw   ri   rz   r   NULLABLE)r   rootr   r<   seenrQ   ntdrr
next_staterp2s2s               r   compute_reads_relations%LALR_Analyzer.compute_reads_relations   sj   ))002Dt{{#q()(kkxx1}%}7:Xf=M;O7P##T77O4 " 3 __E5Dmm??GG4449Z,,33B7((,JJrN"..q1
%--C'' B!9!99r
]]*z./ . $ %r   c           	         U R                    GH  nUu  p#/ nU R                  U   nUR                   GHw  nUR                  R                  U:w  a  M   Un[        UR                  [        UR                  R                  5      5       H  nUR                  R                  U   n	Xy4n
UR                  U	   nXR                  ;  a  M?  [        US-   [        UR                  R                  5      5       H-  nUR                  R                  U   U R                  ;  d  M,    M     UR                  U
5        M     UR                  S:X  d  GM  UR                   HN  nUR                  UR                  :X  d  M  UR                  (       d  M2  UR                  X|R                  45        MP     GMz     U H!  n
U R                  U
   R                  U5        M#     GM     g )Nr   r   )rw   r|   r   ruleoriginranger   rj   	expansionr   rz   r   ri   r   r   r{   )r   r   r<   nonterminalr{   r|   r   state2rP   rQ   nt2jr   s                r   compute_includes_lookback'LALR_Analyzer.compute_includes_lookback   sm   ..B!#EH}}R(Hmm77>>[0rxxRWW->->)?@A))!,A!+C#//2F**, "1q5#bgg.?.?*@A77,,Q/t}}D! B !, A 88q=%~~HH/S5E5E5E$LL&(();<  .% $*  c"&&r*  3 /r   c                 J   [        U R                  U R                  U R                  5      n[        U R                  U R                  U5      nU R
                  R                  5        H9  u  p4U H.  u  pVX#    H!  nUR                  U   R                  U5        M#     M0     M;     g r   )	rf   rw   rz   ry   r{   r|   r7   
lookaheadsr   )r   	read_setsfollow_setsr   	lookbacksr<   r   rQ   s           r   compute_lookaheads LALR_Analyzer.compute_lookaheads   s    D88$**dFYFYZ	d::DMM9U!]]002MB($A$$Q'++D1 )  ) 3r   c                    0 n/ nU R                    GH  nUR                  R                  5        VVs0 s H  u  pEU[        UR                  4_M     nnnUR
                  R                  5        GHU  u  pG[        U5      S:  ap  U Vs/ s H#  oR                  R                  =(       d    SU4PM%     n	nU	R                  S SS9  U	S S u  pU
S   US   :  a  U
S   /nOUR                  X4U45        M  Uu  nXF;   a  U R                  (       a  [        SUR                   S35      eU R                  (       a;  [        R                   " S	UR                  5        [        R                   " S
U5        GM  [        R                  " S	UR                  5        [        R                  " S
U5        GM?  ["        [%        U5      S   4Xd'   GMX     UR                  5        VVs0 s H  u  pUR                  U_M     snnX'   GM     U(       a  / nU H  u  p4nSU< SSR'                  U Vs/ s H  nS[)        U5      -   PM     sn5      < 3nU R                  (       a>  USSR'                  UR                   Vs/ s H  nS[)        U5      -   PM     sn5      -  -  nUR                  U5        M     [        SR'                  U5      5      eUR                  5        VVs0 s H  u  pUR                  U_M     nnn0 nU Hh  nU H_  nU R*                   HL  nUR,                  R.                  R                  SU-   :X  d  M,  UR0                  (       d  M?  UU;  d   eUUU'   MN     Ma     Mj     [3        UU R*                  R                  5        VVs0 s H  u  nnUUR                  _M     snnU5      nU R                  (       a  UU l        g [6        R9                  U5      U l        g s  snnf s  snf s  snnf s  snf s  snf s  snnf s  snnf )Nr   r   c                     U S   $ r[   r*   )r   s    r   r   4LALR_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_)r   r   r7   r+   r   r   rj   optionsprioritysortri   r   r   r   r~   r
   warningr,   rL   joinr"   r   r   r   r   r.   rN   rI   rX   )r   mreduce_reducer<   rT   r   r=   rulesr   pbestsecond_bestr   rU   rV   msgsmsgre   r1   r3   r   rW   _parse_tables                          r   compute_lalr1_states"LALR_Analyzer.compute_lalr1_states   s   __EMRM^M^MdMdMfgMf>2rE:#5#566MfGg"--335	u:>?DEu!)),,115uAEFF~tF<()"1%DAwQ/!%a	%,,e-?@ ={{*-PQSQXQXPYYk+lmm'dfhfmfmnw5%bdfdkdklWd3#)4;q>":GK/ 60 07}}@tq@AH5 %8 D$1 5Y[]_]d]d  CH  fJ  CH}~goruvwrxgx  CH  fJ  ^K  L::JRWWoto|o|U}o|jkV\_bcd_eVeo|U}M~~~CC 	 %2
 v{{4011,-GGI7IDA199a<I7 
E!22Eww~~**x%/?@R___$J676,1
5) 3   "&UYUjUjUpUpUr*tUr\UEE5==,@Ur*t  wA  B::+D,<<\JDi h F* A
 fJU} 8 +us)   O*O#O($O.2O3O8O>c                     U R                  5         U R                  5         U R                  5         U R                  5         U R	                  5         g r   )r   r   r   r   r   r   s    r   compute_lalrLALR_Analyzer.compute_lalr.  s>    !$$&&&(!!!#r   )ry   r{   r|   r   rw   rN   rz   N)FF)r%   r&   r'   r(   r   r   r   r   r   r   r   r)   r*   r   r   rt   rt      s(    )8!0F+:28Kt$r   rt   N)__doc__collectionsr   utilsr   r   r   r   r	   r
   
exceptionsr   grammar_analysisr   r   r   grammarr   r   r+   r,   r.   rI   rf   r^   rt   r*   r   r   <module>r      sq    $ K K % C C   	w		E EB9J 96"2n$O n$r   