o
    0 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   Zcompute_lalr	callbacksparse_table_parse_tabler   _Parserparser)selfr   r   r   Zanalysisr    r   d/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   r.   r   
isinstancer   interactive_parserZlexer_threadstateZline_ctrZchar_posfeedtextZresume_parser   tokentype)r   r+   r,   Zon_errorespe2r   r   r    r.   (   s<   



 zLALR_Parser.parse)FFFr"   )__name__
__module____qualname__r	   boolr!   classmethodr$   r   r   strr*   r   r/   r.   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,   Zvalue_stackstate_stackr-   Z
parse_confZparser_stater   r   r    r.   S   s
   
z_Parser.parser3   
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.
        Nr0    r   r   TzSTATE STACK DUMPz----------------z%d))r+   lexZ
feed_tokenr   Znew_borrow_posr   r   r2   	NameError	Exceptionr   print	enumeraterD   )r   r3   rE   r6   Z	end_tokenr8   ir9   r   r   r    rC   [   s6   "z_Parser.parse_from_stater<   )NNFr"   )r=   r>   r?   r   __annotations__r
   r@   r!   r   rB   r.   r   r   r   rC   r   r   r   r    r   I   s   
 r   N)__doc__typingr   r   r   r+   r   r   utilsr   commonr	   r
   Zlalr_analysisr   r   r   Zlalr_interactive_parserr   Zlark.exceptionsr   r   r   Zlalr_parser_stater   r   r   r   r   r   r   r    <module>   s    8