
    Xh                         d Z ddlmZmZmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZ dd	lmZ dd
lmZmZmZ ddlmZmZ  G d de	      Z G d d      Zy)z(This module implements a LALR(1) Parser
    )DictAnyOptional   )TokenLexerThread)	Serialize)
ParserConfParserCallbacks   )LALR_AnalyzerIntParseTableParseTableBase)InteractiveParser)UnexpectedCharactersUnexpectedInputUnexpectedToken)ParserState	ParseConfc                   h    e Zd ZddededefdZedd       Zddede	e
ef   fd	Zd
ede
fdZddZy)LALR_Parserparser_confdebugstrictc                     t        |||      }|j                          |j                  }|j                  | _        || _        t        |j                  ||      | _        y )N)r   r   )r   compute_lalr	callbacksparse_table_parse_tabler   _Parserparser)selfr   r   r   analysisr   s         L/var/www/html/myenv/lib/python3.12/site-packages/lark/parsers/lalr_parser.py__init__zLALR_Parser.__init__   sS     E&I))	$00&h22IuE    c                     | j                  |       }t        j                  ||      |_        t	        |j                  ||      |_        |S N)__new__r   deserializer   r    r!   )clsdatamemor   r   insts         r$   r*   zLALR_Parser.deserialize   s@    {{3)55dDAd//EBr&   Nr-   returnc                 8    | j                   j                  |      S r(   )r   	serialize)r"   r-   s     r$   r1   zLALR_Parser.serialize"   s      **400r&   lexerstartc                 >    | j                   j                  ||d      S )NT)start_interactive)r!   parse)r"   r2   r3   s      r$   parse_interactivezLALR_Parser.parse_interactive%   s    {{   FFr&   c                    	 | j                   j                  ||      S # t        $ r[}| 	 t        |t              r6|j
                  j                  j                  }|j                  j                  } ||      s|t        |t              rDj                  j                  k(  r+|j                  j                  |j                  ||dz           	 |j
                  j                         cY d }~S # t        $ rm}t        |t              rQ|j                  j                  |j                  j                  cxk(  rdk(  rn n|j
                  |j
                  k(  r||}Y d }~nd }~wt        $ r}|}Y d }~nd }~ww xY wRd }~ww xY w)Nr   $END)r!   r6   r   
isinstancer   interactive_parserlexer_threadstateline_ctrchar_posfeedtextresume_parser   tokentype)r"   r2   r3   on_errorespe2s           r$   r6   zLALR_Parser.parse(   s4   	;;$$UE22 	a!56,,99??A

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

q16
//<<>>& "1o6GGLLBHHMMCVC00B4I4II A+ A- 		sR    
FB(E>C0*F0	E99A#E!E>!E9-E4/E>4E99E>>F)FFFr(   )__name__
__module____qualname__r
   boolr%   classmethodr*   r   r   strr1   r   r7   r6    r&   r$   r   r      sj    FJ Ft F4 F  1c 1T#s(^ 1G{ G3 Gr&   r   c                   l    e Zd ZU eed<   eed<   eed<   ddededefdZddede	fdZ
dd	ed
ee   fdZy)r    r   r   r   c                 .    || _         || _        || _        y r(   )r   r   r   )r"   r   r   r   s       r$   r%   z_Parser.__init__N   s    &"
r&   Nr2   r3   c                     t        | j                  | j                  |      }t        ||||      }|rt	        | ||j
                        S | j                  |      S r(   )r   r   r   r   r   r2   parse_from_state)r"   r2   r3   value_stackstate_stackr5   
parse_confparser_states           r$   r6   z_Parser.parseS   sS    t//G
":uk;O$T<9K9KLL$$\22r&   r=   
last_tokenc                 H   	 |}|j                   j                  |      D ]  }|J |j                  |        |rt        j                  dd|      nt        ddddd      }|j                  |d      S # t
        $ r4}	 t        | ||j                         |_        |# t        $ r Y |w xY wd}~wt        $ rj}| j                  rXt        d       t        d       t        d       t        |j                        D ]  \  }}t        d	|z  |        t        d        d}~ww xY w)
zRun the main LALR parser loop

        Parameters:
            state - the initial state. Changed in-place.
            last_token - Used only for line information in case of an empty lexer.
        Nr9    r   r   TzSTATE STACK DUMPz----------------z%d))r2   lex
feed_tokenr   new_borrow_posr   r   r;   	NameError	Exceptionr   print	enumeraterW   )r"   r=   rZ   rC   	end_tokenrF   irG   s           r$   rU   z_Parser.parse_from_state[   s-   	E/ ((((  '( DI,,VR?eTZ\^`acdfgNhI##It44 	'8uekk'R$ G  G  		zzb	()()%e&7&78 )DAq%!)a()b			sC   A0A3 3	D!=BB+	B($B+'B((B++D!7A%DD!rJ   )NNFr(   )rK   rL   rM   r   __annotations__r   rN   r%   r   rP   r6   r   r   r   rU   rQ   r&   r$   r    r    I   sX    KN  W[ 
3; 3s 3k x r&   r    N)__doc__typingr   r   r   r2   r   r   utilsr	   commonr
   r   lalr_analysisr   r   r   lalr_interactive_parserr   lark.exceptionsr   r   r   lalr_parser_stater   r   r   r    rQ   r&   r$   <module>ro      sD    ' & &  0 G G 6 R R 55) 5p0 0r&   