
    E                         S r SSKJrJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
JrJrJr  SS	KJr  SS
KJrJrJr   " S S\	5      r " S S5      r " S S5      r " S S5      rg)z(This module implements a LALR(1) Parser
    )deepcopycopy)DictAny   )Token)	Serialize   )LALR_AnalyzerShiftIntParseTable)InteractiveParser)UnexpectedCharactersUnexpectedInputUnexpectedTokenc                   b    \ rS rSrSS jr\SS j5       rSS\S\\	\4   4S jjr
S rSS	 jrS
rg)LALR_Parser   c                     [        XUS9nUR                  5         UR                  nUR                  U l        Xl        [        UR                  XR5      U l        g )N)debugstrict)r   compute_lalr	callbacksparse_table_parse_tableparser_conf_Parserparser)selfr   r   r   analysisr   s         +lib/third_party/lark/parsers/lalr_parser.py__init__LALR_Parser.__init__   sM     &I))	$00&h22IE    c                     U R                  U 5      n[        R                  " X5      Ul        [	        UR                  X45      Ul        U$ N)__new__r   deserializer   r   r   )clsdatamemor   r   insts         r!   r(   LALR_Parser.deserialize   s<    {{3)55dAd//Br$   Nr+   returnc                 8    U R                   R                  U5      $ r&   )r   	serialize)r   r+   s     r!   r0   LALR_Parser.serialize!   s      **400r$   c                 6    U R                   R                  XSS9$ )NT)start_interactive)r   parse)r   lexerstarts      r!   parse_interactiveLALR_Parser.parse_interactive$   s    {{   FFr$   c                 B    U R                   R                  X5      $ ! [         Gav  nUc  e  [        U[        5      (       a6  UR
                  R                  R                  nUR                  R                  nU" U5      (       d  Ue[        U[        5      (       aD  WWR                  R                  :X  a*  UR                  R                  UR                  XfS-    5         UR
                  R                  5       s S nA$ ! [         au  n[        U[        5      (       aT  UR                  R                  UR                  R                  s=:X  a  S:X  a  O  OUR
                  UR
                  :X  a  UeUn S nAOS nAf[         a  nUn S nAOS nAff = fGMl  S nAff = f)Nr
   $END)r   r4   r   
isinstancer   interactive_parserlexer_threadstateline_ctrchar_posfeedtextresume_parser   tokentype)r   r5   r6   on_errorespe2s           r!   r4   LALR_Parser.parse'   s;   	;;$$U22 	a!566,,99??A

++A{{Ga!566AJJ///

q16
//<<>>& "1o66GGLLBHHMMCVC00B4I4II A+ A- 		sR    FB8F!D :F 
F
A+E:5F:FF	FFFF)r   r   r   )FFFr&   )__name__
__module____qualname____firstlineno__r"   classmethodr(   r   r   strr0   r7   r4   __static_attributes__ r$   r!   r   r      sB    F  1c 1T#s(^ 1Gr$   r   c                       \ rS rSrSrS rSrg)	ParseConfH   )r   r   r6   start_state	end_statestatesc                     Xl         U R                   R                  U   U l        U R                   R                  U   U l        U R                   R
                  U l        X l        X0l        g r&   )r   start_statesrX   
end_statesrY   rZ   r   r6   )r   r   r   r6   s       r!   r"   ParseConf.__init__K   sV    &++88?))44U;&&--"
r$   )r   rY   r   r6   rX   rZ   N)rM   rN   rO   rP   	__slots__r"   rS   rT   r$   r!   rV   rV   H   s    YIr$   rV   c                   N    \ rS rSrSrSS jr\S 5       rS rS r	S r
SS	 jrS
rg)ParserStateV   )
parse_confr5   state_stackvalue_stackNc                     Xl         X l        U=(       d    U R                   R                  /U l        U=(       d    / U l        g r&   )rc   r5   rX   rd   re   )r   rc   r5   rd   re   s        r!   r"   ParserState.__init__Y   s3    $
&G4??+F+F*G&,"r$   c                      U R                   S   $ )N)rd   r   s    r!   positionParserState.position_   s    ##r$   c                     [        U[        5      (       d  [        $ [        U R                  5      [        UR                  5      :H  =(       a    U R
                  UR
                  :H  $ r&   )r;   ra   NotImplementedlenrd   rk   )r   others     r!   __eq__ParserState.__eq__d   sK    %--!!4##$E,=,=(>>b4==TYTbTbCbbr$   c                     [        U 5      " U R                  U R                  [        U R                  5      [        U R                  5      5      $ r&   )rE   rc   r5   r   rd   r   re   rj   s    r!   __copy__ParserState.__copy__i   s=    DzOOJJ!!"T%%&	
 	
r$   c                     [        U 5      $ r&   )r   rj   s    r!   r   ParserState.copyq   s    Dzr$   c                    U R                   nU R                  nU R                  R                  nU R                  R                  nU R                  R
                  n US   n XX   UR                     u  pX:w  d   eU	[        L aP  U(       a   eUR                  U
5        UR                  UR                  U;  a  UOXqR                     " U5      5        g U
n[        UR                  5      nU(       a  XN* S  nX>* S 2	 XN* S 2	 O/ nX}   " U5      nXSS      UR                  R                      u  nnU[        L d   eUR                  U5        UR                  U5        U(       a  US   U:X  a  US   $ GM  ! [         aJ    XX   R                  5        Vs1 s H  oR                  5       (       d  M  UiM     Os  snf nn[        XU S S9ef = f)Nri   )r>   r<   )rd   re   rc   rZ   rY   r   rE   KeyErrorkeysisupperr   r   appendro   	expansionoriginname)r   rD   is_endrd   re   rZ   rY   r   r>   actionargrH   expectedrulesizevalue_action	new_states                     r!   
feed_tokenParserState.feed_tokent   s   &&&&''OO--	OO--	OE\$mEJJ7
 ###!!z""3'""EJJi,G5YWaWaMbchMij 4>>*#EF+A#EF+#EF+A!*%+O%<T[[=M=M%N"%'''""9-""5)k"o:&r?*G   \'-}'9'9';K';!yy{A';KK%eTVZ[[\s   "E5 5G	F6/F65G	)r5   rc   rd   re   )NNrL   )rM   rN   rO   rP   r_   r"   propertyrk   rq   rt   r   r   rS   rT   r$   r!   ra   ra   V   s5    CI- $ $c

*+r$   ra   c                   2    \ rS rSrSS jrSS jrS	S jrSrg)
r      c                 (    Xl         X l        X0l        g r&   )r   r   r   )r   r   r   r   s       r!   r"   _Parser.__init__   s    &"
r$   Nc                     [        U R                  U R                  U5      n[        XaXC5      nU(       a  [	        XUR
                  5      $ U R                  U5      $ r&   )rV   r   r   ra   r   r5   parse_from_state)r   r5   r6   re   rd   r3   rc   parser_states           r!   r4   _Parser.parse   sM    t//G
":kO$T9K9KLL$$\22r$   c                 `    UnUR                   R                  U5       H  nUR                  U5        M     U(       a  [        R                  " SSU5      O[        SSSSS5      nUR                  US5      $ ! [
         a4  n [        XUR                   5      Ul        Ue! [         a     Uef = fSnAf[         ap  nU R                  (       aY  [        S5        [        S5        [        S5        [        UR                  5       H  u  pg[        S	U-  U5        M     [        S5        e SnAff = f)
zRun the main LALR parser loop

Parameters:
    state (ParseState) - the initial state. Changed in-place.
    last_token (optional, Token) - Used only for line information in case of an empty lexer.
r:    r   r
   TNzSTATE STACK DUMPz----------------z%d))r5   lexr   r   new_borrow_posr   r   r<   	NameError	Exceptionr   print	enumeraterd   )r   r>   
last_tokenrD   	end_tokenrG   irH   s           r!   r   _Parser.parse_from_state   s   	E/  ' 0 DI,,VR?eTZ\^`acdfgNhI##It44 	'8ekk'R$ G  G  		zzb	()()%e&7&78DA%!)a( 9b			sC   A4A7 7
D-BB0
B-)B0,B--B00D-=A+D((D-)r   r   r   rL   )NNFr&   )rM   rN   rO   rP   r"   r4   r   rS   rT   r$   r!   r   r      s    
3r$   r   N)__doc__r   r   typingr   r   r5   r   utilsr	   lalr_analysisr   r   r   lalr_interactive_parserr   lark.exceptionsr   r   r   r   rV   ra   r   rT   r$   r!   <module>r      sU         > > 6 R R5) 5p H+ H+T+ +r$   