o
    V۷i                     @   s   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 de	ZG dd dZdS )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                   @   sj   e Zd ZddededefddZedddZdd
ede	e
ef fddZdede
fddZdddZd	S )LALR_ParserFparser_confdebugstrictc                 C   s>   t |||d}|  |j}|j| _|| _t|j||| _d S )N)r   r   )r   compute_lalr	callbacksparse_table_parse_tabler   _Parserparser)selfr   r   r   analysisr    r!   N/home/ubuntu/vllm_env/lib/python3.10/site-packages/lark/parsers/lalr_parser.py__init__   s   zLALR_Parser.__init__c                 C   s,   |  | }t|||_t|j|||_|S N)__new__r   deserializer   r   r   )clsdatamemor   r   instr!   r!   r"   r&      s   
zLALR_Parser.deserializeNr)   returnc                 C   s   | j |S r$   )r   	serialize)r   r)   r!   r!   r"   r,   "   s   zLALR_Parser.serializelexerstartc                 C   s   | j j||ddS )NT)start_interactive)r   parse)r   r-   r.   r!   r!   r"   parse_interactive%   s   zLALR_Parser.parse_interactivec                 C   s2  z| j ||W S  ty } z|d u r 	 t|tr$|jjj}|jj	}||s*|t|trB||jj	krB|j
|j||d   z|j W W  Y d }~S  ty } z%t|trs|jj|jj  kridkrsn n|j|jkrs||}W Y d }~nd }~w ty } z|}W Y d }~nd }~ww qd }~ww )NTr   $END)r   r0   r   
isinstancer   interactive_parserlexer_threadstateline_ctrchar_posfeedtextresume_parser   tokentype)r   r-   r.   on_errorespe2r!   r!   r"   r0   (   s<   



 zLALR_Parser.parse)FFFr$   )__name__
__module____qualname__r	   boolr#   classmethodr&   r   r   strr,   r   r1   r0   r!   r!   r!   r"   r      s    	r   c                   @   sj   e Zd ZU eed< eed< eed< ddededefddZdded	e	fd
dZ
ddedee fddZdS )r   r   r   r   Fc                 C   s   || _ || _|| _d S r$   )r   r   r   )r   r   r   r   r!   r!   r"   r#   N   s   
z_Parser.__init__Nr-   r.   c                 C   s:   t | j| j|}t||||}|rt| ||jS | |S r$   )r   r   r   r   r   r-   parse_from_state)r   r-   r.   value_stackstate_stackr/   
parse_confparser_stater!   r!   r"   r0   S   s
   
z_Parser.parser6   
last_tokenc                 C   s  z.|}|j |D ]}|dusJ || q	|r tdd|ntddddd}||dW S  tyP } zzt| ||j |_W | tyK   Y |w d}~w t	y } z%| j
r{td td td t|jD ]\}}td	| | qktd  d}~w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.
        Nr2    r   r   TzSTATE STACK DUMPz----------------z%d))r-   lex
feed_tokenr   new_borrow_posr   r   r4   	NameError	Exceptionr   print	enumeraterL   )r   r6   rO   r<   	end_tokenr?   ir@   r!   r!   r"   rJ   [   s6   "z_Parser.parse_from_staterC   )NNFr$   )rD   rE   rF   r   __annotations__r
   rG   r#   r   rI   r0   r   r   r   rJ   r!   r!   r!   r"   r   I   s   
 r   N)__doc__typingr   r   r   r-   r   r   utilsr   commonr	   r
   lalr_analysisr   r   r   lalr_interactive_parserr   lark.exceptionsr   r   r   lalr_parser_stater   r   r   r   r!   r!   r!   r"   <module>   s    8