a
    d                     @   s   d Z ddlmZmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZ dd	lmZ dd
lmZmZmZ G dd de	ZG dd dZG dd dZG dd dZdS )z(This module implements a LALR(1) Parser
    )deepcopycopy   )UnexpectedInputUnexpectedToken)Token)	Serialize   )LALR_AnalyzerShiftReduceIntParseTable)InteractiveParser)UnexpectedCharactersr   r   c                   @   s>   e Zd ZdddZedddZdd Zdd	 ZdddZd
S )LALR_ParserFc                 C   s<   t ||d}|  |j}|j| _|| _t|j||| _d S )N)debug)r
   Zcompute_lalr	callbacksparse_table_parse_tableparser_conf_Parserparser)selfr   r   Zanalysisr    r   a/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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.deserializec                 C   s   | j |S r   )r   	serialize)r   r!   r   r   r   r#   !   s    zLALR_Parser.serializec                 C   s   | j j||ddS )NT)start_interactive)r   parse)r   lexerstartr   r   r   parse_interactive$   s    zLALR_Parser.parse_interactiveNc                 C   sH  z| j ||W S  tyB } z|d u r. t|trJ|jjj}|jj	}||sV|t|tr||jj	kr|j
|j||d   z|j W W  Y d }~S  ty } zJt|tr|jj|jj  krdkrn n|j|jkr||}W Y d }~q.d }~0  ty* } z|}W Y d }~q.d }~0 0 q.W Y d }~n
d }~0 0 d S )Nr	   $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%   '   s6    





zLALR_Parser.parse)F)F)N)	__name__
__module____qualname__r   classmethodr   r#   r(   r%   r   r   r   r   r      s   
	r   c                   @   s   e Zd ZdZdd ZdS )	ParseConf)r   r   r'   start_state	end_statestatesc                 C   s<   || _ | j j| | _| j j| | _| j j| _|| _|| _d S r   )r   Zstart_statesr:   Z
end_statesr;   r<   r   r'   )r   r   r   r'   r   r   r   r   K   s    
zParseConf.__init__N)r5   r6   r7   	__slots__r   r   r   r   r   r9   H   s   r9   c                   @   sH   e Zd ZdZdddZedd Zdd Zd	d
 Zdd Z	dddZ
dS )ParserState)
parse_confr&   state_stackvalue_stackNc                 C   s*   || _ || _|p| j jg| _|p"g | _d S r   )r?   r&   r:   r@   rA   )r   r?   r&   r@   rA   r   r   r   r   Y   s    zParserState.__init__c                 C   s
   | j d S )N)r@   r   r   r   r   position_   s    zParserState.positionc                 C   s.   t |tstS t| jt|jko,| j|jkS r   )r*   r>   NotImplementedlenr@   rD   )r   otherr   r   r   __eq__d   s    
zParserState.__eq__c                 C   s"   t | | j| jt| jt| jS r   )r0   r?   r&   r   r@   r   rA   rC   r   r   r   __copy__i   s    zParserState.__copy__c                 C   s   t | S r   )r   rC   r   r   r   r   q   s    zParserState.copyFc              	   C   sl  | j }| j}| jj}| jj}| jj}|d }z|| |j \}	}
W n8 tyz   dd ||  D }t	||| d dY n0 |
|ksJ |	t
u r|rJ ||
 ||j|vr|n||j | d S |
}t|j}|r|| d  }|| d = || d = ng }|| |}||d  |jj \}}|t
u s:J || || |r$|d |kr$|d S q$d S )NrB   c                 S   s   h | ]}|  r|qS r   )isupper).0r2   r   r   r   	<setcomp>       z)ParserState.feed_token.<locals>.<setcomp>)r,   r+   )r@   rA   r?   r<   r;   r   r0   KeyErrorkeysr   r   appendrF   Z	expansionoriginname)r   r/   Zis_endr@   rA   r<   r;   r   r,   actionargexpectedZrulesizer2   value_actionZ	new_stater   r   r   
feed_tokent   s>    
"


zParserState.feed_token)NN)F)r5   r6   r7   r=   r   propertyrD   rH   rI   r   rY   r   r   r   r   r>   V   s   

r>   c                   @   s(   e Zd Zd	ddZd
ddZdd ZdS )r   Fc                 C   s   || _ || _|| _d S r   )r   r   r   )r   r   r   r   r   r   r   r      s    z_Parser.__init__Nc                 C   s:   t | j| j|}t||||}|r0t| ||jS | |S r   )r9   r   r   r>   r   r&   parse_from_state)r   r&   r'   rA   r@   r$   r?   Zparser_stater   r   r   r%      s
    z_Parser.parsec                 C   s  zPd }|j |D ]}|| q|r4tdd|ntddddd}||dW S  ty } z8zt| ||j |_W n ty   Y n0 |W Y d }~nxd }~0  t	y } zV| j
rtd td td t|jD ]\}}td| | qtd  W Y d }~n
d }~0 0 d S )	Nr)    r   r	   TzSTATE STACK DUMPz----------------z%d))r&   lexrY   r   Znew_borrow_posr   r   r+   	NameError	Exceptionr   print	enumerater@   )r   r,   r/   Z	end_tokenr1   ir2   r   r   r   r[      s*    "z_Parser.parse_from_state)F)NNF)r5   r6   r7   r   r%   r[   r   r   r   r   r      s   

r   N)__doc__r   r   
exceptionsr   r   r&   r   utilsr   Zlalr_analysisr
   r   r   r   Zlalr_interactive_parserr   Zlark.exceptionsr   r   r9   r>   r   r   r   r   r   <module>   s   8J