o
    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 )N__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 R/home/ubuntu/veenaModal/venv/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    r0   )getattrr   )r#   future_interfacer0   r$   r"   r%   _wrap_lexer   s
   r3   c                 C   sP   t | d |}|r|jdpt}|| d |||j}||_t||||dS )Nparser_confr   parser)r5   )r   deserialize_pluginsgetr   debug	callbacksParsingFrontend)datamemor!   r:   optionsr4   clsr5   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 )r;   )r!   r4   r5   r!   r4   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basic
contextualz&Bad value for lexer_type: {lexer_type})r4   r!   r>   r5   rA   r8   parser_typeformat
lexer_type
skip_lexerpostlex
isinstancetype
issubclassr   r3   r   strcreate_basic_lexercreate_contextual_lexer	TypeErrorPostLexConnector)r    r!   r4   r>   r5   create_parserrI   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)r4   startlenr
   )r    rV   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>   r7   r8   r   rJ   	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)rY   r\   r5   parse)r    r)   rV   r]   chosen_startkwstreamr$   r$   r%   r^   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' )rY   r4   rG   r
   r\   r5   parse_interactive)r    r)   rV   r_   ra   r$   r$   r%   rc   j   s
   

z!ParsingFrontend.parse_interactiver   )NN)r-   r.   r/   __serialize_fields__r   __annotations__r   r   r&   rY   rO   r   r   r\   r^   r   rc   r$   r$   r$   r%   r;   )   s   
 
&
r;   rZ   Nc                 C   s<   t | d t|tsdddd|  }t ||d|   d S d S )N)rb   r   r   rD   )rE   rB   rC   )rE   z9Parser %r does not support lexer %%r, expected one of %%s)r   rL   rM   )r5   r   expectedr$   r$   r%   _validate_frontend_argst   s   

rg   c                 C   s2   i }|D ]}t | |jd }|d ur|||j< q|S r   )r1   name)transformer	terminalsresultterminalcallbackr$   r$   r%   _get_lexer_callbacks   s   
rn   c                   @   s   e Zd Zdd Zdd ZdS )rS   c                 C   s   || _ || _d S r   )r   	postlexer)r    r   ro   r$   r$   r%   r&      s   
zPostLexConnector.__init__c                 C   s   | j ||}| j|S r   )r   r(   ro   process)r    r*   r+   ir$   r$   r%   r(      s   zPostLexConnector.lexNr,   r$   r$   r$   r%   rS      s    rS   c                 C   s   |r|j dp	t}|| S )Nr   )r7   r8   r   )r!   r5   rK   r>   r?   r$   r$   r%   rP      s   rP   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)r7   r8   r   _parse_tablestatesitemsrx   )r!   r5   rK   r>   r?   parse_tablerz   rx   r$   r$   r%   rQ      s
   rQ   r4   c                 C   s>   |r|j nd}|r|jnd}|r|jdpt}||||dS )NFr   )r9   strict)r9   r}   r7   r8   r   )r!   r4   r>   r9   r}   r?   r$   r$   r%   create_lalr_parser   s   r~   rb   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)regexpsrj   pattern	to_regexpr   
ValueErrorr   rh   	use_bytesencode	re_modulecompileg_regex_flags)r    r!   rv   regexpwidthr$   r$   r%   r&      s   



zEarleyRegexpMatcher.__init__r   c                 C   s   | j |j ||S r   )r   rh   match)r    termr)   indexr$   r$   r%   r      s   zEarleyRegexpMatcher.matchN)r   )r-   r.   r/   r&   r   r$   r$   r$   r%   r      s    r   c                 K   s.   | j rtdt| }tj| ||jfi |S )Nz7Earley's dynamic lexer doesn't support lexer_callbacks.)r:   r   r   r   Parserr   )r!   r4   r`   earley_matcherr$   r$   r%   create_earley_parser__dynamic   s   r   c                 C   s   | j |jkS r   )rh   rM   )r   tokenr$   r$   r%   _match_earley_basic   s   r   c                 K   s   t j| |tfi |S r   )r   r   r   )r!   r4   r`   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resolveFforestrB   rC   Tcomplete_lex)resolve_ambiguityr9   
tree_classordered_sets)	ambiguityr9   r   r   rI   r   r   r   )r!   r4   r>   r   r9   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   rulesr5   r:   )r    r!   r4   r>   r$   r$   r%   r&      s   zCYK_FrontEnd.__init__c                 C   s&   t |d }| j||}| |S r   )rr   r(   r5   r^   
_transform)r    lexer_threadrV   tokenstreer$   r$   r%   r^      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$   )rL   r   _apply_callback)rt   cr    r$   r%   
<listcomp>   s   $ z+CYK_FrontEnd._transform.<locals>.<listcomp>)rr   iter_subtreeschildrenr   )r    r   subtreessubtreer$   r   r%   r      s   
zCYK_FrontEnd._transformc                 C   s   | j |j |jS r   )r:   ruler   )r    r   r$   r$   r%   r      s   zCYK_FrontEnd._apply_callbackr   )r-   r.   r/   r&   r^   r   r   r$   r$   r$   r%   r      s
    
r   r   r   rG   rI   c                 C   s4   t |tsJ t |tsJ | |_||_t|||S r   )rL   r   r   rG   rI   r;   )rG   rI   r!   r4   r>   r$   r$   r%   _construct_parsing_frontend   s
   r   )rZ   Nr   )6typingr   r   r   r   r   r   r   
exceptionsr
   r   r   utilsr   r   r   r   r   r   r   parsersr   r   r   parsers.lalr_parserr   r   r   commonr   r   r   r   parsers.lalr_analysisr   r3   r@   rA   re   r;   rg   rn   rS   rP   rQ   r~   r   r   r   r   r   r   r   r   r$   r$   r$   r%   <module>   sD   & 
K