
    bi-                        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mZ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Z0e0e(d<    G d d      Z1de de!fdZ2d  Z3de de!fd!Z4de de!dejj                  fd"Z6 G d# d$      Z7e6e(d%<   e7e(d&<   d'e"d(e#fd)Z8y),    )AnyCallableDictOptional
CollectionUnionTYPE_CHECKING   )ConfigurationErrorGrammarErrorassert_config)get_regexp_width	SerializeTextOrSlice	TextSlice	LarkInput)LexerThread
BasicLexerContextualLexerLexer)earleyxearleycyk)LALR_Parser)Tree)	LexerConf
ParserConf_ParserArgType_LexerArgType)ParseTableBasec                      t         dd      }|dk(  r S |dk(  r G  fddt              }|S |dk(  r G  fddt              }|S t        d	| d
      )N__future_interface__r      r
   c                       e Zd Z fdZd Zy)(_wrap_lexer.<locals>.CustomLexerWrapper1c                       |      | _         y Nlexerself
lexer_conflexer_classs     P/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/lark/parser_frontends.py__init__z1_wrap_lexer.<locals>.CustomLexerWrapper1.__init__       (4
    c                     t        |j                  t              r%|j                  j                         st	        d      |j                  |_        | j
                  j                  ||      S )Nz0Interface=1 Custom Lexer don't support TextSlice
isinstancetextr   is_complete_text	TypeErrorr)   lexr+   lexer_stateparser_states      r.   r8   z,_wrap_lexer.<locals>.CustomLexerWrapper1.lex   sR    k..	:;CSCSCdCdCf#$VWW#.#3#3 zz~~k<@@r1   N__name__
__module____qualname__r/   r8   r-   s   r.   CustomLexerWrapper1r%      s    5Ar1   rA   c                       e Zd Z fdZd Zy)(_wrap_lexer.<locals>.CustomLexerWrapper0c                       |      | _         y r'   r(   r*   s     r.   r/   z1_wrap_lexer.<locals>.CustomLexerWrapper0.__init__!   r0   r1   c                 (   t        |j                  t              rT|j                  j                         st	        d      | j
                  j                  |j                  j                        S | j
                  j                  |j                        S )Nz0Interface=0 Custom Lexer don't support TextSlicer3   r9   s      r.   r8   z,_wrap_lexer.<locals>.CustomLexerWrapper0.lex$   sh    k..	:&++<<>'(Z[[::>>+*:*:*?*?@@zz~~k&6&677r1   Nr<   r@   s   r.   CustomLexerWrapper0rC       s    58r1   rF   z#Unknown __future_interface__ value z, integer 0-2 expected)getattrr   
ValueError)r-   future_interfacerA   rF   s   `   r.   _wrap_lexerrJ      ss    {,BAF1	Q		A% 	A #"	Q			8% 		8 #">?O>PPfghhr1   c                     t        j                  | d   |      }|xr |j                  j                  d      xs t        }|j                  | d   |||j
                        }||_        t        ||||      S )Nparser_confr   parser)rM   )r   deserialize_pluginsgetr   debug	callbacksParsingFrontend)datamemor,   rR   optionsrL   clsrM   s           r.   _deserialize_parsing_frontendrX   /   sn    ((m)<dCK:w''++M:
J{C__T(^T9gmmLF%K:{GFKKr1   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
e   d	eeedf   fd
Zdde
e   fdZdde
e   fdZy)rS   )r,   rL   rM   r,   rL   rV   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})rL   r,   rV   rM   rY   rP   parser_typeformat
lexer_type
skip_lexerpostlexr4   type
issubclassr   rJ   r)   strcreate_basic_lexercreate_contextual_lexerr7   PostLexConnector)r+   r,   rL   rV   rM   create_parserrd   create_lexers           r.   r/   zParsingFrontend.__init__A   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 r1   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 )rL   startlenr   )r+   rp   start_declss      r.   _verify_startzParsingFrontend._verify_startg   s    =**00K;!#(  *I  KV  W  W GE  $**000$SXZ^ZjZjZpZp%qrrr1   r5   returnc                 d   | j                   xr% | j                   j                  j                  d      xs t        }| j                  r|S | || j
                  d       S t        |t        t        t        f      r|j                  | j
                  |      S |j                  | j
                  |      S )Nr   )rV   rO   rP   r   re   r)   r4   ri   bytesr   	from_textfrom_custom_input)r+   r5   rW   s      r.   _make_lexer_threadz"ParsingFrontend._make_lexer_threadq   s    ||H 5 5 9 9- HX[??K<tzz4((dS%34==T22$$TZZ66r1   c                 H   | j                   j                  dv rCt        |t              r3|j	                         s#t        d| j                   j                   d      | j                  |      }|i nd|i}| j                  |      } | j                  j                  ||fi |S )Nr\   zLexer z does not support text slices.on_error)
r,   rd   r4   r   r6   r7   rs   ry   rM   parse)r+   r5   rp   r{   chosen_startkwstreams          r.   r|   zParsingFrontend.parse{   s    ??%%)HH$	*43H3H3J&)C)C(DDb cdd))%0#R*h)?((. t{{  <<<r1   c                     | j                  |      }| j                  j                  dk7  rt        d      | j	                  |      }| j
                  j                  ||      S )Nlalrz<parse_interactive() currently only works with parser='lalr' )rs   rL   rb   r   ry   rM   parse_interactive)r+   r5   rp   r}   r   s        r.   r   z!ParsingFrontend.parse_interactive   s[     ))%0''61$%cdd((.{{,,V\BBr1   r'   )NN)r=   r>   r?   __serialize_fields__r   __annotations__r   r   r/   rs   r   r   r   r   ry   r|   r   r    r1   r.   rS   rS   :   s    @L$J9 $J: $JL7x	': 7uYP[]aEa?b 7=(9- =Ch{&; Cr1   rS   rt   Nc                 p    t        | d       t        |t              sdddd|    }t        ||d| z         y y )N)r   r   r   r_   )r`   r]   r^   )r`   z9Parser %r does not support lexer %%r, expected one of %%s)r   r4   rg   )rM   r)   expecteds      r.   _validate_frontend_argsr      sK    &34eT"+> 	
 	eX'bek'kl #r1   c                 j    i }|D ]+  }t        | |j                  d       }||||j                  <   - |S r'   )rG   name)transformer	terminalsresultterminalcallbacks        r.   _get_lexer_callbacksr      sC    F -;t<$,F8==!- Mr1   c                       e Zd Zd Zd Zy)rl   c                      || _         || _        y r'   )r)   	postlexer)r+   r)   r   s      r.   r/   zPostLexConnector.__init__   s    
"r1   c                 p    | j                   j                  ||      }| j                  j                  |      S r'   )r)   r8   r   process)r+   r:   r;   is       r.   r8   zPostLexConnector.lex   s+    JJNN;5~~%%a((r1   Nr<   r   r1   r.   rl   rl      s    #)r1   rl   c                 `    |xr |j                   j                  d      xs t        } ||       S )Nr   )rO   rP   r   )r,   rM   rf   rV   rW   s        r.   rj   rj      s,    9w''++L9
HjCz?r1   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   r   )always_accept)	rO   rP   r   _parse_tablestatesitemslistkeysr   )
r,   rM   rf   rV   rW   parse_tableidxtr   r   s
             r.   rk   rk      s    >w''++,=>
R?C'-':':KKVK]K]KcKcKe)fa#d1668n*<)fF)f>EW%:%:2Mz6?? *gs   $BrL   c                     |r|j                   nd}|r|j                  nd}|xr |j                  j                  d      xs t        } ||||      S )NFr   )rQ   strict)rQ   r   rO   rP   r   )r,   rL   rV   rQ   r   rW   s         r.   create_lalr_parserr      sK    $GMM%E&W^^EF:w''++M:
J{C{%77r1   r   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)regexpsr   pattern	to_regexpr   r   rH   r   	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   r   match)r+   termr5   indexs       r.   r   zEarleyRegexpMatcher.match   s"    ||DII&,,T599r1   N)r   )r=   r>   r?   r/   r   r   r1   r.   r   r      s    b :r1   r   c                     | j                   rt        d      t        |       }t        j                  | ||j
                  fi |S )Nz7Earley's dynamic lexer doesn't support lexer_callbacks.)rR   r   r   r   Parserr   )r,   rL   r~   earley_matchers       r.   create_earley_parser__dynamicr      s?    TUU(4N>>*k>3G3GN2NNr1   c                 4    | j                   |j                  k(  S r'   )r   rg   )r   tokens     r.   _match_earley_basicr      s    99

""r1   c                 :    t        j                  | |t        fi |S r'   )r   r   r   )r,   rL   r~   s      r.   create_earley_parser__basicr      s    ==[2ELLLr1   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forestr]   r^   Tcomplete_lex)resolve_ambiguityrQ   
tree_classordered_sets)	ambiguityrQ   r   r   rd   r   r   r   )r,   rL   rV   r   rQ   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[] ]r1   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   rulesrM   rR   )r+   r,   rL   rV   s       r.   r/   zCYK_FrontEnd.__init__   s%    jj!2!23$..r1   c                     t        |j                  d             }| j                  j                  ||      }| j	                  |      S r'   )r   r8   rM   r|   
_transform)r+   lexer_threadrp   tokenstrees        r.   r|   zCYK_FrontEnd.parse   s<    l&&t,-{{  /t$$r1   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childrenr4   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'   )rR   ruler   )r+   r   s     r.   r   zCYK_FrontEnd._apply_callback	  s     (t~~dii(77r1   r'   )r=   r>   r?   r/   r|   r   r   r   r1   r.   r   r      s    /
%
*8r1   r   r   r   rb   rd   c                     t        |t              sJ t        |t              sJ | |_        ||_        t        |||      S r'   )r4   r   r   rb   rd   rS   )rb   rd   r,   rL   rV   s        r.   _construct_parsing_frontendr     sC     j),,,k:...)K&J:{G<<r1   )rt   Nr'   )9typingr   r   r   r   r   r   r	   
exceptionsr   r   r   utilsr   r   r   r   r   r)   r   r   r   r   parsersr   r   r   parsers.lalr_parserr   r   r   commonr   r   r   r   parsers.lalr_analysisr    rJ   rX   rY   r   rS   r   r   rl   rj   rk   r   r   r   r   r   r   r   r   r   r   r1   r.   <module>r      s\   R R R G G Q Q B B ) ) ,  H H5
i<L GI C HRCi RCjm) )
 @	 @P_ @89 8: 8Xc 8 .  : :*Oi Oj O#MI MJ M]Y ]Z ]U[UbUb ]&8 8, 2  &  =#=!=r1   