
                            S r SSKrSSKrSSKrSSKJr  SSKJrJr  SSK	r	SSK
Jr  SSKJr  SSKJrJrJrJrJrJrJr  SS	KJrJrJrJrJrJrJr  SS
KJr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*J+r+J,r,J-r-J.r.J/r/J0r0  SSKJ1r1J2r2  SSK3J4r4J5r5J6r6J7r7J8r8  SSK9J:r:J;r<  SSK=J>r>J?r?J@r@JArAJBrB  \@" SS9rC\R                  R                  \F5      rGS/rHSrISrJ\/" S5      rK0 SS_SS_SS_SS _S!S"_S#S$_S%S&_S'S(_S)S*_S+S,_S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_0 S;S<_S=S>_S?S@_SASB_SCSD_SESF_SGSH_SISJ_SKSL_SMSN_SOSP_SQSR_SSST_SUSV_SWSX_SYSZ_S[S\_ES]S^S_.ErL0 S`Sa_SbSc_SdSe_SfSg_ShSi_SjSk_SlSm_SnS_SoS_SpSq_SrSs_StSu_SLSK_SvSw_SxSy_SzS{_S|S}_S~\J-  SSSSSSSSSSSSS.ErM0 SS/_SSS/_S/ SQ_SS/_SSvS/_SSS/_SSS/_SSxS/_SS/_S/ SQ_SSS/_SS/_SSS/_S/ SQ_S/ SQ_S/ SQ_SSz/_0 SSx/_SSxSz/_SSS/_SS/_SS/_SS/_SSS/_SSS/_SSS/_SSS/_SS/_SS/_S/ SQ_SSS/_SS/_SS/_SSS/_ES/SS/SS/SS|/S.ErNSrOSrP " S S\>5      rQ\C " S S\A5      5       rR " S S\?5      rS " S S\>5      rT " S S\A5      rU " S S\A5      rV " S S\A5      rWS rXS rYS rZ\C " S S\A5      5       r[S r\ " S S\B5      r] " S S\A5      r^S r_ " S S5      r`\" SS5      ra " S S5      rb\b" S\H5      rcS rdS re\C " S S\A5      5       rfS rgS rhSS/4SS/4S/ SQ4S/ GS Q4GSGS/4GSGS/4GS/ GSQ4GS/ GSQ4GS	GS
/4GSGS/4GSGS/4GSGS/4GSGS/4/riGS rjGS&GS jrkGS rlGS rmGS&GS\nS\nGS\\\8\n4      4GS jjroGS'GS jrpGS rqGS rr " GS GS5      rs " GS GS 5      rtGS! ru/ 4GS" jrvGS# rwGS$\nGS\n4GS% jrxg((  z"Parses and creates Grammar objects    N)
namedtuple)copydeepcopy)literal_eval)suppress)ListTupleUnionCallableDictOptionalSequence   )bfsloggerclassify_boolis_id_continueis_id_startbfs_all_uniquesmall_factors)TokenTerminalDef
PatternStr	PatternRE)ParseTreeBuilder)ParsingFrontend)	LexerConf
ParserConf)RuleOptionsRuleTerminalNonTerminalSymbolTOKEN_DEFAULT_PRIORITY)classify
dedup_list)GrammarErrorUnexpectedCharactersUnexpectedToken
ParseErrorUnexpectedInput)TreeSlottedTree)TransformerVisitorv_argsTransformer_InPlaceTransformer_NonRecursiveT)inlinegrammarsz.larkimslux	__empty__.DOT,COMMA:COLON;	SEMICOLON+PLUS-MINUS*STAR/SLASH\	BACKSLASH|VBAR?QMARK!BANG@AT#HASH$DOLLAR%PERCENT^
CIRCUMFLEX&	AMPERSAND_
UNDERSCORE<LESSTHAN>MORETHAN=EQUAL"DBLQUOTE'QUOTE`	BACKQUOTE~TILDE(LPAR)RPAR{LBRACE}RBRACE[LSQB]RSQB
NEWLINEz
CRLFTABSPACE)	 _LPARz\(_RPARz\)_LBRAz\[_RBRAz\]_LBRACEz\{_RBRACEz\}OPz[+*]|[?](?![a-z_])_COLON_COMMA_ORz\|_DOTz\.(?!\.)_DOTDOTz\.\.RULE_MODIFIERSz(!|![?]?|[?]!?)(?=[_a-z])RULEz_?[a-z][_a-z0-9]*TERMINALz_?[A-Z][_A-Z0-9]*STRINGz"(\\"|\\\\|[^"\n])*?"i?z/(?!/)(\\/|\\\\|[^/])*?/[%s]*z(\r?\n)+\s*z(\r?\n)+\s*\|z[ \t]+z\s*//[^\n]*|\s*#[^\n]*z\\[ ]*\nz->z%ignorez	%overridez%declarez%extendz%importz[+-]?\d+)REGEXP_NL_NL_ORWSCOMMENTrH   _TO_IGNORE	_OVERRIDE_DECLARE_EXTEND_IMPORTNUMBERstart_list_itemz_list _item)ruletermignoreimportdeclareoverrideextendr   r   zBrule_modifiers RULE template_params priority _COLON expansions _NLrule_modifiers priorityz_DOT NUMBERtemplate_paramsz _LBRACE _template_params _RBRACE_template_paramsz_template_params _COMMA RULE
expansions_expansions)aliasz_expansions _OR aliasz_expansions _NL_OR aliasz?aliaszexpansion _TO nonterminal	expansion
_expansionz_expansion exprz?expr)atomzatom OPzatom TILDE NUMBERz atom TILDE NUMBER _DOTDOT NUMBERz?atom)z_LPAR expansions _RPARmaybevaluer   )terminalnonterminalliteralrangetemplate_usager   r   z?namez?symbolr   z_LBRA expansions _RBRAr   zSTRING _DOTDOT STRINGr   z*nonterminal _LBRACE _template_args _RBRACE_template_argsz_template_args _COMMA valuer   zTERMINAL _COLON expansions _NLz*TERMINAL _DOT NUMBER _COLON expansions _NLr   z_OVERRIDE rulez_OVERRIDE termr   z_EXTEND rulez_EXTEND termr   z_IGNORE expansions _NLr   z_DECLARE _declare_args _NLr   )z_IMPORT _import_path _NLz._IMPORT _import_path _LPAR name_list _RPAR _NLz!_IMPORT _import_path _TO name _NL_import_path
import_lib
import_rel_import_argsz_DOT _import_argsnamez_import_args _DOT name
_name_listz_name_list _COMMA namesymbolz_declare_args symbolr   )	name_listr   _declare_argsr      2   c                   2    \ rS rSrS rS rS rS rS rSr	g)	FindRuleSize   c                     Xl         g Nkeep_all_tokens)selfr   s     $lib/third_party/lark/load_grammar.py__init__FindRuleSize.__init__   s    .    c                     [        U[        5      (       a   UR                  R                  S5      (       + $ [        U[        5      (       a$  U R
                  =(       d    UR                  (       + $ U[        L a  g U5       e)Nr[   F)
isinstancer"   r   
startswithr!   r   
filter_out_EMPTY)r   syms     r   _will_not_get_removed"FindRuleSize._will_not_get_removed   s`    c;''xx**3///c8$$''=s~~+==&=cur   c              #      #    U HQ  n[        U[        5      (       a  Uv   M  [        U[        5      (       a  U R                  U5      (       a  SOSv   MQ   e   g 7f)Nr   r   )r   intr#   r   )r   argsas      r   _args_as_intFindRuleSize._args_as_int   sK     A!S!!Av&&55a88aa?u s   AAc                 6    [        U R                  U5      5      $ r   )sumr   r   r   s     r   r   FindRuleSize.expansion       4$$T*++r   c                 6    [        U R                  U5      5      $ r   )maxr   r   s     r   r   FindRuleSize.expansions   r   r   r   N)
__name__
__module____qualname____firstlineno__r   r   r   r   r   __static_attributes__ r   r   r   r      s    /,,r   r   c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)EBNF_to_BNF   c                 J    / U l         0 U l        SU l        SU l        S U l        g )Nanonr   )	new_rulesrules_cacheprefixirule_optionsr   s    r   r   EBNF_to_BNF.__init__   s'     r   c                 f    SU R                   XR                  4-  nU =R                  S-  sl        U$ )Nz
__%s_%s_%dr   )r   r   )r   innernew_names      r   
_name_ruleEBNF_to_BNF._name_rule   s+    4;;vv">>!r   c                     [        U5      nU R                  R                  X#U R                  45        X@R                  U'   U$ r   )r"   r   appendr   r   )r   keyr   r   ts        r   	_add_ruleEBNF_to_BNF._add_rule   s<    t1B1BCD !r   c           
           U R                   U   $ ! [         aU    U R                  U5      n[        U5      n[	        S[	        SU/5      [	        SXB/5      /5      nU R                  X#U5      s $ f = fNr   r   )r   KeyErrorr   r"   STr   )r   type_exprr   r   trees         r   _add_recurse_ruleEBNF_to_BNF._add_recurse_rule   s{    		8##D)) 	8u-HH%Al;';	*% D >>$$77	8s    AA0/A0c           
          XX44n U R                   U   $ ! [         aL    U R                  SX4-  5      n[        S[        SU/U-  U/U-  -   5      /5      nU R	                  XVU5      s $ f = f)a  Generate a rule that repeats target ``a`` times, and repeats atom ``b`` times.

When called recursively (into target), it repeats atom for x(n) times, where:
    x(0) = 1
    x(n) = a(n) * x(n-1) + b

Example rule when a=3, b=4:

    new_rule: target target target atom atom atom atom

zrepeat_a%d_b%dr   r   )r   r  r   r  r   )r   r   btargetr   r   r   r  s           r   _add_repeat_ruleEBNF_to_BNF._add_repeat_rule  s     V"	7##C(( 	7'71&'@AHlRfX\TFQJ5N%O$PQD>>#66	7s    AA+*A+c                    XX5S4n U R                   U   $ ! [         a    U R                  SX4-  5      n[        S[	        U5       Vs/ s H  n[        SU/U-  U/-   5      PM     Os  snf sn[	        U5       Vs/ s H  n[        SU/U-  U/U-  -   5      PM     Os  snf sn-   5      n	U R                  XgU	5      s $ f = f)a  Creates a rule that matches atom 0 to (a*n+b)-1 times.

When target matches n times atom, and target_opt 0 to n-1 times target_opt,

First we generate target * i followed by target_opt, for i from 0 to a-1
These match 0 to n*a - 1 times atom

Then we generate target * a followed by atom * i, for i from 0 to b-1
These match n*a to n*a + b-1 times atom

The created rule will not have any shift/reduce conflicts so that it can be used with lalr

Example rule when a=3, b=4:

    new_rule: target_opt
            | target target_opt
            | target target target_opt

            | target target target
            | target target target atom
            | target target target atom atom
            | target target target atom atom atom

optzrepeat_a%d_b%d_optr   r   )r   r  r   r  r   r   )
r   r   r  r  
target_optr   r   r   r   r  s
             r   _add_repeat_opt_rule EBNF_to_BNF._add_repeat_opt_rule  s    2 V5)		7##C(( 	7';qf'DEHlDI!H%DLq;
j\ 9:H% AFa@H1;
dVAX 56% D
 >>#66	7s'    2C A'&C ;!B!C ?C c                    U[         :  a7  [        S[        X#S-   5       Vs/ s H  n[        SU/U-  5      PM     sn5      $ Un[        U[        5       H  u  pgU R                  XgXQ5      nM     X2:X  a  U$ X2-
  S-   n[        U[        5      n	Un
[        S/ 5      nU	SS  H*  u  pgU R                  XgXU5      nU R                  XgX5      n
M,     U	S   u  pgU R                  XgXU5      n[        S[        SU/U/-   5      /5      $ s  snf )z\Generates a rule tree that repeats ``rule`` exactly between ``mn`` to ``mx`` times.
        r   r   r   N)REPEAT_BREAK_THRESHOLDr  r   r   SMALL_FACTOR_THRESHOLDr  r  )r   r   mnmxn	mn_targetr   r  diffdiff_factorsdiff_targetdiff_opt_targets               r   _generate_repeatsEBNF_to_BNF._generate_repeats:  s)    &&l%PRYZTZJ[$\J[QRdVaZ%@J[$\]] 	!"&<=DA--aIDI >8w{$T+AB["- "%DA"77k\`aO//kHK & B33A+X\],K)?P1P!Q RSS1 %]s   D
c                    UR                   S:X  a  [        S/ 5      n[        SX/5      $ UR                   S:X  a  U R                  SU5      $ UR                   S:X  a*  U R                  SU5      n[        SU[        S/ 5      /5      $ UR                   S:X  a^  [        U5      S	:X  a  [	        US
   5      =pgO-[        [        U5      u  pgXv:  d  US
:  a  [        SXU4-  5      eU R                  XU5      $  U5       e)NrK   r   r   r?   plusrC   starri   r   r   'Bad Range for %s (%d..%d isn't allowed))r   r  r  lenr   mapr'   r   )r   r   opr   emptyr   r  r  s           r   r  EBNF_to_BNF.exprY  s    88s?{B'ElTM22XX_
 ))&$77XX_
 --fd;HlXr+r/B$CDDXX_4yA~d1g,&RS$7b1f&'PTX^`Sa'abb))$B77bur   c                     U R                   =(       a    U R                   R                  n[        U5      R                  U5      n[	        S[
        /U-  5      n[	        SX/5      $ )Nr   r   )r   r   r   	transformr  r   )r   r   r   	rule_sizer)  s        r   r   EBNF_to_BNF.maybev  sU    ++Q0A0A0Q0Q 1;;DA	;9 45,..r   )r   r   r   r   r   N)r   r   r   r   r   r   r   r  r  r  r   r  r   r   r   r   r   r   r      s1    !

87(#7JT>:/r   r   c                   6    \ rS rSr\S 5       rS rS rS rSr	g)SimplifyRule_Visitori}  c                     U R                  U R                  5      (       a$   U R                  U R                  5      (       a  M#  g g r   )expand_kids_by_datadata)r  s    r   _flattenSimplifyRule_Visitor._flatten  s1    &&tyy11 &&tyy11r   c                    U R                  U5        [        UR                  5       H  u  p#[        U[        5      (       d  M  UR
                  S:X  d  M.  SUl        [        UR                  5       VVVs/ s HM  nU R                  [        S[        UR                  5       VVs/ s H  u  pVX%:X  a  UOUPM     snn5      5      PMO     snnnUl        U R                  U5          g    g s  snnf s  snnnf r  )	r4  	enumeratechildrenr   r,   r3  r&   visitr  )r   r  r   childoptionjothers          r   r   SimplifyRule_Visitor.expansion  s     	d!$--0HA%&&5::+E(	 0:%../I!K/IV "&B{MVW[WdWdMe=gMe HIvVSX=XMe=g -h "i/I!K d# 1=g !Ks   5/C/
$C)9C/
)C/
c                     UR                   u  p#UR                  S:X  aL  / nUR                   S   R                    H  nUR                  [        SXS/5      5        M!     SUl        XAl         g g )Nr   r   r   )r8  r3  r   r  )r   r  r   
alias_namealiasesr:  s         r   r   SimplifyRule_Visitor.alias  s_    ==99$Gq)22r'E+>?@ 3$DI#M %r   c                     U R                  U5        [        [        UR                  5      5      [        UR                  5      :w  a  [	        UR                  5      Ul        g g r   )r4  r&  setr8  r&   )r   r  s     r   r   SimplifyRule_Visitor.expansions  sB    ds4==!"c$--&88&t}}5DM 9r   r   N)
r   r   r   r   staticmethodr4  r   r   r   r   r   r   r   r0  r0  }  s#     ,$6r   r0  c                   &    \ rS rSrS rS rS rSrg)RuleTreeToTexti  c                     U$ r   r   )r   xs     r   r   RuleTreeToText.expansions  s    r   c                 
    US 4$ r   r   )r   symbolss     r   r   RuleTreeToText.expansion  s    }r   c                 D    Uu  u  p#nUb
   XBSU45       eX$R                   4$ )NrA   r   )r   rJ  r   _aliasr   s        r   r   RuleTreeToText.alias  s2    %&"U~>#v>>~**$$r   r   N)r   r   r   r   r   r   r   r   r   r   r   rH  rH    s    %r   rH  c                   .    \ rS rSrSrS r\S 5       rSrg)PrepareAnonTerminalsi  zfCreate a unique list of anonymous terminals. Attempt to give meaningful names to them when we add themc                     Xl         U R                    Vs1 s H  o"R                  iM     snU l        U Vs0 s H  o"R                  U_M     snU l        SU l        S U l        g s  snf s  snf Nr   )	terminalsr   term_setpatternterm_reverser   r   )r   rW  tds      r   r   PrepareAnonTerminals.__init__  sW    "+/>>:>R>:6?@iZZ^i@  ;@s
   A#A(c                    UR                   nXR                  ;   a?  UR                  U R                  U   R                  R                  :w  a  [	        SU-  5      eS n[        U[        5      (       a   U R                  U   R                  nOE[        U[        5      (       a)  XR                  ;   a  U R                  U   R                  nO U5       eUc$  SU R                  -  nU =R                  S-  sl        X0R                  ;  a`  XR                  ;  d   eU R                  R!                  U5        [#        X15      nX@R                  U'   U R$                  R'                  U5        U R(                  (       a  U R(                  R*                  (       a  SO[        U[        5      n[-        X5S9$ ! [         a     [        U   nOh! [         a[    U(       aQ  [        U5      (       aA  [        US   5      (       a.  UR                  5       U R                  ;  a  UR                  5       n Of = fX0R                  ;   a  S n GNnf = f)Nz+Conflicting flags for the same terminal: %sr   Fz	__ANON_%dr   r   )r   rZ  flagsrY  r'   r   r   r   r  _TERMINAL_NAMESr   r   upperrX  r   r   addr   rW  r   r   r   r!   )r   pr   	term_nametermdefr   s         r   rY  PrepareAnonTerminals.pattern  s   !!!agg1B1B11E1M1M1S1S&SMPQQRR	a$$% --a055	 9%%%%% --a055	!O5#dff,IFFaKFMM)-----MMi(!)/G#*a NN!!'*"//D4E4E4U4UU[efgis[t
	99=  	%2 / 6I 2!6!6;uQx;P;PUZU`U`UbjnjwjwUw$)KKM	2 - $I	%s7   3F/ /
I:	GIA"H)&I(H))I I)r   r   rZ  rX  rW  N)	r   r   r   r   __doc__r   inline_argsrY  r   r   r   r   rT  rT    s    p! ): ):r   rT  c                   *    \ rS rSrSrS rS rS rSrg)_ReplaceSymbolsi  zHelper for ApplyTemplatesc                     0 U l         g r   namesr   s    r   r   _ReplaceSymbols.__init__  s	    
r   c                     [        U5      S:X  aQ  [        US   [        5      (       a9  US   R                  U R                  ;   a  U R                  US   R                     $ U R                  SUS 5      $ )Nr   r   r   )r&  r   r#   r   rm  __default__)r   cs     r   r   _ReplaceSymbols.value  s\    q6Q;:adF33!		TZZ8O::adii((D11r   c                     US   R                   nX R                  ;   a'  U R                  SU R                  U   /USS  -   S 5      $ U R                  SUS 5      $ )Nr   r   r   )r   rm  rp  )r   rq  r   s      r   r   _ReplaceSymbols.template_usage  s]    tyy::##$4tzz$7G6H1QR56PRVWW 0!T::r   rl  N)	r   r   r   r   rg  r   r   r   r   r   r   r   rj  rj    s    #2
;r   rj  c                   $    \ rS rSrSrS rS rSrg)ApplyTemplatesi   zIApply the templates, creating new rules that represent the used templatesc                 L    Xl         [        5       U l        [        5       U l        g r   )	rule_defsrj  replacerrD  created_templates)r   rx  s     r   r   ApplyTemplates.__init__  s    "')!$r   c                 ,  ^	 US   R                   m	USS  nT	< SSR                  S U 5       5      < S3nX0R                  ;  a  U R                  R                  U5        U	4S jU R                   5       u  u  pEpg[        U5      [        U5      :X  d   U5       e[        U5      n[        [        XR5      5      U R                  l
        U R                  R                  U5        U R                  R                  U/ U[        U5      45        [        U5      $ )Nr   r   ro   r9   c              3   8   #    U  H  oR                   v   M     g 7fr   rP  ).0r   s     r   	<genexpr>0ApplyTemplates.template_usage.<locals>.<genexpr>  s     0FAs   rq   c              3   <   >#    U  H  oS    T:X  d  M  Uv   M     g7f)r   Nr   )r~  r   r   s     r   r  r    s     +V~!1QUAA~s   	)r   joinrz  rb  rx  r&  r   dictzipry  rm  r,  r   r"   )
r   rq  r   result_name_nparamsr  optionsresult_treer   s
            @r   r   ApplyTemplates.template_usage  s    tyyu"&0F0F(FG444""&&{3+Vt~~+V)'Rv;#d)+1T1+"4.K"&s6'8"9DMMMM##K0NN!!;K'AR"ST;''r   )rz  ry  rx  N)r   r   r   r   rg  r   r   r   r   r   r   rv  rv     s    S'
(r   rv  c                 .   ^  [        U 4S jU 5       5      $ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr   )rfind)r~  rq  ss     r   r  _rfind.<locals>.<genexpr>  s     +7aqwwqzz7s   !)r   )r  choicess   ` r   _rfindr    s    +7+++r   c                 p   Sn[        U 5      nU H6  nX-  nUS:X  d  M   [        U5      nUS:X  a  US-  nOUS;  a  US-  nX-  nM8     UR	                  SS5      R	                  SS	5      nS
U-  n [        U5      n U $ ! [         a    [        SU -  5      ef = f! [         a  n[        X5      eS nAff = f)Nr   rG   z/Literal ended unexpectedly (bad escaping): `%r`\\Uuxnftrz\"rc   re   z\'z	u'''%s''')iternextStopIterationr'   replacer   SyntaxError)r  wr   r  n2to_evales          r   eval_escapingr    s    
AQA	9Z!W TzV9$T	GA  	
		%%%c51AAoG!! H ! Z"#TWX#XYYZ  !1  !s#   A?2B ?B
B5%B00B5c                    [        U [        5      (       d   eU R                  n[        US5      S-   nUS:  d   eXS  n[	        S U 5       5      (       d   U5       eU R
                  S:X  a  SU;   a  [        S5      eU R
                  S:X  a  SU;   a  S	U;  a  [        S
5      eUS U nUS   US   :X  a	  US   S;   d   eUSS n[        U5      nUS:X  a  [        SU -  5      eU R
                  S:X  a&  UR                  SS5      n[        XSU R                  S9$ U R
                  S:X  a  [        XSU R                  S9$  S5       e)Nz/"r   r   c              3   2   #    U  H  o[         ;   v   M     g 7fr   )	_RE_FLAGS)r~  fs     r   r  &_literal_to_pattern.<locals>.<genexpr>;  s     -u!I~us   r   rw   z*You cannot put newlines in string literalsr   rJ  zLYou can only use newlines in regular expressions with the `x` (verbose) flagr  z"/r   z$Empty terminals are not allowed (%s)r  rG   )rawz:Invariant failed: literal.type not in ["STRING", "REGEXP"])r   r   r   r  alltyper'   r  r  r   r   )r   v
flag_startr_  rJ  r  s         r   _literal_to_patternr  5  sV   gu%%%%A4"J>>kNE-u---4u4-||xDAIGHH||xDAI#U2B 9 : 	: 	
+:AQ41R5=QqTT\))	!BAaABwAGKLL||xIIfd#!66		!w}}55RRRur   c                        \ rS rSrS rS rSrg)PrepareLiteralsiV  c                 .    [        S[        U5      /5      $ )NrY  )r  r  )r   r   s     r   r   PrepareLiterals.literalX  s    )1':;<<r   c                 8   UR                   UR                   s=:X  a  S:X  d   e   eUR                  SS nUR                  SS n[        [        U5      5      [        [        U5      5      s=:X  a  S:X  d   e   eSU< SU< S3n[	        S[        U5      /5      $ )Nr   r   r  rs   rA   ru   rY  )r  r   r&  r  r  r   )r   r   endregexps       r   r   PrepareLiterals.range[  s    zzSXX111111Ab!ii"o='(Cc0B,CHqHHHHH#S))i/011r   r   N)r   r   r   r   r   r   r   r   r   r   r  r  V  s    =2r   r  c                     [        U S5      $ )Nr   )r   )r  	flags_sets     r   _make_joined_patternr  d  s    VR  r   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TerminalTreeToPatternig  c                     Uu  nU$ r   r   )r   psrc  s      r   rY  TerminalTreeToPattern.patternh  s    r   c                     U(       d   e[        U5      S:X  a  US   $ SR                  S U 5       5      n[        X! Vs1 s H  o3R                  iM     sn5      $ s  snf )Nr   r   r   c              3   @   #    U  H  oR                  5       v   M     g 7fr   	to_regexpr~  r   s     r   r  2TerminalTreeToPattern.expansion.<locals>.<genexpr>q  s     7A++--   )r&  r  r  r_  )r   itemsrY  r   s       r   r   TerminalTreeToPattern.expansionl  sR    uu:?8O''777#Gu-Eu!ggu-EFF-Es   A
c                     [        U5      S:X  a  US   $ UR                  S S9  SSR                  S U 5       5      -  n[        X! Vs1 s H  o3R                  iM     sn5      $ s  snf )Nr   r   c                 `    U R                   * U R                  * [        U R                  5      * 4$ r   )	max_width	min_widthr&  r   rJ  s    r   <lambda>2TerminalTreeToPattern.expansions.<locals>.<lambda>z  s!    !++|c!''l] Kr   )r   z(?:%s)rI   c              3   @   #    U  H  oR                  5       v   M     g 7fr   r  r  s     r   r  3TerminalTreeToPattern.expansions.<locals>.<genexpr>|  s     &Cd{{}}dr  )r&  sortr  r  r_  )r   expsrY  r   s       r   r    TerminalTreeToPattern.expansionst  sa    t9>7N 			K	Lchh&Cd&CCD#Gt-Dt!ggt-DEE-Ds   	A%
c                 :   US S u  p#US:X  aR  [        U5      S:X  a  S[        US   5      -  nOB[        [        USS  5      u  pEXT:  a  [        SX$U4-  5      eSXE4-  nO[        U5      S:X  d   e[	        SUR                  5       < SU< 3UR                  5      $ )	N   ri      z{%d}r%  z{%d,%d}z(?:rm   )r&  r   r'  r'   r   r  r_  )r   r   r   r(  r  r  s         r   r  TerminalTreeToPattern.expr  s    !H	94yA~c$q'l*S$qr(+7&'PTY_aSb'bcc")t9>!>u'8"=u{{KKr   c                 ,    U R                  US/-   5      $ )NrK   )r  )r   r  s     r   r   TerminalTreeToPattern.maybe  s    yy&&r   c                     [        S5      e)NzBAliasing not allowed in terminals (You used -> in the wrong place))r'   )r   r   s     r   r   TerminalTreeToPattern.alias  s    _``r   c                     US   $ rV  r   r   r  s     r   r   TerminalTreeToPattern.value  s    tr   r   N)r   r   r   r   rY  r   r   r  r   r   r   r   r   r   r   r  r  g  s)    G	FL'ar   r  c                       \ rS rSrS rSrg)ValidateSymbolsi  c                 H    Uu  n[        U[        [        45      (       d   eU$ r   )r   r,   r#   r  s     r   r   ValidateSymbols.value  s%    !dF^,,,,r   r   N)r   r   r   r   r   r   r   r   r   r  r    s    r   r  c                 6    [        S5      R                  U 5      $ )z#Deepcopy tree `t` without recursionF)r2   r,  r   s    r   nr_deepcopy_treer    s    #E*44Q77r   c            	           \ rS rSr% \\\\\\4   4      \	S'   \\\\\S4   \\
4      \	S'   \\   \	S'   S\\\\\S4   \\
4      S\\\\\\4   4      S\\   SS4S jrS	 rS
rg)Grammari  	term_defs.rx  r   returnNc                 (    X l         Xl        X0l        g r   )r  rx  r   )r   rx  r  r   s       r   r   Grammar.__init__  s    ""r   c                   ^ ^^,^- T R                    VVVs/ s H  u  nu  pEU[        U5      U44PM     nnnnT R                   VVVVs/ s H  u  p5pGX5[        U5      U4PM     nnnnnU HZ  u  n	u  pU
c  M  [        U
R	                  S5      5      n[        U5      S:X  d  M8  US   R                  (       a  MN  [        SU	-  5      e   [        5       [        5       -  nU V	V
Vs/ s H,  u  n	u  pU
(       d  M  [        XR                  U
5      U5      PM.     nn
n	n[        U5      n[        5       [        5       -  U-  nU[        U5      -  n[        5       n/ nSnU[        U5      :  a  UU   u  n	nnnUS-  n[        U5      S:w  a  M/  U(       a  UR                   (       a	  [#        SS9OS nUUl        U	Ul        UUl        UR                  U5      nUR                  U5      nUR)                  U	UU45        U[        U5      :  a  M  UUR*                  -  n[        U5      [        U V	VVs1 s H	  u  n	nnU	iM     snnn	5      :X  d   S5       e[-        5       n[/        5       n/ nU GHc  nUu  n	nnUR1                  U5        UR                  U5      n[3        U5       GH'  u  nu  nn U (       a*  U	R5                  S5      (       a  [        S	U	< S
U < S35      eU V!s/ s H  n!U![6        :H  PM     n"n![9        U"5      (       aB  [;        U5      =(       d
    [#        5       n#U"U#l        U V!s/ s H  n!U![6        :w  d  M  U!PM     nn!OUn#U HP  n$[?        U$[@        5      (       d   eU$RB                  (       d  M-  U#(       d  M6  U#R                   (       d  MI  SU$l"        MR     [G        [I        U	5      UUU U#5      n%UR)                  U%5        GM*     GMf     [        [K        U5      5      [        U5      :w  a  [M        US 5      n&U&RO                  5        H  n'[        U'5      S:  d  M  U'S   RP                  (       a$  [        SSRS                  S U' 5       5      -  5      e[        U' V(s1 s H&  n(U(RT                  U(RV                  U(RX                  4iM(     sn(5      [        U'5      :X  a  M   e   [        [K        U5      5      n [        U5      n)U V(V*s1 s HB  n(U(RP                    H.  n*[?        U*[H        5      (       d  M  U*U(RZ                  :w  d  M,  U*iM0     MD     sn*n(m,T,U V*s1 s H  n*[I        U*5      iM     sn*-  m,[]        UU,4S j5      u  nn+U+ H  n([^        R`                  " SU(5        M     [        U5      U):X  a  OM  TS:w  a  U V(Vs1 s H:  n(U(RP                    H&  n[?        U[b        5      (       d  M  URd                  iM(     M<     snn(m-[]        UU UU-4S j5      u  nn+U+(       a1  [^        R`                  " SU+ Vs/ s H  oDRd                  PM     sn5        UUT Rf                  4$ s  snnnf s  snnnnf s  snn
n	f s  snnn	f s  sn!f s  sn!f s  sn(f s  sn*n(f s  sn*f s  snn(f s  snf )Nr   r   r   zTerminals cannot be empty (%s)Tr   zWhoops, name collisionr[   zRule za is marked for expansion (it starts with an underscore) and isn't allowed to have aliases (alias=rm   Fc                     U $ r   r   r  s    r   r  !Grammar.compile.<locals>.<lambda>  s    Ar   zXRules defined twice: %s

(Might happen due to colliding expansion of optionals: [] or ?)r   c              3   ,   #    U  H
  nS U-  v   M     g7f)z
  * %sNr   r  s     r   r  "Grammar.compile.<locals>.<genexpr>	  s     4RTZ!^Ts   c                 "   > U R                   T;   $ r   )origin)r
used_ruless    r   r  r    s    QXXYcMcr   zUnused rule: %srC   c                    > U R                   T;   =(       d/    U R                   TR                  ;   =(       d    U R                   T;   $ r   )r   r   )r   r   terminals_to_keep
used_termss    r   r  r  $  sO    166ZCW  DP[\[a[aeiepep[p  DPtutztz  P  uP  DPr   zUnused terminals: %s)4r  r  rx  list	find_datar&  r8  r'   r  r  r   r,  rT  r  rv  r   r   r   r   r   r   r   rH  r0  r9  r7  r   r   anyr   empty_indicesr   r#   is_termr   r    r"   rD  r%   valuesr   r  r   orderr  r  r   r   debugr!   r   r   ).r   r   r  r  r   rc  r  orx  r   	term_treer   r   transformerrW  anon_tokens_transfebnf_to_bnfrulesr   r  	rule_treer  r   r  res_t_orule_tree_to_textsimplify_rulecompiled_rulesrule_contentr   r   rJ  r  exp_optionsr   r   
duplicatesdupsr  rq  r  unusedr  r  s.   ` `                                         @@r   compileGrammar.compile  s    EINNSNyq&1a*1-q12N	SFJnnUn
aa,Q/3n	U ,5'D'9 i11+>?J:!#JqM,B,B,B"#Cd#JKK ,5 &'*?*AA8AP8A44	Y S['<'<Y'GR8A 	 P 2)<%'/*;;>PP 	~i00 "m#i. /8|,D&)WFA6{a@GGLcLc;t<imL'3K$!%K.:+((3D''-CLL$W-. #i.  	&&&5zS5!A5<4R$5!ABB\D\\B +,,.!L".D$%*44T:J)2:)>%%IuT__S11&  X\  ^c  (d  e  e4= >IqFI >}%%"&w-"@;=K0=K-,5 CIqFII CI")K$C%c62222{{{{{{7R7R7R). % K-y!UKP%%d+# *? "2 s>"#s>'::!.+>J"))+t9q=Aw((*  ,H-/WW4RT4R-R,S T T tLt!!''199 =tLMQTUYQZZZZ , "#n"56N N#A%3 /^%&[[)![9  !"QXX %0 ^ /J 595a;q>599J%2>Cc%d"NF.2 >"a'  #*8 =.Q*+++Q$.q($; !!&&*5 !. =J !.i  :P  !QIv3f5Mffff5MN.$++55o TU PB "B  !? !D*  M/ :=
 6Ns_   X*X1
#X97X9+Y Y(Y:Y!-Y
)Y:Y
YY	)Y!6Y!?Y'
)r   rx  r  )r   r   r   r   r   r	   strr,   r   __annotations__r   r   r  r   r   r   r   r  r    s    E#uT3Y//011E#uS#XkABCCI$uS%S/4-T'U"V cghmnqsxy}  @C  zC  tD  oD  iE  dF   PT  UX  PY   ^b 
z6r   r  PackageResourcezpkg_name pathc                       \ rS rSr% Sr\\S'   \\   \S'   SS\S\\   SS4S jjrS r	S	\
S\\4   S
\S\\\4   4S jrSrg)FromPackageLoaderi.  a  
Provides a simple way of creating custom import loaders that load from packages via ``pkgutil.get_data`` instead of using `open`.
This allows them to be compatible even from within zip files.

Relative imports are handled, so you can just freely use them.

pkg_name: The name of the package. You can probably provide `__name__` most of the time
search_paths: All the path that will be search on absolute imports.
pkg_namesearch_pathsr  Nc                     Xl         X l        g r   r  r  )r   r  r  s      r   r   FromPackageLoader.__init__<  s     (r   c                 l    [        U 5      R                  < SU R                  < SU R                  < S3$ )Nrk   , rm   )r  r   r  r  r   s    r   __repr__FromPackageLoader.__repr__@  s#    #Dz22DMM4CTCTUUr   	base_pathgrammar_pathc                    Uc  U R                   nOF[        U[        5      (       a  UR                  U R                  :w  a
  [	        5       eUR
                  /nS nU Hv  n[        R
                  R                  XR5      n [        R                  " U R                  U5      n[        U R                  U5      U(       a  UR                  5       4s  $ S4s  $    [	        S5      Ue! [         a  nUn S nAM  S nAff = f)Nr   z"Cannot find grammar in given paths)r  r   r  r  IOErrorpathosr  pkgutilget_datadecode)	r   r  r  to_tryerrr!  	full_pathtextr  s	            r   __call__FromPackageLoader.__call__C  s    &&F i99Y=O=OSWS`S`=`inn%FDT8Ib(/(8(8	(R
 't}}i@TX4;;=aa^`aa  :;D  s   >!C!!
C8+C33C8r  ))r   )r   r   r   r   rg  r  r  r   r   r  r
   r  r	   r*  r   r   r   r   r  r  .  st     M3-) )HSM )T )VE%c?(B"C ESV E[`apruau[v Er   r  larkc           	          SnU R                  5        H  u  p#Uc  M
  UR                  S5       H  nUR                  u  n[        U[        5      (       a  [        SU< SU< S35      e[        U[        5      (       a&   XR                     nUc   eXdR                  S'   SnMu  [        U[        5      (       a  M   e   M     U(       d  OM  U R                  5        Hg  u  p'U(       d  M  UR                   HI  nUR                  5        V	s/ s H  n	[        U	5      PM     n
n	[        U5      U
;   d  M=  [        S	U-  5      e   Mi     g ! [         a    [        SUR                  -  5      ef = fs  sn	f )
NTFr   z'Rules aren't allowed inside terminals (z in rm   z!Terminal used but not defined: %sr   zNRecursion in terminal '%s' (recursion is only allowed in rules, not terminals))r  r  r8  r   r"   r'   r!   r   r  r,   iter_subtreesid)	term_dictchangedr   
token_treeexpitem
term_valuer   r:  rJ  idss              r   resolve_term_referencesr7  _  s\     ) 1D!!++G4dK00&]acg'hiih//\%.yy%9
 &111&0LLO"G%dD1111 5 !2" ) ,  oo'
4&+&9&9&;<&;r!u&;<d8s?&'wz~'~ ' ( $ \*+NQUQZQZ+Z[[\ =s   ?E	E/	#E,c                     [        U [        5      (       d   eU R                  5       (       a  [        X R	                  S5      S9$ [        U 5      $ Nr[   r^  )r   r  isupperr!   r   r"   r  s    r   symbol_from_strcaser<    s=    a89		8A,,s"34WUVWr   c                        \ rS rSrS rS rSrg)PrepareGrammari  c                 F    [        [        U5      UR                  S5      S9$ r9  )r!   r  r   r   r   s     r   r   PrepareGrammar.terminal  s    D	dooc.BCCr   c                 ,    [        UR                  5      $ r   )r"   r   r@  s     r   r   PrepareGrammar.nonterminal  s    4::&&r   r   N)r   r   r   r   r   r   r   r   r   r   r>  r>    s    D'r   r>  c                     U R                   S:X  d   eU R                  S5       VVs1 s H)  nUR                  S 5        H  nUR                  iM     M+     snn$ s  snnf )Nr   r   c                 "    [        U [        5      $ r   )r   r#   r  s    r   r  $_find_used_symbols.<locals>.<lambda>  s    Z6-Br   )r3  r  scan_valuesr   )r  rJ  r   s      r   _find_used_symbolsrH    sa    99$$$ NN;7 E7q]]#BC FFC 7 E E Es   0Ac                  ^    [         R                  $ ! [         Ga    [        R	                  5        V Vs/ s H  u  p[        U [        U5      5      PM     Os  snn f nn n[        R	                  5        V Vs/ s H/  u  pU R                  S5      U[        U R                  S5      S94PM1     Os  snn f nn nU VVVVVV	s/ s Ha  u  pVn[        U5        HK  u  p[        [        U5      UR                  5        V	s/ s H  n	[        U	5      PM     Os  sn	f sn	US U5      PMM     Mc     O
s  sn	nnnnnf nnnnnnn	[!        U["        5      R%                  5       n
SS Kn[)        X+/ SQ5      n[+        XJS/5      nSUl        SUl        [1        XS 5      [         l        [         R                  s $ f = f)NrK   )expand1r   )r   r   rH   r   basiclalr)_get_parsercacheAttributeError	TERMINALSr  r   r   RULESlstripr   r   r7  r    r"   splitr<  r   r  create_callbackrer   r   
lexer_typeparser_typer   )r   r   rW  rJ  r   r  xsr  r   r  callbackrU  
lexer_confparser_confs                 r   rM  rM    sm   !    !LUOOL]^L][T[y'78L]^	^  %{{}.,GD ++c"A{4??3;O'PQ,. . "'B B!&XQA9R=41 k!nqwwy&Qy!':1'=y&QSTVZ\]^3@ _!&B B $E2.>>@y.LM
 7)< '
"(+JTJ   !s?    "F,!A!F,66B-,F,?;D(:DD('BF,+F,zIncorrect type of valueza: 1
zUnclosed parenthesisza: (
zUnmatched closing parenthesis)za: )
za: [)
za: (]
z5Expecting rule or terminal definition (missing colon))za
zA
za->
zA->
za A
z#Illegal name for rules or terminalszAa:
zAlias expects lowercase namez
a: -> "a"
zUnexpected colon)za::
za: b:
za: B:
za: "a":
zMisplaced operator)za: b??za: b(?)za:+
za:?
za:*
za:|*
z;Expecting option ("|") or a new rule or terminal definitionza:a
()
z"Terminal names cannot contain dotszA.B
z%Expecting rule or terminal definitionz"a"
z%import expects a namez%import "a"
z%ignore expects a valuez%ignore %import
c                 b    UR                  U [        SS9nU(       a  U$ SUR                  ;   a  gg )NT)use_acceptsr   zExpecting a value)match_examplesGRAMMAR_ERRORSexpected)parser  errors      r   _translate_parser_exceptionrc    s5      D IL#& $r   c           
          [        5       R                  U S-   U5      n[        5       R                  U5      $ ! [         a;  nUR                  U 5      n[	        SUR
                  UR                  X4-  5      eS nAf[         aj  nUR                  U 5      n[        [        5       R                  U5      nU(       a.  [	        U< SUR
                  < SUR                  < SU< 35      ee S nAff = f)Nrw   z1Unexpected input at line %d column %d in %s: 

%sz
, at line z column z

)rM  ra  r(   get_contextr'   linecolumnr)   rc  r>  r,  )r)  r   r   r  r  contextrb  s          r   _parse_grammarri    s    }""4$;6 %%d++   >--%PFFAHHd<= > 	> --%+KM,?,?C5!&&RSRZRZ\cdees"   8 
C/6A88C/A%C**C/c                 (   [        U [        5      (       as  [        [        5       R                  U 5      nU(       a  U$ SR                  U R                  =(       d    U R                  5      nS[        U R                  5      < SU< S3$ [        U 5      $ )Nr  zUnexpected token z. Expected one of: {rq   )
r   r)   rc  rM  ra  r  acceptsr`  r  token)rb  error2r`  s      r   _error_reprrn    se    %)),[]-@-@%HM99U]]<enn=?B5;;?OQYZZ5zr   c                 ^    S n[        SU 4/U5       H  u  p4U" U5      (       d  M  X44s  $    g )Nc              3      #    U u  pUR                  5        H*  n[        US5      n UR                  U5      nX4-   U4v   M,     g ! [         a     M<  f = f7f)Nr   )r  r   
feed_tokenr*   )noder!  rc  choicer   new_ps         r   expand*_search_interactive_parser.<locals>.expand  s_     iikFfb!A.Q Y&-- "  s'   $AAA
AAAAr   )r   )interactive_parser	predicateru  r!  rc  s        r   _search_interactive_parserry    s6    	. "B(:#;"<fEQ<<7N Fr   r)  r  c                    ^ / mU4S jn[        5       R                  U S-   XS9n[        TS 5      nUR                  5        Vs/ s H  oUS   PM	     snmT H  nS US   l        M     T$ s  snf )Nc                 2  > TR                  U [        U 5      45        [        U R                  R	                  5       S 5      u  pU H(  nU R                  R                  [        US5      5        M*     U R                  R                  [        SS5      5        g)Nc                 (    SU R                  5       ;   $ )Nr   )r  )rc  s    r   r  7find_grammar_errors.<locals>.on_error.<locals>.<lambda>  s    bgklktktkvbvr   r   r   rw   T)r   rn  ry  rw  as_immutablerq  r   )r  
token_pathr[   
token_typeerrorss       r   on_error%find_grammar_errors.<locals>.on_error  s{    q+a.)* 313G3G3T3T3VXvw
$J  ++E*b,AB %	''eT(:;r   rw   )r  c                      U S   R                   $ rV  )rf  )r  s    r   r  %find_grammar_errors.<locals>.<lambda>  s    !		r   r   )rM  ra  r%   r  rw  )r)  r   r  _treeerrors_by_lineelr  r  s          @r   find_grammar_errorsr    sx    F MtUFEf&9:N,33565e56F"&! M	 7s   A*c                    ^ ^^ UUU 4S jnU$ )Nc                 v   > U T;   a  TU    n O U S   S:X  a  ST< SU SS  < 3n O	T< SU < 3n Tb  T" U 5      n U $ )Nr   r[   __r   r   )r  rA  base_mangler   s    r   mangle_get_mangle.<locals>.mangle  sL    <
Ats{!'12/ &*"AAr   r   )r   rA  r  r  s   ``` r   _get_mangler     s    
 Mr   c                     Uc  U $ [        U 5      n U R                  5        HV  n[        UR                  5       H:  u  p4[	        U[
        5      (       d  M  UR                  U5      UR                  U'   M<     MX     U $ r   )r   r.  r7  r8  r   r#   renamed)r3  r  r   r   rq  s        r   _mangle_definition_treer    sg    ~

3-C ajj)DA!V$$ !		& 1

1 * !
 Jr   c           
         U R                   (       aA  U R                   u  nSU;   nU(       a!  UR                  S5      (       a  [        S5      eSU;   nOSnSnUR                   (       a  UR                   u  n[        U5      n	OS n	Ub%  UR                    V
s/ s H  oR                  PM     nn
XU[        XvU	U(       a  US94$ S S94$ s  sn
f )NrK   r[   z4Inlined rules (_rule) cannot use the ?rule modifier.rM   F)r   template_source)r8  r   r'   r   r   r   )modifiers_treer   r  priority_treer   mrJ  r   rc  r   r   s              r   _make_rule_tupler    s    $$(ts++UVV(##q6#)??3?a''?3[T\JP$&] ] ]VZ&] ] ] 4s   Cc                       \ rS rSrSS jrSrg)
Definitioni1  Nc                 H    Xl         X l        [        U5      U l        X@l        g r   )r  r  tupler  r  )r   r  r  r  r  s        r   r   Definition.__init__2  s    	Fmr   )r  r  r  r  r   N)r   r   r   r   r   r   r   r   r   r  r  1  s    r   r  c                      \ rS rSr% \\S'   \\\\	4      \S'   \
\\4   \S'   \
\\4   \S'   \\   \S'   S!S\S\\\\\	4         S\\
\\4      S	S4S
 jjrS rS rS"SS.S jjrS"S jrS rS rS rS#S\S\S\\	\/\4      S	S4S jjrS rS$S\\S4   S\\   S\
\\4   S\\	\/\4      S	S4
S jjrS%S jrS	\4S jrS rg)&GrammarBuilderi8  global_keep_all_tokensimport_paths
used_files_definitions_ignore_namesFNr  c                 l    Xl         U=(       d    / U l        U=(       d    0 U l        0 U l        / U l        g r   )r  r  r  r  r  )r   r  r  r  s       r   r   GrammarBuilder.__init__A  s1    &<#(.B$*35(*r   c                     0 n[        USS9 HB  u  pVUS:X  a  SO
[        U5      nXdSU-   '   SU   =USU-   '   nUR                  5       USU-   '   MD     [        UR                  " S0 UD65      e)	Nr   r   r   r   )r   r   r  Typer   )r7  r  titler'   format)	r   r  msgrm  r   r   r   postfixlowercase_types	            r   _grammar_errorGrammarBuilder._grammar_errorI  s     a0GAFbAG%)'!"6J76SSD'!"^%3%9%9%;D'!"	 1
 3::--..r   c                    U(       a7  Uc  SnU$ [        U[        5      (       d  [        S[        U5      < 35      e U$ Uc  [	        5       nO [        U[        5      (       d  [        S5      eU R
                  (       a  SUl        U$ )Nr   z@Terminal require a single int as 'options' (e.g. priority), got z1Rules require a RuleOptions instance as 'options'T)r   r   r'   r  r   r  r   )r   r  r  s      r   _check_optionsGrammarBuilder._check_optionsR  s       --"kopwkx#z{{ .  %-55"#VWW***.'r   )r   c          	      .   XR                   ;   a  U(       d  U R                  USU5        OU(       a  U R                  USU5        UR                  S5      (       a  U R                  USU5        [        X#X@R	                  X%5      5      U R                   U'   g )Nz&{Type} '{name}' defined more than oncez+Cannot override a nonexisting {type} {name}r  zDNames starting with double-underscore are reserved (Error at {name}))r  r  r   r  r  )r   r   r  r3  r  r  r   s          r   _defineGrammarBuilder._defineb  s    $$$##G-UW[\)VX\]??4  )oquv",W6CVCVW^Ch"i$r   c                    XR                   ;  a  U R                  USU5        U R                   U   nX&R                  :w  a  U R                  USU5        [        U5      UR                  :w  a  U R                  USU5        UR
                  c  U R                  USU5        UR
                  n[        U[        5      (       a  UR                  S:X  d   eUR                  R                  SU5        g )Nz6Can't extend {type} {name} as it wasn't defined beforezHCannot extend {type} {name} - one is a terminal, while the other is not.z6Cannot extend {type} with different parameters: {name}z,Can't extend {type} {name} - it is abstract.r   r   )r  r  r  r  r  r  r   r,   r3  r8  insert)r   r   r  r3  r  r  dbases           r   _extendGrammarBuilder._extendn  s    ((()acghd#ii)suyz=AHH$)acgh66>)WY]^ vv$%%$))|*CCCQ$r   c                    [        U[        5      (       a  U R                  R                  U5        g [        U[        5      (       d   eUnUR
                  S:X  a  [        UR                  5      S:X  a  UR                  u  nUR
                  S:X  a  [        UR                  5      S:X  ag  UR                  u  nUR
                  S:X  aI  UR                  u  n[        U[        5      (       a&  U R                  R                  UR                  5        g S[        U R                  5      -  nU R                  R                  U5        [        SU[        S9U R                  U'   g )Nr   r   r   r   z__IGNORE_%dT)r  )r   r  r  r   r,   r3  r&  r8  r!   r   r  r$   r  )r   exp_or_namer   t2r4  r   s         r   _ignoreGrammarBuilder._ignore  s
   k3''%%k2k40000Avv%#ajj/Q*>jj77K'C,<,AKKFDyyG+ $%dH55 ..55dii@" #d&8&8"99D%%d+&0qBX&YDd#r   c                 &   [        UR                  5      S:  a  UR                  u  p4OUR                  u  nS n[        U[        5      (       a6  [	        UR                  5      nUR                  n[        [        Xf5      5      nOk[	        UR                  S S 5      nU(       d  UR                  u  n[        SU-  5      eUR                  S   nUR                  U=(       d    UR                  0nUR                  S:X  a  S n	OUS:X  a<   [        R                  R                  [        R                  S   R                  5      n
OUn
U
(       ay  [        U
["        5      (       aA  [#        U
R$                  [        R                  R'                  U
R                  5      S   5      n	OZ[        R                  R'                  U
5      S   n	O7[        R                  R                  [        R                  R(                  5      n	XYU4$ ! [          a    S n
 Nf = f)Nr   r  z&Nothing was imported from grammar `%s`r   <string>__main__r   )r&  r8  r   r,   r  r  r  r'   r   r3  r"  r!  abspathsysmodules__file__rO  r  r  rS  curdir)r   stmtgrammar_name	path_nodearg1dotted_pathrm  rA  r   r  	base_files              r   _unpack_importGrammarBuilder._unpack_import  s   t}}!"mmOItJIDdD!!	 2 23KMME3u,-G	 2 23B 78K!**"#Kd#RSS%%b)DzzDLD#7#78G>>\)Iz)% "J0G0P0P QI )	i99 /	0B0BBGGMMR[R`R`DabcDd eI "i 8 ;IGGOOBGGNN;	w.. & % $I%s   	:H HHc                 |  ^ UR                   S:X  a  [        UR                  6 u  p4pVSnOcUR                  S   R                  nSn[	        UR                  5      S:X  a  [        UR                  S   5      O[        nUR                  S   nSnTb  [        U4S	 jU 5       5      nT" U5      n[        UT5      nX7XTU4$ )
Nr   Fr   r   r  r   r  Tc              3   4   >#    U  H  nT" U5      v   M     g 7fr   r   )r~  rc  r  s     r   r  4GrammarBuilder._unpack_definition.<locals>.<genexpr>  s     5f6!99fs   )	r3  r  r8  r   r&  r   r$   r  r  )r   r  r  r   r  r3  optsr  s     `     r   _unpack_definition!GrammarBuilder._unpack_definition  s    99&6&F#D#G==#))DF,/,>!,C3t}}Q'(I_D--#CG5f55F$<D%c62c4//r   grammar_textr  r  c                 d   [        X5      n0 nUR                   H_  nUR                  S:X  d  M  U R                  Xb5      u  pxn	 XW   u  pX:X  d   SSR	                  U5      -  5       eUR                  U	5        Ma     UR                  5        H  u  nu  pU R                  XxX5        M     UR                   GH  nUR                  S;   a   U R                  " U R                  Xc5      6   M4  UR                  S:X  a1  UR                  u  nU R                  " U R                  X5      SS06  Mu  UR                  S:X  a.  UR                  u  nU R                  " U R                  X5      6   M  UR                  S:X  a   Uc  U R                  " UR                  6   M  M  UR                  S	:X  av  UR                   Hc  n[        U[        5      (       d   U5       e[        U[        5      nUc  UR                   nOU" UR                   5      nU R                  XS 5        Me     GMi  UR                  S:X  a  GM|   U5       e   U R"                  R                  5        VVs0 s H&  u  nnUR$                  (       d  M  UUR&                  _M(     nnn[)        U5        g ! [         a
    X4XW'    GM  f = fs  snnf )
Nr   zInconsistent base_path for %s.r7   )r   r   r   Tr   r   r   )ri  r8  r3  r  r  updater  r  	do_importr  r  r  r  r   r#   r!   r   r  r  r  r7  )r   r  r  r  r  importsr  r  r  rA  import_base_pathimport_aliasesr  r   r  r   r  r  s                     r   load_grammarGrammarBuilder.load_grammar  s\   l9OQMMDyyH$262E2Ed2Y/>7>7K4$$8r:Z]`]e]efq]r:rr8"))'2 " 29-K-)NN;7C 2A MMDyy,,d55dCDj(]]d55a@P4Ph&]]d55a@Ah&>LL$--0 "i'"mmF%ff55=v=5(:G~%{{%fkk2LL5 , h&"d"u3 ":  ,,224
4ayy #dAFFl4 	 
 	 	*M   >+4+=G(>D
s   5JJ,5J,J)(J)c                    ^  U 4S jn[        [        X5      5      nT R                  R                  5        VVs0 s H  u  pEXC;   d  M  XE_M     snnT l        g s  snnf )Nc                    >  TR                   U    nUR                  (       a  / $ [        UR                  5      [        UR                  5      -
  $ ! [         a    / s $ f = fr   )r  r  r  rH  r  rD  r  )r   r  r   s     r   rule_dependencies8GrammarBuilder._remove_unused.<locals>.rule_dependencies  sX    %%f- yy	%aff-AHH==	  	s   A AA)rD  r   r  r  )r   usedr  _usedkr  s   `     r   _remove_unusedGrammarBuilder._remove_unused  sN    	> C01.2.?.?.E.E.GV.Gda1:TQT.GVVs   AAr  .r  rA  r  c           	         U(       d   e[        SR                  U5      X45      n[        R                  R                  " U6 [        -   nU R
                  Ub  U/O/ -   [        /-   nU GHW  n [        U5      (       a  U" X&5      u  pOB[        R                  R                  X5      n	[        U	SS9 nUR                  5       n
S S S 5        [        W
5      nU R                  R                  X5      U:w  a  [        S5      eXR                  U	'   [        U R                  U R
                  U R                  5      nUR!                  XU5        UR#                  [%        XS5      5        UR&                   H&  nXR&                  ;   d  M  [)        SU< SU< S35      e   U R&                  R*                  " S
0 UR&                  D6    g    [        USS9   SU< S	35       e! , (       d  f       GN= f! [,         a     GM  f = f)Nr  utf8encodingz)Grammar file was changed during importingzCannot import 'z' from 'z': Symbol already defined.zCouldn't import grammar zP, but a corresponding file was found at a place where lark doesn't search for itr   )r  r  r"  r!  EXTr  stdlib_loadercallableopenreadsha256_digestr  getRuntimeErrorr  r  r  r  r'  r  r'   r  r   )r   r  r  rA  r  r  r  r&  sourcejoined_pathr)  r  hgbr   s                  r   r  GrammarBuilder.do_import  s   {TYY{3WJww||[1C7""Y5JykPRSWdVeeFF##(.y(G%K"$'',,v"DKkF;q vvx <
 "$'??&&{6!;&'RSS/0,#D$?$?ARARTXTcTcd6:!!#f"67OOD000*fjlx+yzz , !!((;2??;1 6 / X  KV  X  X5- <; s+   -AG,1GG,
G)	$G,,
G;:G;c           
         U R                   R                  5        GH  u  pUR                  nUR                  n[	        U5       HD  u  pVX`R                   ;   a  [        SU< SU< S35      eXcS U ;   d  M2  [        SU< SU< S35      e   Uc  Mv  UR                  S5       H  nUR                  S   R                  nUR                  SS  n	X;  d  M2  XR                   ;  a   U R                  UR                  SU-  U5        [        U	5      [        U R                   U   R                  5      :w  d  M  [        U R                   U   R                  5      [        U	5      pU R                  UR                  S	U
< S
U< S3X5        M     [        U5       H8  nXR                   ;  d  M  X;  d  M  U R                  UR                  SX5        M:     GM     [        U R                   5      R                  U R                  5      (       d7  [        S[        U R                  5      [        U R                   5      -
  -  5      eg )Nz'Template Parameter conflicts with rule z (in template rm   zDuplicate Template Parameter r   r   r   z5Template '%s' used but not defined (in {type} {name})z=Wrong number of template arguments used for {name} (expected z, got z) (in {type2} {name2})z9{Type} '{name}' used but not defined (in {type2} {name2})z8Terminals %s were marked to ignore but were not defined!)r  r  r  r  r7  r'   r  r8  r   r  r  r&  rH  rD  
issupersetr  )r   r   r  r  r3  r   rc  tempr   r   r`  actuals               r   validateGrammarBuilder.validate9  s   ((..0GDXXF&&C!&))))&ghjn'oppr
?&]^`d'eff	 * {&67mmA&++}}QR($"3"33++AII7nqt7tvz{4yC(9(9#(>(E(E$FF+.t/@/@/E/L/L+MsSWy&++AII\dfl8norz 8 *#.///C4E''		3npsz /1 18 4$$%001C1CDDY]`aeasas]twz{  |M  |M  xN  ^N   O  P  P Er   c                 x   U R                  5         / n/ nU R                  R                  5        Hs  u  p4UR                  UR                  UR
                  pvnUR                  (       a'  [        U5      S:X  d   eUR                  X6U445        M`  UR                  X5Xg45        Mu     [        XU R                  5      $ rV  )r  r  r  r  r  r  r  r&  r   r  r  )r   rx  r  r   r  r  r3  r  s           r   buildGrammarBuilder.buildY  s    		((..0GD%&XXqvvqyy'Vyy6{a'''  $g!78  $!=> 1 yT-?-?@@r   )r  r  r  r  r  )FNNr  )z<?>Nr   )r  N)r   r   r   r   boolr  r   r
   r  r   r   r  r   r   r  r  r  r  r  r  r  r  r  r	   r  r  r  r  r   r   r   r   r  r  8  s     uS(]+,,S#XsJ''9+t +RVW\]`bj]jWkRlIm +  AI  JN  OR  TW  OW  JX  AY +  cg +/ 
ju 
j%(Z*%/N0(2+ 2+C 2+xX`beafhkakXlOm 2+w{ 2+jW!XU38_ !X# !XY]^acf^fYg !Xv~  @H  JM  IN  PS  IS  @T  wU !X  _c !XHP@Aw Ar   r  c                 6   U R                  5        H  u  pS n[        U[        5      (       aH  [        R                  R                  U5      (       a$  [        USS9 nUR                  5       nS S S 5        OO[        U[        5      (       a:  [        [        5         [        R                  " U6 R                  S5      nS S S 5        Uc  M  [        U5      nX%:w  d  M  [        R                   " SU-  5          g   g! , (       d  f       NC= f! , (       d  f       NT= f)Nr  r  zutf-8z"File %r changed, rebuilding ParserFT)r  r   r  r"  r!  existsr  r  r  r   r   r#  r$  r%  r  r   info)file_hashesr!  oldr)  r  currents         r   verify_used_filesr  h  s     &&(	dC  RWW^^D%9%9dV,vvx -,o..'"''.55g> #<%>KK<tCD )  -, #"s   C9#D
9
D	

D	c                     [        SU5      nUR                  U S5        [        UR                  R	                  5       5      $ )zXReturns a list of paths to the lark grammars imported by the given grammar (recursively)Fr  )r  r  r  r  keys)grammarr  builders      r   list_grammar_importsr  z  s8    UL1G*-""'')**r   c                 r    [        X25      nUR                  X5        UR                  5       UR                  4$ r   )r  r  r  r  )r  r  r  r  r  s        r   r  r    s2    3BG)==?G....r   r  c                     [         R                  S:  a2  [        R                  " U R	                  S5      SS9R                  5       $ [        R                  " U R	                  S5      5      R                  5       $ )zGet the sha256 digest of a string

Supports the `usedforsecurity` argument for Python 3.9+ to allow running on
a FIPS-enabled system.
)r  	   r  F)usedforsecurity)r  version_infohashlibsha256encode	hexdigestr;  s    r   r  r    sV     6!~~ahhv.FPPRR~~ahhv./99;;r   r  r   )yrg  r  os.pathr"  r  collectionsr   r   r   r#  astr   
contextlibr   typingr   r	   r
   r   r   r   r   utilsr   r   r   r   r   r   r   lexerr   r   r   r   parse_tree_builderr   parser_frontendsr   commonr   r   r  r   r    r!   r"   r#   r$   r%   r&   
exceptionsr'   r(   r)   r*   r+   r  r,   r-   r  visitorsr.   r/   r0   r1   r2   rh  r!  dirnamer  __path__IMPORT_PATHSr  r  r   r`  rP  rQ  r  r  r   r   r0  rH  rT  rj  rv  r  r  r  r  r  r  r  r  r  r  r  r  r7  r<  r>  rH  rM  r_  rc  ri  rn  ry  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r+     sL   (   
 "     I I I i i i < < 0 - ) ] ] ' h h ) a aD!77??8$|			%%%'% '% +	%
 &% '% &% '% 	;% &% '% &% $% &% (%  )!%" ,#%$ +%%& ,'%( *)%* *+%, '-%. */%0 	71%2 +3%4 '5%6 &7%8 &9%: (;%< (=%> &?%@ &A%B 	9C%D VE%F 
I%PUU U U	
 u u 	
 c c 
5 K w S 1   #!" (#$ /:
(=	BK	gYK	w&K	 ZK	
 QRK	 'K	 K	 :K	 79K	 =/K	  0K	& .<'K	( ,)K	, 2()-K	0  1K	<  =K	D   EK	P QK	R F8SK	V fj!WK	X 
M*YK	\ &']K	^ %&_K	b CDcK	d w46eK	j -9;kK	n !!#oK	r ~sK	v '(wK	x ,-yK	z  4{K	B \<0CK	D >"EK	F &'GK	H V56IK	L 34 67(#UK	`  
  ,; ,: X/% X/ X/v*67 *6Z
%[ 
%4:. 4:n;) ;$(( (.,4SB 
2) 
2 
2!-4 -`) 8
E6 E6P .@*E *EZ "&,7@DX '( ' 'E!* 
#XJ/	(,	(*JK	@Bkl	.	:	'-9	IJ	YZ	FV	-y9	07)<	!O#45	"%8$9: '," c # $u_VYEY?Z:[ ,	]0 mA mA`	$ 02 +/	<S 	<S 	<r   