
    Ii5#                     p   S SK JrJrJr  S SKJrJr  S SKJr  S SK	J
r
JrJrJrJrJr  S SKJrJrJr  S SKJr  S SKJr  S SKJrJr   S	S
KrS	S
KrS r " S S5      r " S S\5      r S r!S r" " S S5      r#S r$S r%SS jr&\'r(\'r) " S S5      r*SS jr+S r,S r-S r( " S S5      r)g
! \ a    S
r Nhf = f)    )ConfigurationErrorGrammarErrorassert_config)get_regexp_width	Serialize)GrammarAnalyzer)LexerThreadTraditionalLexerContextualLexerLexerTokenTerminalDef)earleyxearleycyk)LALR_Parser)Tree)	LexerConf
ParserConf    Nc                 X   ^  [        T SS5      nU(       a  T $  " U 4S jS[        5      nU$ )N__future_interface__Fc                   (   > \ rS rSrU 4S jrS rSrg)'_wrap_lexer.<locals>.CustomLexerWrapper   c                     > T" U5      U l         g Nlexer)self
lexer_conflexer_classs     ;/venv/lib/python3.13/site-packages/lark/parser_frontends.py__init__0_wrap_lexer.<locals>.CustomLexerWrapper.__init__   s    (4
    c                 L    U R                   R                  UR                  5      $ r   )r   lextext)r    lexer_stateparser_states      r#   r(   +_wrap_lexer.<locals>.CustomLexerWrapper.lex   s    zz~~k&6&677r&   r   N)__name__
__module____qualname____firstlineno__r$   r(   __static_attributes__)r"   s   r#   CustomLexerWrapperr      s    58r&   r2   )getattrr   )r"   future_interfacer2   s   `  r#   _wrap_lexerr5      s0    {,BEJ	8 	8
 "!r&   c                   &    \ rS rSrS rS rS rSrg)MakeParsingFrontend   c                     Xl         X l        g r   )parser_type
lexer_type)r    r:   r;   s      r#   r$   MakeParsingFrontend.__init__   s    &$r&   c                     [        U[        5      (       d   e[        U[        5      (       d   eU R                  Ul        U R                  Ul        [        XU5      $ r   )
isinstancer   r   r:   r;   ParsingFrontendr    r!   parser_confoptionss       r#   __call__MakeParsingFrontend.__call__#   sO    *i0000+z2222"&"2"2 $
z@@r&   c                     [         R                  " US   U5      n[        R                  " US   X$UR                  5      nXFl        [        X6XWS9$ )NrA   parser)rF   )r   deserializer   debug	callbacksr?   )r    datamemor!   rI   rB   rA   rF   s           r#   rG   MakeParsingFrontend.deserialize*   sH     ,,T--@$G((h'--X )zOOr&   )r;   r:   N)r-   r.   r/   r0   r$   rC   rG   r1    r&   r#   r7   r7      s    %APr&   r7   c                   @    \ rS rSrSrS	S jrS	S jrS
S jrS
S jrSr	g)r?   3   )r!   rA   rF   rB   Nc                 V   X l         Xl        X0l        U(       a  X@l        O-[        [
        [        S.UR                     nU" XU5      U l        UR                  nSU l	        US;   a  UR                  b   eSU l	        g  [        [        S.U   nU" XR                  UR                  5      U l        UR                  (       a&  [%        U R                  UR                  5      U l        g g ! [         a5    [        U[         5      (       d   U5       e[#        U5      " U5      U l         Nvf = f)Nlalrr   r   F)dynamicdynamic_completeTstandard
contextual)rA   r!   rB   rF   create_lalr_parsercreate_earley_parserCYK_FrontEndr:   r;   
skip_lexerpostlexcreate_traditional_lexercreate_contextual_lexerr   KeyError
issubclassr   r5   PostLexConnector)r    r!   rA   rB   rF   create_parserr;   create_lexers           r#   r$   ParsingFrontend.__init__6   s   &$  K +.# %%	'M
 (
IDK  **
88%%---"DO		S45 L &j++z?Q?QRDJ)$**j6H6HIDJ   	=j%00<*<0$Z0<DJ	=s   ?C) )<D('D(c                     Uc7  U R                   R                  n[        U5      S:  a  [        SU5      eUu  nU$ XR                   R                  ;  a'  [        SU< SU R                   R                  < 35      eU$ )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 )rA   startlenr   )r    rf   start_declss      r#   _verify_startParsingFrontend._verify_start\   s    =**00K;!#(  *I  KV  W  W GE  **000$SXZ^ZjZjZpZp%qrrr&   c                     U R                  U5      nU R                  (       a  UO[        U R                  U5      nUc  0 OSU0nU R                  R
                  " XT40 UD6$ )Non_error)ri   r[   r	   r   rF   parse)r    r)   rf   rl   chosen_startstreamkws          r#   rm   ParsingFrontend.parsef   sU    ))%0k$**d.K#R*h)?{{  <<<r&   c                     U R                  U5      nU R                  R                  S:w  a  [        S5      eU R                  (       a  UO[        U R                  U5      nU R                  R                  XC5      $ )NrR   z<parse_interactive() currently only works with parser='lalr' )	ri   rA   r:   r   r[   r	   r   rF   parse_interactive)r    r)   rf   rn   ro   s        r#   rs   !ParsingFrontend.parse_interactivel   s_    ))%0''61$%cddk$**d.K{{,,VBBr&   )r   r!   rB   rF   rA   r[   r   )NN)
r-   r.   r/   r0   __serialize_fields__r$   ri   rm   rs   r1   rM   r&   r#   r?   r?   3   s    K$JL=Cr&   r?   c                     [        U S5        [        U[        5      (       d  SSSS.U    n[        XSU -  5        [        X5      $ )NrQ   rU   )rV   rS   rT   )rV   z9Parser %r does not support lexer %%r, expected one of %%s)r   r>   typer7   )rF   r   expecteds      r#   get_frontendry   t   sR    &34eT"".A! 	
 	e'bek'klv--r&   c                 n    0 nU H,  n[        XR                  S 5      nUc  M  XBUR                  '   M.     U$ r   )r3   name)transformer	terminalsresultterminalcallbacks        r#   _get_lexer_callbacksr      s:    F;t<$,8==!  Mr&   c                   &    \ rS rSrS rS rS rSrg)ra      c                     Xl         X l        g r   r   	postlexer)r    r   r   s      r#   r$   PostLexConnector.__init__   s    
"r&   c                 8    U R                   R                  U5      $ r   )r   make_lexer_state)r    r)   s     r#   r   !PostLexConnector.make_lexer_state   s    zz**400r&   c                 n    U R                   R                  X5      nU R                  R                  U5      $ r   )r   r(   r   process)r    r*   r+   is       r#   r(   PostLexConnector.lex   s)    JJNN;5~~%%a((r&   r   N)r-   r.   r/   r0   r$   r   r(   r1   rM   r&   r#   ra   ra      s    #1)r&   ra   c                     [        U 5      $ r   )r
   )r!   rF   r\   s      r#   r]   r]      s    J''r&   c           	          UR                   R                  R                  5        VVs0 s H  u  p4U[        UR	                  5       5      _M!     nnnU(       a  UR
                  OSn[        XUS9$ s  snnf )NrM   )always_accept)_parse_tablestatesitemslistkeysr   r   )r!   rF   r\   idxtr   r   s          r#   r^   r^      s`    /5/B/B/I/I/O/O/QR/QVSc$qvvx. /QFR-4G))"M:]KK Ss   &A0c                 >    U(       a  UR                   OSn[        XS9$ )NF)rH   )rH   r   )r!   rA   rB   rH   s       r#   rX   rX      s    $GMM%E{00r&   c                   $    \ rS rSrS rSS jrSrg)EarleyRegexpMatcher   c                    0 U l         UR                   H  nUR                  S:w  a  [        SX"R                  5      eUR                  R                  5       n [        U5      S   nUS:X  a  [        SU5      e UR                  (       a  UR                  S5      nUR                  R                  X1R                  5      U R                   UR                  '   M     g ! [         a    [        SUR                  < SU< 35      ef = f)Nr   z3Dynamic Earley doesn't support weights on terminalsr   z/Dynamic Earley doesn't allow zero-width regexpszBad regexp in token z: zutf-8)regexpsr}   priorityr   pattern	to_regexpr   
ValueErrorr{   	use_bytesencode	re_modulecompileg_regex_flags)r    r!   r   regexpwidths        r#   r$   EarleyRegexpMatcher.__init__   s    %%AzzQ"#XZ[]g]ghhYY((*F](03 A:&'XZ[\\ ##w/#-#7#7#?#?H`H`#aDLL  &  T"1666#RSSTs   C(Dc                 R    U R                   UR                     R                  X#5      $ r   )r   r{   match)r    termr)   indexs       r#   r   EarleyRegexpMatcher.match   s     ||DII&,,T99r&   )r   N)r   )r-   r.   r/   r0   r$   r   r1   rM   r&   r#   r   r      s    b$:r&   r   c                 r    [        U 5      n[        R                  " XR                  4SU R                  0UD6$ )Nignore)r   r   Parserr   r   )r!   rA   rB   rp   earley_matchers        r#   create_earley_parser__dynamicr      s2    ,Z8~~k+?+?`
HYHY`]_``r&   c                 4    U R                   UR                  :H  $ r   )r{   rw   )r   tokens     r#   _match_earley_basicr      s    99

""r&   c                 :    [         R                  " U[        40 UD6$ r   )r   r   r   )r!   rA   rB   rp   s       r#   create_earley_parser__basicr      s    ==&9@R@@r&   c                 0   UR                   S:H  nU(       a  UR                  OSnUR                   S:w  a  UR                  =(       d    [        OS n0 nU R                  S:X  a  [
        nO"U R                  S:X  a  SUS'   [
        nO[        nU" XU4X4US.UD6$ )	NresolveFforestrS   rT   Tcomplete_lex)resolve_ambiguityrH   
tree_class)	ambiguityrH   r   r   r;   r   r   )r!   rA   rB   r   rH   r   extrafs           r#   rY   rY      s    ))Y6$GMM%E/6/@/@H/L##+tRVJE	))			"4	4#n)'Zg  AARlv  Az  A  Ar&   c                   0    \ rS rSrSS jrS rS rS rSrg)	rZ      Nc                     [        U5      U l        [        R                  " UR                  5      U l        UR                  U l        g r   )r   	_analysisr   r   rulesrF   rI   r@   s       r#   r$   CYK_FrontEnd.__init__   s1    (5jj!2!23$..r&   c                     [        UR                  S 5      5      nU R                  R                  X25      nU R	                  U5      $ r   )r   r(   rF   rm   
_transform)r    lexer_threadrf   tokenstrees        r#   rm   CYK_FrontEnd.parse   s:    l&&t,-{{  /t$$r&   c                    [        UR                  5       5      nU HK  nUR                   Vs/ s H+  n[        U[        5      (       a  U R                  U5      OUPM-     snUl        MM     U R                  U5      $ s  snf r   )r   iter_subtreeschildrenr>   r   _apply_callback)r    r   subtreessubtreecs        r#   r   CYK_FrontEnd._transform   su    **,-G_f_o_op_oZ[:a;N;N 4 4Q 7TU U_opG   ##D))  qs   2A<c                 T    U R                   UR                     " UR                  5      $ r   )rI   ruler   )r    r   s     r#   r   CYK_FrontEnd._apply_callback   s    ~~dii(77r&   )r   rI   rF   r   )	r-   r.   r/   r0   r$   rm   r   r   r1   rM   r&   r#   rZ   rZ      s    /%
*8r&   rZ   r   ).
exceptionsr   r   r   utilsr   r   parsers.grammar_analysisr   r   r	   r
   r   r   r   r   parsersr   r   r   parsers.lalr_parserr   r   r   commonr   r   regexImportErrorrer5   r7   r?   ry   r   ra   r]   r^   rX   NotImplementedrY   rZ   r   r   r   r   rM   r&   r#   <module>r      s    G G . 5 \ \ ) ) ,  ) 

"P P*>Ci >CB
.
) 
)(L
1
 & : :.a#AA$8 8a  Es   B* *B54B5