
    C'                        % S SK JrJrJrJrJr  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  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JrJ r   S r!S r"0 r#S\$S'    " S S\5      r%S*S jr&S r' " S S5      r(S\4S jr)S\S\4S jr*S+S\S\S\4S jjr+\+\#S'    " S S5      r,S\S\4S jr-S  r.S\S\4S! jr/S\S\S\R`                  4S" jr1 " S# S$5      r2\1\#S%'   \2\#S&'   S'\S(\ 4S) jr3g),    )AnyCallableDictOptional
Collection   )ConfigurationErrorGrammarErrorassert_config)get_regexp_width	Serialize)GrammarAnalyzer)LexerThread
BasicLexerContextualLexerLexer)earleyxearleycyk)LALR_Parser)Tree)	LexerConf
ParserConf_ParserArgType_LexerArgTypec                 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     (lib/third_party/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+   r8   )getattrr   )r'   future_interfacer8   s   `  r(   _wrap_lexerr;      s0    {,BEJ	8 	8
 "!r+   c                     [         R                  " U S   U5      nU=(       a    UR                  R                  S5      =(       d    [        nUR                  U S   XUR
                  5      nX5l        [        X%XGS9$ )Nparser_confr   parser)r>   )r   deserialize_pluginsgetr   debug	callbacksParsingFrontend)datamemor&   rC   optionsr=   clsr>   s           r(   _deserialize_parsing_frontendrI      sf    ((m)<dCK:w''++M:
J{C__T(^TgmmLF%:GKKr+   z/Dict[str, Callable[[LexerConf, Any, Any], Any]]_parser_creatorsc                       \ rS rSr% Sr\\S'   \\S'   \\S'   SS\S\4S jjr	SS jr
S	\4S
 jrSS	\4S jjrSS	\\   4S jjrSrg)rD   &   )r&   r=   r>   r&   r=   rG   Nc                    X l         Xl        X0l        U(       a  X@l        OP[        R                  UR                  5      nUc    SR                  UR                  5      5       eU" XU5      U l        UR                  nSU l	        US;   a  UR                  b   eSU l	        g [        U[        5      (       a.  [        U[        5      (       d   e[        U5      " U5      U l        OT[        U["        5      (       a4  [$        [&        S.U   nU" XR                  UR                  U5      U l        O[)        S5      eUR                  (       a&  [+        U R                   UR                  5      U l        g g )Nz&{} is not supported in standalone modeF)dynamicdynamic_completeTbasic
contextualz&Bad value for lexer_type: {lexer_type})r=   r&   rG   r>   rJ   rA   parser_typeformat
lexer_type
skip_lexerpostlex
isinstancetype
issubclassr   r;   r$   strcreate_basic_lexercreate_contextual_lexer	TypeErrorPostLexConnector)r%   r&   r=   rG   r>   create_parserrU   create_lexers           r(   r)   ParsingFrontend.__init__-   sI   &$  K,001H1HIM , .V.].]++/ , (
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                     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 )r=   startlenr	   )r%   rd   start_declss      r(   _verify_startParsingFrontend._verify_startS   s    =**00K;!#(  *I  KV  W  W GE  **000$SXZ^ZjZjZpZp%qrrr+   r.   c                     U R                   =(       a%    U R                   R                  R                  S5      =(       d    [        nU R                  (       a  U$ UR                  U R                  U5      $ )Nr   )rG   r@   rA   r   rV   	from_textr$   )r%   r.   rH   s      r(   _make_lexer_thread"ParsingFrontend._make_lexer_thread]   sJ    ||H 5 5 9 9- HX[tKCMM$**d,KKr+   c                     U R                  U5      nUc  0 OSU0nU R                  U5      nU R                  R                  " Xd40 UD6$ )Non_error)rg   rk   r>   parse)r%   r.   rd   rn   chosen_startkwstreams          r(   ro   ParsingFrontend.parsea   sM    ))%0#R*h)?((.{{  <<<r+   c                     U R                  U5      nU R                  R                  S:w  a  [        S5      eU R	                  U5      nU R
                  R                  XC5      $ )Nlalrz<parse_interactive() currently only works with parser='lalr' )rg   r=   rS   r	   rk   r>   parse_interactive)r%   r.   rd   rp   rr   s        r(   rv   !ParsingFrontend.parse_interactiveg   sY     ))%0''61$%cdd((.{{,,VBBr+   )r$   r&   rG   r>   r=   rV   r"   )NN)r3   r4   r5   r6   __serialize_fields__r   __annotations__r   r   r)   rg   r[   rk   ro   r   rv   r7    r+   r(   rD   rD   &   sg    @L$J9 $J: $JLLs L=# =Chsm C Cr+   rD   returnNc                 x    [        U S5        [        U[        5      (       d  SSSS.U    n[        XSU -  5        g g )N)ru   r   r   rP   )rQ   rN   rO   )rQ   z9Parser %r does not support lexer %%r, expected one of %%s)r   rX   rY   )r>   r$   expecteds      r(   _validate_frontend_argsr~   q   sL    &34eT""+> 	
 	e'bek'kl #r+   c                 n    0 nU H,  n[        XR                  S 5      nUc  M  XBUR                  '   M.     U$ r"   )r9   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g)r_      c                     Xl         X l        g r"   r$   	postlexer)r%   r$   r   s      r(   r)   PostLexConnector.__init__   s    
"r+   c                 n    U R                   R                  X5      nU R                  R                  U5      $ r"   )r$   r-   r   process)r%   r/   r0   is       r(   r-   PostLexConnector.lex   s)    JJNN;5~~%%a((r+   r   Nr2   rz   r+   r(   r_   r_      s    #)r+   r_   c                 t    U=(       a    UR                   R                  S5      =(       d    [        nU" U 5      $ )Nr   )r@   rA   r   )r&   r>   rW   rG   rH   s        r(   r\   r\      s,    9w''++L9
HjCz?r+   r&   c           	      H   U=(       a    UR                   R                  S5      =(       d    [        nUR                  R                  R                  5        VVs0 s H  u  pVU[        UR                  5       5      _M!     nnnU(       a  UR                  OSnU" XUS9$ s  snnf )Nr   rz   )always_accept)	r@   rA   r   _parse_tablestatesitemslistkeysr   )	r&   r>   rW   rG   rH   idxtr   r   s	            r(   r]   r]      s    >w''++,=>
R?CKQK^K^KeKeKkKkKm)nKm#d1668n*<KmF)n>EW%:%:2Mz?? *os   &Br=   c                     U(       a  UR                   OSnU(       a  UR                  OSnU=(       a    UR                  R                  S5      =(       d    [        nU" XUS9$ )NFr   )rB   strict)rB   r   r@   rA   r   )r&   r=   rG   rB   r   rH   s         r(   create_lalr_parserr      sI    $GMM%E&W^^EF:w''++M:
J{C{77r+   ru   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                  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   z/Dynamic Earley doesn't allow zero-width regexpszBad regexp in token z: zutf-8)regexpsr   pattern	to_regexpr   r
   
ValueErrorr   	use_bytesencode	re_modulecompileg_regex_flags)r%   r&   r   regexpwidths        r(   r)   EarleyRegexpMatcher.__init__   s    %%AYY((*F](03 A:&'XZ[\\ ##w/#-#7#7#?#?H`H`#aDLL  &  T"1666#RSSTs   B66(C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   )r3   r4   r5   r6   r)   r   r7   rz   r+   r(   r   r      s    b :r+   r   c                     U R                   (       a  [        S5      e[        U 5      n[        R                  " XUR
                  40 UD6$ )Nz7Earley's dynamic lexer doesn't support lexer_callbacks.)rC   r
   r   r   Parserr   )r&   r=   rq   earley_matchers       r(   create_earley_parser__dynamicr      s=    TUU(4N>>*>3G3GN2NNr+   c                 4    U R                   UR                  :H  $ r"   )r   rY   )r   tokens     r(   _match_earley_basicr      s    99

""r+   c                 :    [         R                  " X[        40 UD6$ r"   )r   r   r   )r&   r=   rq   s      r(   create_earley_parser__basicr      s    ==2ELLLr+   c                 .   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4X4US.UD6$ )	NresolveFforestrN   rO   Tcomplete_lex)resolve_ambiguityrB   
tree_class)	ambiguityrB   r   r   rU   r   r   )r&   r=   rG   r   rB   r   extrafs           r(   create_earley_parserr      s    ))Y6$GMM%E/6/@/@H/L##+tRVJE	))			"4	4 $n)'Zw8Icmwqvwwr+   c                   0    \ rS rSrSS jrS rS rS rSrg)	CYK_FrontEnd   Nc                     [        U5      U l        [        R                  " UR                  5      U l        UR                  U l        g r"   )r   	_analysisr   r   rulesr>   rC   )r%   r&   r=   rG   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-   r>   ro   
_transform)r%   lexer_threadrd   tokenstrees        r(   ro   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childrenrX   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"   )rC   ruler   )r%   r   s     r(   r   CYK_FrontEnd._apply_callback   s    ~~dii(77r+   )r   rC   r>   r"   )	r3   r4   r5   r6   r)   ro   r   r   r7   rz   r+   r(   r   r      s    /%
*8r+   r   r   r   rS   rU   c                     [        U[        5      (       d   e[        U[        5      (       d   eXl        Xl        [        X#U5      $ r"   )rX   r   r   rS   rU   rD   )rS   rU   r&   r=   rG   s        r(   _construct_parsing_frontendr      sC     j),,,,k:....)&:G<<r+   )r{   Nr"   )4typingr   r   r   r   r   
exceptionsr	   r
   r   utilsr   r   parsers.grammar_analysisr   r$   r   r   r   r   parsersr   r   r   parsers.lalr_parserr   r   r   commonr   r   r   r   r;   rI   rJ   ry   rD   r~   r   r_   r\   r]   r   r   r   r   r   r   r   r   r   rz   r+   r(   <module>r      sR   < < G G . 5 B B ) ) ,  H H
"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xY xZ xU[UbUb x$8 8. 2  &  =#=!=r+   