a
    dw%                     @   sz  U 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
mZ ddl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 dd Z dd Z!i Z"de#d< G dd deZ$ddddZ%dd Z&G dd dZ'dd Z(dd Z)d3dd Z*e*e"d!< G d"d# d#Z+d4d$d%Z,d&d' Z-d(d) Z.d*d+ Z/G d,d- d-Z0e/e"d.< e0e"d/< eed0d1d2Z1dS )5    )AnyCallableDictTuple   )ConfigurationErrorGrammarErrorassert_config)get_regexp_width	Serialize)GrammarAnalyzer)LexerThread
BasicLexerContextualLexerLexer)earleyxearleycyk)LALR_Parser)Tree)	LexerConf
ParserConf_ParserArgType_LexerArgTypec                    s0   t  dd}|r S G  fdddt}|S d 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 ^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/lark/parser_frontends.py__init__   s    z0_wrap_lexer.<locals>.CustomLexerWrapper.__init__c                 S   s   | j |jS r   )r   lextext)r   lexer_stateparser_stater    r    r!   r#      s    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
    r-   c                 C   sP   t | d |}|r |jdp"t}|| d |||j}||_t||||dS )Nparser_confr   parser)r/   )r   Zdeserialize_pluginsgetr   debug	callbacksParsingFrontend)datamemor   r3   optionsr.   clsr/   r    r    r!   _deserialize_parsing_frontend   s
    r9   z/Dict[str, Callable[[LexerConf, Any, Any], Any]]_parser_creatorsc                   @   s@   e Zd ZdZdddZdddZdd Zdd	d
ZdddZdS )r4   )r   r.   r/   Nc                 C   s   || _ || _|| _|r|| _n2t|j}|d usBJ d|j||||| _|j}d| _	|dv r||j
d u srJ d| _	d S zttd| }W n2 ty   t|tsJ |t||| _Y n0 ||| j|j
|| _|j
rt| j|j
| _d S )Nz&{} is not supported in standalone modeF)dynamicdynamic_completeTbasicZ
contextual)r.   r   r7   r/   r:   r1   parser_typeformat
lexer_type
skip_lexerpostlexcreate_basic_lexercreate_contextual_lexerKeyError
issubclassr   r-   r   PostLexConnector)r   r   r.   r7   r/   create_parserrA   Zcreate_lexerr    r    r!   r"   )   s8    zParsingFrontend.__init__c                 C   sR   |d u r.| j j}t|dkr&td||\}n || j jvrNt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)r.   startlenr   )r   rJ   Zstart_declsr    r    r!   _verify_startN   s    
zParsingFrontend._verify_startc                 C   s0   | j r| j jdpt}| jr"|S || j|S )Nr   )r7   r0   r1   r   rB   Z	from_textr   )r   r$   r8   r    r    r!   _make_lexer_threadX   s    z"ParsingFrontend._make_lexer_threadc                 C   s>   |  |}|d u ri nd|i}| |}| jj||fi |S )Non_error)rL   rM   r/   parse)r   r$   rJ   rN   chosen_startkwstreamr    r    r!   rO   \   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' )rL   r.   r?   r   rM   r/   parse_interactive)r   r$   rJ   rP   rR   r    r    r!   rT   b   s
    

z!ParsingFrontend.parse_interactive)N)N)NN)NN)	r(   r)   r*   Z__serialize_fields__r"   rL   rM   rO   rT   r    r    r    r!   r4   &   s   
%


r4   N)returnc                 C   s8   t | d t|ts4dddd|  }t ||d|   d S )N)rS   r   r   r=   )r>   r;   r<   )r>   z9Parser %r does not support lexer %%r, expected one of %%s)r	   
isinstancetype)r/   r   expectedr    r    r!   _validate_frontend_argsj   s    

rY   c                 C   s2   i }|D ]$}t | |jd }|d ur|||j< q|S r   )r,   name)Ztransformer	terminalsresultZterminalcallbackr    r    r!   _get_lexer_callbacksu   s    r^   c                   @   s   e Zd Zdd Zdd ZdS )rH   c                 C   s   || _ || _d S r   )r   	postlexer)r   r   r_   r    r    r!   r"   ~   s    zPostLexConnector.__init__c                 C   s   | j ||}| j|S r   )r   r#   r_   process)r   r%   r&   ir    r    r!   r#      s    zPostLexConnector.lexNr'   r    r    r    r!   rH   }   s   rH   c                 C   s   |r|j dpt}|| S )Nr   )r0   r1   r   )r   r/   rC   r7   r8   r    r    r!   rD      s    rD   c                 C   sF   |r|j dpt}dd |jj D }|r4|jnd}|| ||dS )Nr   c                 S   s   i | ]\}}|t | qS r    )listkeys).0idxtr    r    r!   
<dictcomp>       z+create_contextual_lexer.<locals>.<dictcomp>r    )always_accept)r0   r1   r   Z_parse_tablestatesitemsri   )r   r/   rC   r7   r8   rj   ri   r    r    r!   rE      s    rE   c                 C   s.   |r
|j nd}|r|jdp t}|||dS )NFr   )r2   )r2   r0   r1   r   )r   r.   r7   r2   r8   r    r    r!   create_lalr_parser   s    rl   rS   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yN   td|j|f Y n0 |dkrbtd||jrr|	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   rZ   	use_bytesencodeZ	re_modulecompileZg_regex_flags)r   r   rf   regexpwidthr    r    r!   r"      s    



zEarleyRegexpMatcher.__init__r   c                 C   s   | j |j ||S r   )rn   rZ   match)r   termr$   indexr    r    r!   rv      s    zEarleyRegexpMatcher.matchN)r   )r(   r)   r*   r"   rv   r    r    r    r!   rm      s   rm   c                 K   s.   | j rtdt| }tj| ||jfi |S )Nz7Earley's dynamic lexer doesn't support lexer_callbacks.)r3   r   rm   r   Parserrv   )r   r.   r7   rQ   Zearley_matcherr    r    r!   create_earley_parser__dynamic   s    rz   c                 C   s   | j |jkS r   )rZ   rW   )rw   tokenr    r    r!   _match_earley_basic   s    r|   c                 K   s   t j| |tfi |S r   )r   ry   r|   )r   r.   r7   rQ   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rDt}n| jdkr\d|d< t}nt}|| ||f|||d|S )	NresolveFZforestr;   r<   TZcomplete_lex)resolve_ambiguityr2   
tree_class)Z	ambiguityr2   r   r   rA   rz   r}   )r   r.   r7   r   r2   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 || _t|j| _|j| _d S r   )r   Z	_analysisr   ry   rulesr/   r3   )r   r   r.   r7   r    r    r!   r"      s    
zCYK_FrontEnd.__init__c                 C   s&   t |d }| j||}| |S r   )rb   r#   r/   rO   
_transform)r   Zlexer_threadrJ   tokenstreer    r    r!   rO      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    )rV   r   _apply_callback)rd   cr   r    r!   
<listcomp>   rh   z+CYK_FrontEnd._transform.<locals>.<listcomp>)rb   Ziter_subtreeschildrenr   )r   r   ZsubtreesZsubtreer    r   r!   r      s    zCYK_FrontEnd._transformc                 C   s   | j |j |jS r   )r3   Zruler   )r   r   r    r    r!   r      s    zCYK_FrontEnd._apply_callback)N)r(   r)   r*   r"   rO   r   r   r    r    r    r!   r      s   
r   r   r   )r?   rA   c                 C   s4   t |tsJ t |tsJ | |_||_t|||S r   )rV   r   r   r?   rA   r4   )r?   rA   r   r.   r7   r    r    r!   _construct_parsing_frontend   s
    r   )N)N)2typingr   r   r   r   
exceptionsr   r   r	   utilsr
   r   Zparsers.grammar_analysisr   r   r   r   r   r   parsersr   r   r   Zparsers.lalr_parserr   r   r   commonr   r   r   r   r-   r9   r:   __annotations__r4   rY   r^   rH   rD   rE   rl   rm   rz   r|   r}   r   r   r   r    r    r    r!   <module>   s<   D

