
    Ii                        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	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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*  SSKJ+r+J,r,J-r-J.r.  SSK/J0r0J1r1J2r2J3r3  SSK4J5r5J6r7  SSK8J9r9J:r:J;r;J<r<J=r=  \;" SS9r>\R~                  R                  \A5      rBS/rCSrDSrE\*" S5      rF0 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rG0 S`Sa_SbSc_SdSe_SfSg_ShSi_SjSk_SlSm_SnS_SoS_SpSq_SrSs_StSu_SLSK_SvSw_SxSy_SzS{_S|S}\E-  _S~SSSSSSSSSSS.ErH0 SS/_SSS/_S/ SQ_SSS/_SSS/_SSvS/_SS/_S/ SQ_SSS/_SS/_SSS/_S/ SQ_S/ SQ_S/ SQ_SSx/_SSv/_SSvSx/_0 SS/_SS/_SS/_SSS/_SSS/_SSS/_SSS/_SS/_SS/_S/ SQ_SSS/_SS/_SS/_SSS/_SS/_SSS/_SSS/_ESS|Sz/0ErISrJSrK\> " S S\<5      5       rL " S S\:5      rM " S S\95      rN " S S\<5      rO " S S\<5      rP " S S\<5      rQS rRS rSS rT\> " S S\<5      5       rUS rV " S S\=5      rW " S S\<5      rXS rY " S S5      rZ\" SS5      r[ " S S\\5      r]\]" S\C5      r^S r_S r`S ra\> " S S\<5      5       rbS rcS rdSS/4SS/4S/ SQ4S/ SQ4SS/4SS/4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/reGS rfGSGS jrgGS rhGS riGSGS jrjGSGS jrkGS rl " GS GS5      rmGS rn/ 4GS jroGS rpg(  z"Parses and creates Grammar objects    N)
namedtuple)copydeepcopy)open)literal_eval)Integral   )bfsPy36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)classifysuppress
dedup_listStr)GrammarErrorUnexpectedCharactersUnexpectedToken
ParseError)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\.\.RULEz!?[_?]?[a-z][_a-z0-9]*TERMINALz_?[A-Z][_A-Z0-9]*STRINGz"(\\"|\\\\|[^"\n])*?"i?REGEXPz/(?!/)(\\/|\\\\|[^/])*?/[%s]*z(\r?\n)+\s*z(\r?\n)+\s*\|z[ \t]+z\s*//[^\n]*z->z%ignorez	%overridez%declarez%extendz%importz[+-]?\d+)_NL_NL_ORWSCOMMENT_TO_IGNORE	_OVERRIDE_DECLARE_EXTEND_IMPORTNUMBERstart_list_itemz_list _item)ruletermignoreimportdeclareoverrideextendr   r   z*RULE template_params _COLON expansions _NLz6RULE template_params _DOT NUMBER _COLON expansions _NL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 RULE	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?namer   z_LBRA expansions _RBRAr   zSTRING _DOTDOT STRINGr   z#RULE _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_list
_name_listz_name_list _COMMA name_declare_argsz_declare_args namer      2   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selfs    7/venv/lib/python3.13/site-packages/lark/load_grammar.py__init__EBNF_to_BNF.__init__   s'         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$ N)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   a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)NrF   r   r   r:   plusr>   starrd   r	   r   'Bad Range for %s (%d..%d isn't allowed))r   r   r   lenintmapr#   r   )r   r   opargsemptyr   r   r   s           r   r   EBNF_to_BNF.expr6  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                  mU4S jn[        UR                  U5      5      (       a  [        nO[        S/ 5      n[        SX/5      $ )Nc                    > [        U [        5      (       a   U R                  R                  S5      (       + $ [        U [        5      (       a  T=(       d    U R
                  (       + $  e)NrV   )
isinstancer   r   
startswithr   
filter_out)symkeep_all_tokenss    r   will_not_get_removed/EBNF_to_BNF.maybe.<locals>.will_not_get_removedV  sL    #{++88..s333#x((&<cnn*<<5r   r   r   )r   r  anyscan_values_EMPTYr   )r   r   r	  r   r  s       @r   r   EBNF_to_BNF.maybeS  s]    ++Q0A0A0Q0Q	 t 4566E{B'E,..r   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r   r   r   r   r   r   r   r   __static_attributes__ 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_Visitorie  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._flatteng  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   )	r  	enumeratechildrenr  r'   r  r!   visitr   )r   r   r   childoptionjothers          r   r   SimplifyRule_Visitor.expansionl  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   )r  r  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   )r  r   setr  r!   )r   r   s     r   r   SimplifyRule_Visitor.expansions  sB    ds4==!"c$--&88&t}}5DM 9r   r  N)
r  r  r  r  staticmethodr  r   r   r   r  r  r   r   r  r  e  s#     ,$6r   r  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$ )Nr<   )r   )r   r0  r   _aliasr   s        r   r   RuleTreeToText.alias  s2    %&"U~>#v>>~++%%r   r  N)r  r  r  r  r   r   r   r  r  r   r   r.  r.    s    &r   r.  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   r<  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   r?  flagsr>  r#   r  r   r   r   _TERMINAL_NAMESr   r   upperr=  r   r   addr   r<  r   r   r  r   )r   pr   	term_nametermdefr  s         r   r>  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   r?  r=  r<  N)	r  r  r  r  __doc__r   inline_argsr>  r  r  r   r   r9  r9    s    p! ): ):r   r9  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   rR  __default__r   cs     r   r   _ReplaceSymbols.value  s\    q6Q;:adE22qtzzTZZ7O::adjj))D11r   c                     US   U R                   ;   a4  U R                  SU R                   US      R                  /USS  -   S 5      $ U R                  SUS 5      $ )Nr   r   r	   )rR  rU  r   rV  s     r   r   _ReplaceSymbols.template_usage  sd    Q44::##$4tzz!A$7G7L7L6MPQRSRTPU6UW[\\ 0!T::r   rQ  N)	r  r  r  r  rL  r   r   r   r  r  r   r   rO  rO    s    #2
;r   rO  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_defsrO  replacerr*  created_templates)r   r^  s     r   r   ApplyTemplates.__init__  s    "')!$r   c                   ^	 US   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	   rj   r4   c              3   8   #    U  H  oR                   v   M     g 7fr   )r   ).0r   s     r   	<genexpr>0ApplyTemplates.template_usage.<locals>.<genexpr>  s     0FAs   rl   c              3   <   >#    U  H  oS    T:X  d  M  Uv   M     g7f)r   Nr  )rd  r   r   s     r   re  rf    s     +V~!1QUAA~s   	)joinr`  rG  r^  r   r   dictzipr_  rR  	transformr   r   )
r   rW  r   result_name_nparamsr   optionsresult_treer   s
            @r   r   ApplyTemplates.template_usage  s    t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   )r`  r_  r^  N)r  r  r  r  rL  r   r   r  r  r   r   r\  r\    s    S'
(r   r\  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)rd  rW  ss     r   re  _rfind.<locals>.<genexpr>  s     +7aqwwqzz7s   !)max)ru  choicess   ` r   _rfindry    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   rB   z/Literal ended unexpectedly (bad escaping): `%r`\\Uuxnftrz\"r^   r`   z\'z	u'''%s''')iternextStopIterationr#   replacer   SyntaxError)ru  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 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)rd  fs     r   re  &_literal_to_pattern.<locals>.<genexpr>!  s     -u!I~us   r   rr   z*You cannot put newlines in string literalsr   r0  zLYou can only use newlines in regular expressions with the `x` (verbose) flagr   z"/r   z$Empty terminals are not allowed (%s)r{  rB   )rawz:Invariant failed: literal.type not in ["STRING", "REGEXP"])	r   ry  alltyper#   r  r  r   r   )r   v
flag_startrD  r0  ru  s         r   _literal_to_patternr    sC   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)PrepareLiteralsi<  c                 .    [        S[        U5      /5      $ )Nr>  )r   r  )r   r   s     r   r   PrepareLiterals.literal>  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   rn   r<   rp   r>  )r  r   r   r  r   r   )r   r   endregexps       r   r   PrepareLiterals.rangeA  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  <  s    =2r   r  c                     Sn[         (       d-  [        U5      S:  a  [        S5      e[        U5      S:X  a  Uu  n[        X5      $ )Nr  r	   zMLark doesn't support joining terminals with conflicting flags in python <3.6!)r   r   r#   r   )r  	flags_setrD  s      r   _make_joined_patternr  J  sD    
 E4y>Anoo^q GEV##r   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TerminalTreeToPatterniX  c                     Uu  nU$ r   r  )r   psrH  s      r   r>  TerminalTreeToPattern.patternY  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rd  r   s     r   re  2TerminalTreeToPattern.expansion.<locals>.<genexpr>b  s     7A++--   )r   rh  r  rD  )r   itemsr>  r   s       r   r   TerminalTreeToPattern.expansion]  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   r0  s    r   <lambda>2TerminalTreeToPattern.expansions.<locals>.<lambda>k  s!    !++|c!''l] Kr   )r   z(?:%s)rD   c              3   @   #    U  H  oR                  5       v   M     g 7fr   r  r  s     r   re  3TerminalTreeToPattern.expansions.<locals>.<genexpr>m  s     &Cd{{}}dr  )r   sortrh  r  rD  )r   expsr>  r   s       r   r    TerminalTreeToPattern.expansionse  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   rd      z{%d}r   z{%d,%d}z(?:rh   )r   r   r   r#   r   r  rD  )r   r   r   r   r   r   s         r   r   TerminalTreeToPattern.exprp  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      $ )NrF   )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   $ r;  r  r   r  s     r   r   TerminalTreeToPattern.value  s    tr   r  N)r  r  r  r  r>  r   r   r   r   r   r   r  r  r   r   r  r  X  s)    G	FL'ar   r  c                       \ rS rSrS rSrg)PrepareSymbolsi  c                    Uu  n[        U[        5      (       a  U$ UR                  S:X  a  [        [	        UR
                  5      5      $ UR                  S:X  a,  [        [	        UR
                  5      UR                  S5      S9$  e)Nr   r   rV   rC  )r  r'   r  r   r"   r   r   r  r  s     r   r   PrepareSymbols.value  si    aHVVvs177|,,VVz!CLQ\\#5FGGur   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)r-   rk  r   s    r   nr_deepcopy_treer    s    #E*44Q77r   c                        \ rS rSrS rS rSrg)Grammari  c                 (    X l         Xl        X0l        g r   )	term_defsr^  r   )r   r^  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)T)r  zWhoops, name collisionrV   zRule za is marked for expansion (it starts with an underscore) and isn't allowed to have aliases (alias=rh   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   re  "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: %sr>   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  r^  list	find_datar   r  r#   r  r  r   rk  r9  r  r\  r   r  r   r   r   r   r   r.  r  r  r  r  r  r  r   empty_indicesr  r   is_termr  r   r   r*  r   valuesr   rh  r   orderro  r  r   r   debugr   r   r   ).r   r   r  r   r   rH  r  or^  r   	term_treepriorityr   transformerr<  anon_tokens_transfebnf_to_bnfrulesr   rn  	rule_treero  r   r   res_t_orule_tree_to_textsimplify_rulecompiled_rulesrule_contentr   r   r0  r  exp_optionsr  r   
duplicatesdupsr  rW  ru  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)<%'.*::=OO 	~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   r^  r  N)r  r  r  r  r   r  r  r  r   r   r  r    s    
z6r   r  PackageResourcezpkg_name pathc                   .    \ rS rSrSrSS jrS rS 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.
c                     Xl         X l        g r   pkg_namesearch_paths)r   r  r  s      r   r   FromPackageLoader.__init__)  s     (r   c                 l    [        U 5      R                  < SU R                  < SU R                  < S3$ )Nrf   , rh   )r  r  r  r  r   s    r   __repr__FromPackageLoader.__repr__-  s#    #Dz22DMM4CTCTUUr   c                    Uc  U R                   nOF[        U[        5      (       a  UR                  U R                  :w  a
  [	        5       eUR
                  /nU Hj  n[        R
                  R                  XB5      n [        R                  " U R                  U5      n[        U R                  U5      UR                  5       4s  $    [	        5       e! [         a     M  f = fr   )r  r  r  r  IOErrorpathosrh  pkgutilget_datadecode)r   	base_pathgrammar_pathto_tryr  	full_pathtexts          r   __call__FromPackageLoader.__call__0  s    &&F i99Y=O=OSWS`S`=`inn%FDT8IP''yA 't}}i@$++-OO  i	  s   <!C
CCr  N))r   )	r  r  r  r  rL  r   r   r  r  r  r   r   r  r    s    )Vr   r  larkc           	          SnU R                  5        H  u  p#Uc  M
  UR                  S5       Hx  nUR                  u  n[        U[        5      (       d  M(  UR
                  S:X  a  [        SU< SU< S35      eUR
                  S:X  d  M^   X   nUc   eXdR                  S
'   SnMz     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-  5      ef = fs  sn	f )NTFr   r   z'Rules aren't allowed inside terminals (z in rh   r   z!Terminal used but not defined: %sr   zNRecursion in terminal '%s' (recursion is only allowed in rules, not terminals))
r  r  r  r  r   r  r#   r   iter_subtreesid)	term_dictchangedr   
token_treeexpitem
term_valuer   r   r0  idss              r   resolve_term_referencesr  H  sI     ) 1D!!++G4dE**yyF**aegk+lmmyyJ.[)2J  *555*4Q"& 5 !2  ' *  oo'
4&+&9&9&;<&;r!u&;<d8s?&'wz~'~ ' (  ( ["./RUY/Y"ZZ[ =s   D58E5Ec           
      h   [        U5      S:  a  Uu  p4[        U5      nOUu  nS nUb&  UR                   Vs/ s H  oUR                  PM     snO/ nU R	                  S5      nU R                  S5      n U R	                  S5      nU R                  S5      n XU[        XgUU(       a  U S94$ S S94$ s  snf )Nr	   rH   rF   )r  template_source)r   r   r  r   r  lstripr   )r   rn  r0  r  r   r   r  expand1s           r   options_from_ruler   h  s    
1vz x=
393Ev/!gg/2Fooc*O;;sDooc"G;;sD[T\JP$&] ] ]VZ&] ] ] 0s   B/c           	          U  Vs/ s H:  oR                  5       (       a  [        XR                  S5      S9O
[        U5      PM<     sn$ s  snf )NrV   rC  )isupperr   r  r   )r   r0  s     r   symbols_from_strcaser#  z  s=    bklbk]^HQ<<#45+VW.Xbkllls   AA	c                        \ rS rSrS rS rSrg)PrepareGrammari~  c                     U$ r   r  r   r   s     r   r   PrepareGrammar.terminal      r   c                     U$ r   r  r'  s     r   r   PrepareGrammar.nonterminal  r)  r   r  N)r  r  r  r  r   r   r  r  r   r   r%  r%  ~  s    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iM     M!     snn$ s  snnf )Nr   r   c                      U R                   S;   $ N)r   r   )r  r  s    r   r  $_find_used_symbols.<locals>.<lambda>  s    qvv9M/Mr   )r  r  r  )r   r0  r   s      r   _find_used_symbolsr0    s]    99$$$~~k2 P2!}}%MN! N 2 P P Ps   &A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 S U5      PM     Os  snn f nn nU VVVVV	Vs/ s HJ  u  pVpx[        U5        H4  u  p[        [        U5      [        UR                  5       5      U	S U5      PM6     ML     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S/5      n['        XJS/5      nSUl        SUl        [-        XS 5      [         l        [         R                  s $ f = f)Nr   r   r   r   standardlalr)_get_parsercacheAttributeError	TERMINALSr  r   r   RULESr   r  r   r   r#  splitr   r   create_callbackrer   r   
lexer_typeparser_typer   )r   r   r<  r0  r  r  _pxsr  r   callbackr;  
lexer_confparser_confs                 r   r4  r4    s;   !    !LUOOL]^L][T[y'78L]^	^AFOgd"4q1OO%*F F%*\QBy}tq k!n&:1779&Eq$PQR7D S%*F F#E2.>>@ytY.?@
 7)< *
"(+JTJ   !s4    "E8!A!E86BE8"AC43BE87E8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_exceptionrJ    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)Nrr   z1Unexpected input at line %d column %d in %s: 

%sz
, at line z column z

)r4  rH  r$   get_contextr#   linecolumnr%   rJ  r%  rk  )r  r   r   r   r  contextrI  s          r   _parse_grammarrP    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: {rl   )
r  r%   rJ  r4  rH  rh  acceptsrG  strtoken)rI  error2rG  s      r   _error_reprrV    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   )rx  r   
feed_tokenr&   )noder  rH  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	predicater]  r  rH  s        r   _search_interactive_parserra    s6    	. "B(:#;"<fEQ<<7N F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   )rx  )rH  s    r   r  7find_grammar_errors.<locals>.on_error.<locals>.<lambda>  s    bgklktktkvbvr   r   r   rr   T)r   rV  ra  r_  as_immutablerY  r   )r  
token_pathrV   
token_typeerrorss       r   on_error%find_grammar_errors.<locals>.on_error  s{    q+a.)* 313G3G3T3T3VXvw
$J  ++E*b,AB %	''eT(:;r   rr   )rj  c                      U S   R                   $ r;  )rM  )r  s    r   r  %find_grammar_errors.<locals>.<lambda>  s    !		r   r   )r4  rH  r   r  r_  )r  r   rj  _treeerrors_by_lineelr  ri  s          @r   find_grammar_errorsrq    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   rV   __r	   r  )ru  r'  base_mangler   s    r   mangle_get_mangle.<locals>.mangle  sL    <
Ats{!'12/ &*"AAr   r  )r   r'  ru  rv  s   ``` r   _get_manglerx    s    
 Mr   c                 H   Uc  U $ [        U 5      n U R                  5        H}  n[        UR                  5       Ha  u  p4[	        U[
        5      (       d  M  UR                  S;   d  M.  [        UR                  U" UR                  5      5      UR                  U'   Mc     M     U $ r.  )r   r  r  r  r  r   r  r   )r  rv  r   r   rW  s        r   _mangle_exprz    s}    ~

3-C ajj)DA!U##2F(F %afffQWWo >

1 * ! Jr   c                       \ rS rSrSS jrS rS rS rSS jrSS jr	S	 r
S
 rS rS rSS jrS rSS jrS rS rSrg)GrammarBuilderi  Nc                 l    Xl         U=(       d    / U l        U=(       d    0 U l        0 U l        / U l        g r   )global_keep_all_tokensimport_paths
used_files_definitions_ignore_names)r   r~  r  r  s       r   r   GrammarBuilder.__init__  s1    &<#(.B$*r   c                 F    UR                  S5      S   R                  5       $ )Nrt  r   )
rpartitionr"  r'  s     r   _is_termGrammarBuilder._is_term  s!     t$R(0022r   c                     0 n[        USS9 HQ  u  pEUS:X  a  SO
[        U5      nXSSU-   '   SU R                  U5         =USU-   '   nUR                  5       USU-   '   MS     [	        UR
                  " S0 UD65      e)	Nr	   r   r   r   )r   r   r  Typer  )r  rS  r  titler#   format)r   msgrR  r   r   r   postfixlowercase_types           r   _grammar_errorGrammarBuilder._grammar_error  s     a0GAFbAG%)'!"6J4==Y]K^6__D'!"^%3%9%9%;D'!"	 1
 3::--..r   c                 ,   U R                  U5      (       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   ro  s      r   _check_optionsGrammarBuilder._check_options(  s    ==   22"kopwkx#z{{ 3  %-55"#VWW***.'r   c                    XR                   ;   a  U(       d  U R                  SU5        OU(       a  U R                  SU5        UR                  S5      (       a  U R                  SU5        X2U R                  X5      4U R                   U'   g )Nz&{Type} '{name}' defined more than oncez+Cannot override a nonexisting {type} {name}rt  zDNames starting with double-underscore are reserved (Error at {name}))r  r  r  r  )r   r   r  rn  ro  r   s         r   _defineGrammarBuilder._define9  sx    $$$##$LdS MtT??4   fhlm#)0C0CD0R"S$r   c                 d   XR                   ;  a  U R                  SU5        [        U5      [        U R                   U   S   5      :w  a  U R                  SU5        U R                   U   S   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 beforer   z6Cannot extend {type} with different parameters: {name}r	   r   )r  r  tupler  r'   r  r  insert)r   r   r  rn  ro  bases         r   _extendGrammarBuilder._extendE  s    ((( XZ^_=E$"3"3D"9!"<== XZ^_  &q)$%%$))|*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  aw  UR                  u  nUR
                  S:X  aY  UR                  u  n[        U[        5      (       a6  UR                  S:X  a&  U R                  R                  UR                  5        g S[        U R                  5      -  nU R                  R                  U5        SUS4U R                  U'   g )Nr   r	   r   r   r   z__IGNORE_%dr  )r  rS  r  r   r'   r  r   r  r   r  r   r  )r   exp_or_namer   t2r  r   s         r   _ignoreGrammarBuilder._ignoreP  s   k3''%%k2k40000Avv%#ajj/Q*>jj77K'C,<,AKKFDyyG+ $%dE22tyyJ7N ..55djjA" #d&8&8"99D%%d+')1ajDd#r   c                 :    U H  nU R                  US 5        M     g r   )r  )r   rR  r   s      r   _declareGrammarBuilder._declared  s    DLLt$ 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   r  r  r'   r  ri  rj  r#   r   r  r  r  abspathsysmodules__file__r6  r  r  r9  curdir)r   stmtgrammar_name	path_nodearg1dotted_pathrR  r'  r   r	  	base_files              r   _unpack_importGrammarBuilder._unpack_importh  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                 j  ^ UR                   S:X  a  [        UR                  6 u  p4pVO]UR                  S   R                  nSn[	        UR                  5      S:X  a  [        UR                  S   5      OSnUR                  S   nTb  [        U4S jU 5       5      nT" U5      n[        UT5      nX5XF4$ )Nr   r   r  r  r	   r   c              3   4   >#    U  H  nT" U5      v   M     g 7fr   r  )rd  rH  rv  s     r   re  4GrammarBuilder._unpack_definition.<locals>.<genexpr>  s     5f6!99fs   )r  r   r  r   r   r   r  rz  )r   r   rv  r   rn  r  optss     `    r   _unpack_definition!GrammarBuilder._unpack_definition  s    99&7&G#D#t==#))DF,/,>!,C3t}}Q'(D--#C5f55F$<D#v&&&&r   c           	      6   [        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  aU  UR                   Vs/ s H  oR                  PM     nnUc  U R                  " U6   GM-  U R                  " [        X>5      6   GMH  UR                  S:X  a  GM[   U5       e   U R                   R                  5        VVVVs0 s H%  u  nu  nnnU R#                  U5      (       d  M"  UU_M'     nnnnn[%        U5        g ! [         a
    X4XW'    GMp  f = fs  snf s  snnnnf )
Nr   zInconsistent base_path for %s.r2   )r   r   r   Tr   r   r   )rP  r  r  r  rh  updater   r  	do_importr  r  r  r  r   r  r   r  r  r  )r   grammar_textr  rv  r   importsr  r  r	  r'  import_base_pathimport_aliasesr  r   rR  r   _paramsr  _optionsr  s                       r   load_grammarGrammarBuilder.load_grammar  sG   l9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'*.--8-Q-8>MM5)MM3v#56h&"d"u- "4 372C2C2I2I2K
2K..wX}}T"  dCi2K 	 
 	 	*G   >+4+=G(>( 9
s$   5I78J:!J
J
7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 5      (       a  / $  TR                  U    u  pn[        U5      [	        U5      -
  $ ! [         a    / s $ f = fr   )r  r  r   r0  r*  )symbolrn  r   rV   r   s       r   rule_dependencies8GrammarBuilder._remove_unused.<locals>.rule_dependencies  s\    }}V$$	!%!2!26!:Q &d+c&k99  	s   A AA)r*  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c           	      L   U(       d   e[        SR                  U5      X45      n[        R                  R                  " U6 [        -   nU R
                  Ub  U/O/ -   [        /-   nU GH  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        [        R                  " W
R                  S5      5      R                  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,                  R0                  " S
0 UR,                  D6    g    [        USS9   SU< S	35       e! , (       d  f       GNG= f! [2         a     GM  f = f)Nrt  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  )rx  rh  r  r  EXTr  stdlib_loadercallabler   readhashlibmd5encode	hexdigestr  getRuntimeErrorr|  r~  r  r  r   r  r#   r  r  )r   r  r	  r'  ru  rv  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 <
 KKF 34>>@??&&{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H1HH
H	H
H#"H#c           	         U R                   R                  5        GHi  u  nu  p#n[        U5       HD  u  pVX`R                   ;   a  [        SU< SU< S35      eXbS U ;   d  M2  [        SU< SU< S35      e   Uc  Mb  UR	                  S5       H  nUR
                  S   nUR
                  SS  n	X;  d  M(  XR                   ;  a  U R                  SU-  U5        [        U	5      [        U R                   U   S   5      :w  d  Mv  [        U R                   U   S   5      [        U	5      pU R                  S	U
< S
U< S3X5        M     [        U5       H-  nXR                   ;  d  M  X;  d  M  U R                  SX5        M/     GMl     [        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 rh   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#   r  r  r  r   r0  r*  
issupersetr  )r   r   rn  r  r  r   rH  tempr  r   rG  actuals               r   validateGrammarBuilder.validate  s   -1->->-D-D-F)D)6!&))))&ghjn'oppr
?&]^`d'eff	 * {&67mmA&}}QR($"3"33++,cfi,ikop4yC(9(9#(>q(A$BB+.t/@/@/Ea/H+I3t9&++\dfl-norz 8 *#.///C4E''(ceho /+ .G2 4$$%001C1CDDY]`aeasas]twz{  |M  |M  xN  ^N   O  P  P Er   c                 D   U R                  5         / n/ nU R                  R                  5        HY  u  nu  pEnU R                  U5      (       a'  [	        U5      S:X  d   eUR                  X5U445        MF  UR                  X4XV45        M[     [        XU R                  5      $ r;  )r  r  r  r  r   r   r  r  )r   r^  r  r   rn  r  ro  s          r   buildGrammarBuilder.build   s    		,0,=,=,C,C,E(D(6}}T""6{a'''  $g!78  $!=> -F yT-?-?@@r   )r  r  r~  r  r  )FNN)r  NF)r  N)z<?>Nr   )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|    sU     3
/"
T	%1(%%/N'".+bW!XHP:Ar   r|  c                    U R                  5        G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  [        R                  " UR!                  5       5      R#                  5       nX%:w  d  M  [$        R&                  " SU-  5          g   g! , (       d  f       Nj= f! , (       d  f       N{= f)Nr  r  zutf-8z"File %r changed, rebuilding ParserFT)r  r  rS  r  r  existsr   r  r  r    r  r  r  r  r  r  r  r  r   info)file_hashesr  oldr  r  currents         r   verify_used_filesr  .  s     &&(	dC  RWW^^D%9%9dV,vvx -,o..'"''.55g> #<++dkkm,668>KK<tCD )  -, #"s   D!#D2!
D/	2
E 	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  @  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  F  s2    3BG)==?G....r   r  r   )qrL  r  os.pathr  r  collectionsr   r   r   ior   r  astr   numbersr   utilsr
   r   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!   r"   
exceptionsr#   r$   r%   r&   r   r'   r(   r   visitorsr)   r*   r+   r,   r-   rM  r  dirnamer  __path__IMPORT_PATHSr  r  r  rE  r7  r8  r   r   r   r  r.  r9  rO  r\  ry  r  r  r  r  r  r  r  r  r  objectr  r  r  r   r#  r%  r0  r4  rF  rJ  rP  rV  ra  rq  rx  rz  r|  r  r  r  r  r   r   <module>r
     s   (   
 "      o o o < < 0 - ) E E 6 6 W W ) 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 $ #  (!" .:#$ 
9	>G	gYG	w&G	 ZG	
 9EGG	 :G	 79G	 =/G	  0G	  '5!G	" ,#G	& 2()'G	*  +G	6  7G	>   ?G	J KG	L F8MG	P fj!QG	T &'UG	V %&WG	Z <=[G	\ w46]G	b -9;cG	f !!#gG	j ~kG	n '(oG	p ,-qG	r  4sG	z \<0{G	| >"}G	~ &'G	@ V56AG	D ,EG	F 634GG	J f23KG	L (#MG	X  
   c/% c/ c/L*67 *6Z
&[ 
&4:. 4:n;) ;"(( (.,4S@ 
2) 
2 
2$-4 -`	( 	8
@6 @6F .@" "J "&,7@@]$m (  P!& 
#XJ/	(,	(*JK	@Bkl	.	:	'-9	IJ	YZ	FV	-y9	07)<	!O#45	"%8$9: '," ,ZA ZAz$ 02 +/r   