o
    0 i'                     @   s  U d dl mZmZmZmZmZmZmZ ddlm	Z	m
Z
mZ ddlmZmZ ddlmZmZmZmZ ddlmZ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  er[dd
l!m"Z" dd Z#dd Z$i Z%de&d< G dd deZ'd6ddZ(dd Z)G dd dZ*defddZ+dedefddZ,d7ded edefd!d"Z-e-e%d#< G d$d% d%Z.ded efd&d'Z/d(d) Z0ded efd*d+Z1ded edej2fd,d-Z3G d.d/ d/Z4e3e%d0< e4e%d1< d2ed3e fd4d5Z5dS )8    )AnyCallableDictOptional
CollectionUnionTYPE_CHECKING   )ConfigurationErrorGrammarErrorassert_config)get_regexp_width	Serialize)LexerThread
BasicLexerContextualLexerLexer)earleyxearleycyk)LALR_Parser)Tree)	LexerConf
ParserConf_ParserArgType_LexerArgType)ParseTableBasec                    s,   t  dd}|r
 S G  fdddt}|S )NZ__future_interface__Fc                       s    e Zd Z fddZdd ZdS )z'_wrap_lexer.<locals>.CustomLexerWrapperc                    s    || _ d S N)lexer)self
lexer_conflexer_class a/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/lark/parser_frontends.py__init__      z0_wrap_lexer.<locals>.CustomLexerWrapper.__init__c                 S   s   | j |jS r   )r   lextext)r   lexer_stateparser_stater#   r#   r$   r'      r&   z+_wrap_lexer.<locals>.CustomLexerWrapper.lexN__name__
__module____qualname__r%   r'   r#   r!   r#   r$   CustomLexerWrapper   s    r/   )getattrr   )r"   Zfuture_interfacer/   r#   r!   r$   _wrap_lexer   s
   r1   c                 C   sP   t | d |}|r|jdpt}|| d |||j}||_t||||dS )Nparser_confr   parser)r3   )r   Zdeserialize_pluginsgetr   debug	callbacksParsingFrontend)datamemor    r7   optionsr2   clsr3   r#   r#   r$   _deserialize_parsing_frontend   s
   r=   z/Dict[str, Callable[[LexerConf, Any, Any], Any]]_parser_creatorsc                   @   s   e Zd ZU dZeed< eed< eed< ddedefddZddd	Z	d
e
dee
ef fddZdd
e
fddZdd
ee
 fddZdS )r8   )r    r2   r3   r    r2   r;   Nc                 C   s   || _ || _|| _|r|| _nt|j}|d us!J d|j||||| _|j}d| _	|dv r>|j
d u s9J d| _	d S t|trRt|tsJJ t||| _nt|trittd| }||| j|j
|| _ntd|j
rzt| j|j
| _d S d S )Nz&{} is not supported in standalone modeF)dynamicdynamic_completeTbasicZ
contextualz&Bad value for lexer_type: {lexer_type})r2   r    r;   r3   r>   r5   parser_typeformat
lexer_type
skip_lexerpostlex
isinstancetype
issubclassr   r1   r   strcreate_basic_lexercreate_contextual_lexer	TypeErrorPostLexConnector)r   r    r2   r;   r3   Zcreate_parserrE   Zcreate_lexerr#   r#   r$   r%   0   s<   

zParsingFrontend.__init__c                 C   sT   |d u r| j j}t|dkrtd||\}|S || j jvr(td|| j jf |S )Nr	   z]Lark initialized with more than 1 possible start rule. Must specify which start rule to parsez(Unknown start rule %s. Must be one of %r)r2   startlenr
   )r   rP   Zstart_declsr#   r#   r$   _verify_startV   s   
zParsingFrontend._verify_startr(   returnc                 C   s0   | j r
| j jdpt}| jr|S || j|S )Nr   )r;   r4   r5   r   rF   Z	from_textr   )r   r(   r<   r#   r#   r$   _make_lexer_thread`   s   z"ParsingFrontend._make_lexer_threadc                 C   s>   |  |}|d u ri nd|i}| |}| jj||fi |S )Non_error)rR   rT   r3   parse)r   r(   rP   rU   chosen_startkwstreamr#   r#   r$   rV   d   s   

zParsingFrontend.parsec                 C   s6   |  |}| jjdkrtd| |}| j||S )Nlalrz<parse_interactive() currently only works with parser='lalr' )rR   r2   rC   r
   rT   r3   parse_interactive)r   r(   rP   rW   rY   r#   r#   r$   r[   j   s
   

z!ParsingFrontend.parse_interactiver   )NN)r,   r-   r.   Z__serialize_fields__r   __annotations__r   r   r%   rR   rK   r   r   rT   rV   r   r[   r#   r#   r#   r$   r8   )   s   
 
&
r8   rS   Nc                 C   s<   t | d t|tsdddd|  }t ||d|   d S d S )N)rZ   r   r   rA   )rB   r?   r@   )rB   z9Parser %r does not support lexer %%r, expected one of %%s)r   rH   rI   )r3   r   expectedr#   r#   r$   _validate_frontend_argst   s   

r^   c                 C   s2   i }|D ]}t | |jd }|d ur|||j< q|S r   )r0   name)Ztransformer	terminalsresultZterminalcallbackr#   r#   r$   _get_lexer_callbacks   s   
rc   c                   @   s   e Zd Zdd Zdd ZdS )rO   c                 C   s   || _ || _d S r   )r   	postlexer)r   r   rd   r#   r#   r$   r%      s   
zPostLexConnector.__init__c                 C   s   | j ||}| j|S r   )r   r'   rd   process)r   r)   r*   ir#   r#   r$   r'      s   zPostLexConnector.lexNr+   r#   r#   r#   r$   rO      s    rO   c                 C   s   |r|j dp	t}|| S )Nr   )r4   r5   r   )r    r3   rG   r;   r<   r#   r#   r$   rL      s   rL   r    c                 C   sJ   |r|j dp	t}|j}dd |j D }|r|jnd}|| ||dS )Nr   c                 S   s   i | ]\}}|t | qS r#   )listkeys).0idxtr#   r#   r$   
<dictcomp>   s    z+create_contextual_lexer.<locals>.<dictcomp>r#   )always_accept)r4   r5   r   Z_parse_tablestatesitemsrm   )r    r3   rG   r;   r<   Zparse_tablern   rm   r#   r#   r$   rM      s
   rM   r2   c                 C   s>   |r|j nd}|r|jnd}|r|jdpt}||||dS )NFr   )r6   strict)r6   rp   r4   r5   r   )r    r2   r;   r6   rp   r<   r#   r#   r$   create_lalr_parser   s   rq   rZ   c                   @   s   e Zd Zdd ZdddZdS )EarleyRegexpMatcherc              	   C   s   i | _ |jD ]=}|j }zt|d }W n ty%   td|j|f w |dkr/td||jr7|	d}|j
||j| j |j< qd S )Nr   zBad regexp in token %s: %sz/Dynamic Earley doesn't allow zero-width regexpszutf-8)regexpsr`   patternZ	to_regexpr   
ValueErrorr   r_   	use_bytesencodeZ	re_modulecompileZg_regex_flags)r   r    rk   regexpwidthr#   r#   r$   r%      s   



zEarleyRegexpMatcher.__init__r   c                 C   s   | j |j ||S r   )rs   r_   match)r   termr(   indexr#   r#   r$   r{      s   zEarleyRegexpMatcher.matchN)r   )r,   r-   r.   r%   r{   r#   r#   r#   r$   rr      s    rr   c                 K   s.   | j rtdt| }tj| ||jfi |S )Nz7Earley's dynamic lexer doesn't support lexer_callbacks.)r7   r   rr   r   Parserr{   )r    r2   rX   Zearley_matcherr#   r#   r$   create_earley_parser__dynamic   s   r   c                 C   s   | j |jkS r   )r_   rI   )r|   tokenr#   r#   r$   _match_earley_basic   s   r   c                 K   s   t j| |tfi |S r   )r   r~   r   )r    r2   rX   r#   r#   r$   create_earley_parser__basic   s   r   c                 C   s~   |j dk}|r
|jnd}|j dkr|jptnd }i }| jdkr"t}n| jdkr.d|d< t}nt}|| |f||||jd|S )	NresolveFZforestr?   r@   TZcomplete_lex)resolve_ambiguityr6   
tree_classordered_sets)Z	ambiguityr6   r   r   rE   r   r   r   )r    r2   r;   r   r6   r   extrafr#   r#   r$   create_earley_parser   s"   
 


r   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )CYK_FrontEndNc                 C   s   t |j| _|j| _d S r   )r   r~   rulesr3   r7   )r   r    r2   r;   r#   r#   r$   r%      s   zCYK_FrontEnd.__init__c                 C   s&   t |d }| j||}| |S r   )rg   r'   r3   rV   
_transform)r   Zlexer_threadrP   tokenstreer#   r#   r$   rV      s   
zCYK_FrontEnd.parsec                    s6   t | }|D ]} fdd|jD |_q |S )Nc                    s$   g | ]}t |tr |n|qS r#   )rH   r   _apply_callback)ri   cr   r#   r$   
<listcomp>   s   $ z+CYK_FrontEnd._transform.<locals>.<listcomp>)rg   Ziter_subtreeschildrenr   )r   r   ZsubtreesZsubtreer#   r   r$   r      s   
zCYK_FrontEnd._transformc                 C   s   | j |j |jS r   )r7   ruler   )r   r   r#   r#   r$   r      s   zCYK_FrontEnd._apply_callbackr   )r,   r-   r.   r%   rV   r   r   r#   r#   r#   r$   r      s
    
r   r   r   rC   rE   c                 C   s4   t |tsJ t |tsJ | |_||_t|||S r   )rH   r   r   rC   rE   r8   )rC   rE   r    r2   r;   r#   r#   r$   _construct_parsing_frontend   s
   r   )rS   Nr   )6typingr   r   r   r   r   r   r   
exceptionsr
   r   r   utilsr   r   r   r   r   r   r   parsersr   r   r   Zparsers.lalr_parserr   r   r   commonr   r   r   r   Zparsers.lalr_analysisr   r1   r=   r>   r\   r8   r^   rc   rO   rL   rM   rq   rr   r   r   r   r~   r   r   r   r#   r#   r#   r$   <module>   sD   & 
K