
    Xh'                        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 Z#d Z$i Z%de&d<    G d de      Z'd*dZ(d Z) G d d      Z*defdZ+dedefdZ,d+dededefdZ-e-e%d<    G d d      Z.dedefdZ/d  Z0dedefd!Z1dededejd                  fd"Z3 G d# d$      Z4e3e%d%<   e4e%d&<   d'ed(e fd)Z5y),    )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                 L     t         dd      }|r S  G  fddt              }|S )N__future_interface__Fc                       e Zd Z fdZd Zy)'_wrap_lexer.<locals>.CustomLexerWrapperc                       |      | _         y N)lexer)self
lexer_conflexer_classs     I/var/www/html/myenv/lib/python3.12/site-packages/lark/parser_frontends.py__init__z0_wrap_lexer.<locals>.CustomLexerWrapper.__init__   s    (4
    c                 L    | j                   j                  |j                        S r#   )r$   lextext)r%   lexer_stateparser_states      r(   r,   z+_wrap_lexer.<locals>.CustomLexerWrapper.lex   s    zz~~k&6&677r*   N__name__
__module____qualname__r)   r,   )r'   s   r(   CustomLexerWrapperr!      s    58r*   r4   )getattrr   )r'   future_interfacer4   s   `  r(   _wrap_lexerr7      s0    {,BEJ	8 	8
 "!r*   c                     t        j                  | d   |      }|xr |j                  j                  d      xs t        }|j                  | d   |||j
                        }||_        t        ||||      S )Nparser_confr   parser)r:   )r   deserialize_pluginsgetr   debug	callbacksParsingFrontend)datamemor&   r?   optionsr9   clsr:   s           r(   _deserialize_parsing_frontendrE      sn    ((m)<dCK:w''++M:
J{C__T(^T9gmmLF%K:{GFKKr*   z/Dict[str, Callable[[LexerConf, Any, Any], Any]]_parser_creatorsc                       e Zd ZU dZeed<   eed<   eed<   ddedefdZddZ	de
d	ee
ef   fd
Zdde
fdZddee
   fdZy)r@   )r&   r9   r:   r&   r9   rC   Nc                    || _         || _        || _        |r|| _        nPt        j                  |j                        }| J dj                  |j                                ||||      | _        |j                  }d| _	        |dv r|j                  J d| _	        y t        |t              r)t        |t              sJ  t        |      |      | _        nPt        |t"              r5t$        t&        d|   } ||| j                  |j                  |      | _        nt)        d      |j                  r&t+        | j                   |j                        | _        y y )Nz&{} is not supported in standalone modeF)dynamicdynamic_completeTbasic
contextualz&Bad value for lexer_type: {lexer_type})r9   r&   rC   r:   rF   r=   parser_typeformat
lexer_type
skip_lexerpostlex
isinstancetype
issubclassr   r7   r$   strcreate_basic_lexercreate_contextual_lexer	TypeErrorPostLexConnector)r%   r&   r9   rC   r:   create_parserrP   create_lexers           r(   r)   zParsingFrontend.__init__0   sN   &$  DK,001H1HIM , .V.].]++/ , (
KIDK  **
88%%---"DOj$'j%0000Z0<DJ
C(+5 L &j$++z?Q?QSZ[DJDEE)$**j6H6HIDJ r*   c                     |6| j                   j                  }t        |      dkD  rt        d|      |\  }|S || j                   j                  vr%t        d|d| j                   j                        |S )Nr
   z]Lark initialized with more than 1 possible start rule. Must specify which start rule to parsezUnknown start rule z. Must be one of )r9   startlenr   )r%   r^   start_declss      r(   _verify_startzParsingFrontend._verify_startV   s    =**00K;!#(  *I  KV  W  W GE  $**000$SXZ^ZjZjZpZp%qrrr*   r-   returnc                     | j                   xr% | j                   j                  j                  d      xs t        }| j                  r|S |j                  | j                  |      S )Nr   )rC   r<   r=   r   rQ   	from_textr$   )r%   r-   rD   s      r(   _make_lexer_threadz"ParsingFrontend._make_lexer_thread`   sJ    ||H 5 5 9 9- HX[tKCMM$**d,KKr*   c                     | j                  |      }|i nd|i}| j                  |      } | j                  j                  ||fi |S )Non_error)ra   re   r:   parse)r%   r-   r^   rg   chosen_startkwstreams          r(   rh   zParsingFrontend.parsed   sQ    ))%0#R*h)?((. t{{  <<<r*   c                     | j                  |      }| j                  j                  dk7  rt        d      | j	                  |      }| j
                  j                  ||      S )Nlalrz<parse_interactive() currently only works with parser='lalr' )ra   r9   rN   r   re   r:   parse_interactive)r%   r-   r^   ri   rk   s        r(   rn   z!ParsingFrontend.parse_interactivej   s[     ))%0''61$%cdd((.{{,,V\BBr*   r#   )NN)r1   r2   r3   __serialize_fields__r   __annotations__r   r   r)   ra   rV   r   r   re   rh   r   rn    r*   r(   r@   r@   )   ss    @L$J9 $J: $JLLs LuS+5E/F L=# =Chsm Cr*   r@   rb   Nc                 p    t        | d       t        |t              sdddd|    }t        ||d| z         y y )N)rm   r   r   rK   )rL   rI   rJ   )rL   z9Parser %r does not support lexer %%r, expected one of %%s)r   rS   rT   )r:   r$   expecteds      r(   _validate_frontend_argsrt   t   sK    &34eT"+> 	
 	eX'bek'kl #r*   c                 j    i }|D ]+  }t        | |j                  d       }||||j                  <   - |S r#   )r5   name)transformer	terminalsresultterminalcallbacks        r(   _get_lexer_callbacksr|      sC    F -;t<$,F8==!- Mr*   c                       e Zd Zd Zd Zy)rZ   c                      || _         || _        y r#   )r$   	postlexer)r%   r$   r   s      r(   r)   zPostLexConnector.__init__   s    
"r*   c                 p    | j                   j                  ||      }| j                  j                  |      S r#   )r$   r,   r   process)r%   r.   r/   is       r(   r,   zPostLexConnector.lex   s+    JJNN;5~~%%a((r*   Nr0   rq   r*   r(   rZ   rZ      s    #)r*   rZ   c                 `    |xr |j                   j                  d      xs t        } ||       S )Nr   )r<   r=   r   )r&   r:   rR   rC   rD   s        r(   rW   rW      s,    9w''++L9
HjCz?r*   r&   c           	      2   |xr |j                   j                  d      xs t        }|j                  }|j                  j                         D ci c]  \  }}|t        |j                               ! }}}|r|j                  nd}	 || ||	      S c c}}w )Nr   rq   )always_accept)	r<   r=   r   _parse_tablestatesitemslistkeysr   )
r&   r:   rR   rC   rD   parse_tableidxtr   r   s
             r(   rX   rX      s    >w''++,=>
R?C'-':':KKVK]K]KcKcKe)fa#d1668n*<)fF)f>EW%:%:2Mz6?? *gs   $Br9   c                     |r|j                   nd}|r|j                  nd}|xr |j                  j                  d      xs t        } ||||      S )NFr   )r>   strict)r>   r   r<   r=   r   )r&   r9   rC   r>   r   rD   s         r(   create_lalr_parserr      sK    $GMM%E&W^^EF:w''++M:
J{C{%77r*   rm   c                       e Zd Zd ZddZy)EarleyRegexpMatcherc                    i | _         |j                  D ]  }|j                  j                         }	 t	        |      d   }|dk(  rt        d|      |j                  r|j                  d      }|j                  j                  ||j                        | j                   |j                  <    y # t        $ r t        d|j                  d|      w xY w)Nr   z/Dynamic Earley doesn't allow zero-width regexpszBad regexp in token z: zutf-8)regexpsrx   pattern	to_regexpr   r   
ValueErrorrv   	use_bytesencode	re_modulecompileg_regex_flags)r%   r&   r   regexpwidths        r(   r)   zEarleyRegexpMatcher.__init__   s    %% 	bAYY((*F](03 A:&'XZ[\\##w/#-#7#7#?#?
H`H`#aDLL 	b  T"1666#RSSTs   B..%Cc                 T    | j                   |j                     j                  ||      S r#   )r   rv   match)r%   termr-   indexs       r(   r   zEarleyRegexpMatcher.match   s"    ||DII&,,T599r*   N)r   )r1   r2   r3   r)   r   rq   r*   r(   r   r      s    b :r*   r   c                     | 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&   r9   rj   earley_matchers       r(   create_earley_parser__dynamicr      s?    TUU(4N>>*k>3G3GN2NNr*   c                 4    | j                   |j                  k(  S r#   )rv   rT   )r   tokens     r(   _match_earley_basicr      s    99

""r*   c                 :    t        j                  | |t        fi |S r#   )r   r   r   )r&   r9   rj   s      r(   create_earley_parser__basicr      s    ==[2ELLLr*   c                 .   |j                   dk(  }|r|j                  nd}|j                   dk7  r|j                  xs 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forestrI   rJ   Tcomplete_lex)resolve_ambiguityr>   
tree_classordered_sets)	ambiguityr>   r   r   rP   r   r   r   )r&   r9   rC   r   r>   r   extrafs           r(   create_earley_parserr      s    ))Y6$GMM%E/6/@/@H/L##+tRVJE	))			"4	4 $n)'Z ]8IZg>R>R]V[] ]r*   c                   &    e Zd ZddZd Zd Zd Zy)CYK_FrontEndNc                 n    t        j                  |j                        | _        |j                  | _        y r#   )r   r   rulesr:   r?   )r%   r&   r9   rC   s       r(   r)   zCYK_FrontEnd.__init__   s%    jj!2!23$..r*   c                     t        |j                  d             }| j                  j                  ||      }| j	                  |      S r#   )r   r,   r:   rh   
_transform)r%   lexer_threadr^   tokenstrees        r(   rh   zCYK_FrontEnd.parse   s<    l&&t,-{{  /t$$r*   c                     t        |j                               }|D ]B  }|j                  D cg c]%  }t        |t              r| j                  |      n|' c}|_        D | j                  |      S c c}w r#   )r   iter_subtreeschildrenrS   r   _apply_callback)r%   r   subtreessubtreecs        r(   r   zCYK_FrontEnd._transform   ss    **,- 	qG_f_o_opZ[:a;N 4 4Q 7TU UpG	q ##D))  qs   *A2c                 T     | j                   |j                     |j                        S r#   )r?   ruler   )r%   r   s     r(   r   zCYK_FrontEnd._apply_callback   s     (t~~dii(77r*   r#   )r1   r2   r3   r)   rh   r   r   rq   r*   r(   r   r      s    /
%
*8r*   r   r   r   rN   rP   c                     t        |t              sJ t        |t              sJ | |_        ||_        t        |||      S r#   )rS   r   r   rN   rP   r@   )rN   rP   r&   r9   rC   s        r(   _construct_parsing_frontendr      sC     j),,,k:...)K&J:{G<<r*   )rb   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   r7   rE   rF   rp   r@   rt   r|   rZ   rW   rX   r   r   r   r   r   r   r   r   r   rq   r*   r(   <module>r      sX   R R R G G . B B ) ) ,  H H5

"L GI C HHCi HCVm) )
 @	 @P_ @89 8: 8Xc 8 .  : :*Oi Oj O#MI MJ M]Y ]Z ]U[UbUb ]&8 8, 2  &  =#=!=r*   