
    Xh                     l   d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	Z	ddl
mZ ddlmZ ddlmZmZmZmZmZmZmZmZ dd	lmZmZmZmZmZmZmZmZ dd
l m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddlm4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z? ddl@mAZAmBZBmCZCmDZDmEZE  eCd      ZFdgZGdZHdZI e2d      ZJi dddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:i d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_ZKi d`dadbdcdddedfdgdhdidjdkdldmdnddoddpdqdrdsdtdudLdKdvdwdxdydzd{d|d}d~eIz  dddddddddddddZLi ddgdddgdg dddgddvdgdddgdddgddxdgddgdg ddddgddgdddgdg ddg ddg dddzgi ddxgddxdzgdddgddgddgddgdddgdddgdddgdddgddgddgdg dâdddgddgddgdddgdgddgddgdd|gdМZMdZNdZO G dӄ deA      ZPeF G dՄ deD             ZQ G dׄ deB      ZR G dل deA      ZS G dۄ deD      ZT G d݄ deD      ZU G d߄ deD      ZVd ZWd ZXd ZYeF G d deD             ZZde$fdZ[ G d deE      Z\ G d deD      Z]d Z^ G d d      Z_ edd      Z` G d d      Za eadeG      Zbd Zcd ZdeF G d deD             Zed Zfd Zgddgfddgfdg dfd g dfddgfddgfdg dfdg d	fd
dgfddgfddgfddgfddgfgZhd Zid&dZjd Zkd Zld&demdemdeee;emf      fdZnd'dZod Zpd Zq G d d      Zr G d d       Zsd! Ztg fd"Zud# Zvd$emdemfd%Zwy((  zCParses and compiles Lark grammars into an internal representation.
    N)
namedtuple)copydeepcopy)literal_eval)suppress)ListTupleUnionCallableDictOptionalSequence	Generator   )bfsloggerclassify_boolis_id_continueis_id_startbfs_all_uniquesmall_factors
OrderedSet)TokenTerminalDef
PatternStr	PatternREPattern)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COMMENTrK   _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                   l    e Zd ZdefdZdedefdZdeee	ef      de
e	ddf   fdZde	fd	Zde	fd
Zy)FindRuleSizekeep_all_tokensc                     || _         y Nr   )selfr   s     E/var/www/html/myenv/lib/python3.12/site-packages/lark/load_grammar.py__init__zFindRuleSize.__init__   s
    .    symreturnc                     t        |t              r|j                  j                  d       S t        |t              r| j
                  xs |j                   S |t        u ryJ |       )Nr^   F)
isinstancer%   r   
startswithr$   r   
filter_out_EMPTY)r   r   s     r   _will_not_get_removedz"FindRuleSize._will_not_get_removed   sZ    c;'xx**3///c8$''=s~~+==&=cur   argsNc              #      K   |D ]@  }t        |t              r| t        |t              r| j                  |      rdnd @J  y w)Nr   r   )r   intr&   r   )r   r   as      r   _args_as_intzFindRuleSize._args_as_int   sH      	A!S!Av&55a8aa?u	s   AA	c                 6    t        | j                  |            S r   )sumr   r   r   s     r   r   zFindRuleSize.expansion       4$$T*++r   c                 6    t        | j                  |            S r   )maxr   r   s     r   r   zFindRuleSize.expansions   r   r   )__name__
__module____qualname__boolr   r&   r   r   r
   r   r   r   r   r    r   r   r   r      sf    / / D eCK&8!9 iTSW>X , ,,# ,r   r   c                   p    e Zd Zd ZdefdZd ZdedefdZd Z	d	 Z
d
ededefdZd
edefdZd
efdZy)EBNF_to_BNFc                 J    g | _         i | _        d| _        d| _        d | _        y )Nanonr   )	new_rulesrules_cacheprefixirule_optionsr   s    r   r   zEBNF_to_BNF.__init__   s'     r   innerc                 h    d| j                   || j                  fz  }| xj                  dz  c_        |S )Nz
__%s_%s_%dr   )r   r   )r   r   new_names      r   
_name_rulezEBNF_to_BNF._name_rule   s-    4;;tvv">>!r   c                     t        |      }| j                  j                  ||| j                  f       || j                  |<   |S r   )r%   r   appendr   r   )r   keyr   r   ts        r   	_add_rulezEBNF_to_BNF._add_rule   s@    tZ1B1BCD !r   type_exprc           
          	 | j                   |   S # t        $ rW | j                  |      }t        |      }t	        dt	        d|g      t	        d||g      g      }| j                  |||      cY S w xY wNr   r   )r   KeyErrorr   r%   STr   )r   r   r   r   r   trees         r   _add_recurse_rulezEBNF_to_BNF._add_recurse_rule   s    		8##D)) 	8u-HH%Al;';D	*% D >>$$77	8s    AA10A1c           
          ||||f}	 | j                   |   S # t        $ rN | j                  d||fz        }t        dt        d|g|z  |g|z  z         g      }| j	                  |||      cY S w xY w)aN  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_rulezEBNF_to_BNF._add_repeat_rule  s     !VT"	7##C(( 	7'71a&'@AHlRfX\TFQJ5N%O$PQD>>#x66	7s    AA.-A.c                    ||||df}	 | j                   |   S # t        $ r | j                  d||fz        }t        dt	        |      D cg c]  }t        d|g|z  |gz          nc c}w c}t	        |      D cg c]  }t        d|g|z  |g|z  z          nc c}w c}z         }	| j                  |||	      cY S w xY w)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_rulez EBNF_to_BNF._add_repeat_opt_rule  s    2 !VT5)		7##C(( 	7';q!f'DEHlDI!H%?@;
j\ 9:% % AFa;<;
dVAX 56 % D
 >>#x66	7s'    2B=
A&%B=:B"B=<B=r   mnmxc                    |t         k  r5t        dt        ||dz         D cg c]  }t        d|g|z         c}      S |}t        |t              D ]  \  }}| j                  ||||      } ||k(  r|S ||z
  dz   }t        |t              }	|}
t        dg       }|	dd D ].  \  }}| j                  |||
||      }| j                  |||
|      }
0 |	d   \  }}| j                  |||
||      }t        dt        d|g|gz         g      S c c}w )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   r
  r  n	mn_targetr   r  diffdiff_factorsdiff_targetdiff_opt_targets               r   _generate_repeatszEBNF_to_BNF._generate_repeats;  sN    &&l%PRTVYZTZJ[$\QRdVaZ%@$\]] 	!"&<= 	EDAq--aItDI	E8Bw{$T+AB["- "% 	IDAq"771k?\`aO//1k4HK	I B133Aq+X\],K)?P1P!Q RSS1 %]s   D	
opc                    |j                   dk(  rt        dg       }t        d||g      S |j                   dk(  r| j                  d|      S |j                   dk(  r*| j                  d|      }t        d|t        dg       g      S |j                   dk(  r`t        |      d	k(  rt	        |d
         x}}n.t        t        |      \  }}||k  s|d
k  rt        d|||fz        | j                  |||      S J |       )NrN   r   r   rB   plusrF   starrl   r   r   'Bad Range for %s (%d..%d isn't allowed))r   r   r  lenr   mapr*   r  )r   r   r  r   emptyr   r
  r  s           r   r   zEBNF_to_BNF.exprZ  s    88s?{B'ElT5M22XX_
 ))&$77XX_
 --fd;HlXr+r/B$CDDXX_4yA~d1g,&RS$B7b1f&'PTXZ\^`Sa'abb))$B77bur   c                     | j                   xr | j                   j                  }t        |      j                  |      }t	        dt
        g|z        }t	        d||g      S )Nr   r   )r   r   r   	transformr   r   )r   r   r   	rule_sizer  s        r   r   zEBNF_to_BNF.maybew  sW    ++Q0A0A0Q0Q 1;;DA	;9 45,u..r   N)r   r   r   r   strr   r   r/   r  r  r	  r   r  r   r   r   r   r   r   r   r      ss    ! 

8s 
8$ 
87(#7JTd T T T> 5 :/$ /r   r   c                   @    e Zd Zedefd       ZdefdZd ZdefdZy)SimplifyRule_Visitorr   c                 v    | j                  | j                        r	 | j                  | j                        ry y r   )expand_kids_by_datadata)r   s    r   _flattenzSimplifyRule_Visitor._flatten  s+    &&tyy1 &&tyy1r   c                    | j                  |       t        |j                        D ]  \  }}t        |t              s|j
                  dk(  s'd|_        t        |j                        D cg c]J  }| j                  t        dt        |j                        D cg c]  \  }}||k(  r|n| c}}            L c}}}|_        | j                  |        y  y c c}}w c c}}}w r   )	r(  	enumeratechildrenr   r/   r'  r)   visitr   )r   r   r   childoptionjothers          r   r   zSimplifyRule_Visitor.expansion  s     	d!$--0 	HAu%&5::+E(	 0:%../I!K !K%+ "&B{MVW[WdWdMe=gAIE HIAvVSX=X =g -h "i !K d#	=g !Ks   ..C"
C/C"
C"
c                     |j                   \  }}|j                  dk(  rLg }|j                   d   j                   D ]  }|j                  t        d||g             ! d|_        ||_         y y )Nr   r   r   )r+  r'  r   r   )r   r   r   
alias_namealiasesr-  s         r   r   zSimplifyRule_Visitor.alias  sl    ==j99$Gq)22 Ar'E:+>?@A$DI#DM %r   c                     | j                  |       t        t        |j                              t        |j                        k7  rt	        |j                        |_        y y r   )r(  r  setr+  r)   )r   r   s     r   r   zSimplifyRule_Visitor.expansions  sB    ds4==!"c$--&88&t}}5DM 9r   N)	r   r   r   staticmethodr/   r(  r   r   r   r   r   r   r$  r$  ~  s8    t  d ,$6t 6r   r$  c                       e Zd Zd Zd Zd Zy)RuleTreeToTextc                     |S r   r   )r   xs     r   r   zRuleTreeToText.expansions  s    r   c                 
    |d fS r   r   )r   symbolss     r   r   zRuleTreeToText.expansion  s    }r   c                 H    |\  \  }}}|J ||d|f       ||j                   fS )NrD   r   )r   r:  r   _aliasr   s        r   r   zRuleTreeToText.alias  s8    %&"FU~>y#v>>~%**$$r   N)r   r   r   r   r   r   r   r   r   r8  r8    s    %r   r8  c                   &    e Zd ZdZd Zed        Zy)PrepareAnonTerminalszfCreate a unique list of anonymous terminals. Attempt to give meaningful names to them when we add themc                     || _         | j                   D ch c]  }|j                   c}| _        |D ci c]  }|j                  | c}| _        d| _        d | _        y c c}w c c}w Nr   )	terminalsr   term_setpatternterm_reverser   r   )r   rD  tds      r   r   zPrepareAnonTerminals.__init__  sU    "+/>>:R:6?@RZZ^@  ;@s
   A A%c                 8   |j                   }|| j                  v r>|j                  | j                  |   j                  j                  k7  rt	        d|z        d }t        |t              r	 | j                  |   j                  }n?t        |t              r(|| j                  v r!| j                  |   j                  }nJ |       |$d| j                  z  }| xj                  dz  c_        || j                  vra|| j                  vsJ | j                  j!                  |       t#        ||      }|| j                  |<   | j$                  j'                  |       | j(                  r| j(                  j*                  rdnt        |t              }t-        ||      S # t        $ ru 	 t        |   }nV# t        $ rJ |rEt        |      r:t        |d         r,|j                         | j                  vr|j                         }Y nw xY w|| j                  v rd }Y Sw xY w)Nz+Conflicting flags for the same terminal: %sr   Fz	__ANON_%dr   r   )r   rG  flagsrF  r*   r   r   r   r   _TERMINAL_NAMESr   r   upperrE  r   r   addr   rD  r   r   r   r$   )r   pr   	term_nametermdefr   s         r   rF  zPrepareAnonTerminals.pattern  s   !!!agg1B1B11E1M1M1S1S&SMPQQRR	a$% --a055	 9%D%%% --a055	!O5#dff,IFFaKFDMM)D-----MMi(!)Q/G#*Da NN!!'*"//D4E4E4U4UU[efgis[t
	j99=  	%2 / 6I 2!6;uQx;PUZU`U`UbjnjwjwUw$)KKM	2 - $I	%s7   ,F 	H%	F/.H/AH?HHHHN)r   r   r   __doc__r   inline_argsrF  r   r   r   rA  rA    s    p! ): ):r   rA  c                   "    e Zd ZdZd Zd Zd Zy)_ReplaceSymbolszHelper for ApplyTemplatesc                     i | _         y r   )namesr   s    r   r   z_ReplaceSymbols.__init__  s	    
r   c                     t        |      dk(  rJt        |d   t              r7|d   j                  | j                  v r| j                  |d   j                     S | j                  d|d       S )Nr   r   r   )r  r   r&   r   rW  __default__)r   cs     r   r   z_ReplaceSymbols.value  sY    q6Q;:adF3!		TZZ8O::adii((D11r   c                     |d   j                   }|| j                  v r'| j                  d| j                  |   g|dd  z   d       S | j                  d|d       S )Nr   r   r   )r   rW  rY  )r   rZ  r   s      r   r   z_ReplaceSymbols.template_usage  s_    tyy4::##$4tzz$7G6H1QR56PRVWW 0!T::r   N)r   r   r   rR  r   r   r   r   r   r   rU  rU    s    #2
;r   rU  c                       e Zd ZdZd Zd Zy)ApplyTemplateszIApply the templates, creating new rules that represent the used templatesc                 N    || _         t               | _        t               | _        y r   )	rule_defsrU  replacerr5  created_templates)r   r_  s     r   r   zApplyTemplates.__init__  s    "')!$r   c                 (  	 |d   j                   	|dd  }	ddj                  d |D              d}|| j                  vr| j                  j                  |       	fd| j                  D        \  \  }}}}t        |      t        |      k(  sJ |       t        |      }t        t        ||            | j                  _
        | j                  j                  |       | j                  j                  |g |t        |      f       t        |      S )Nr   r   rr   r<   c              3   4   K   | ]  }|j                     y wr   r>  ).0r   s     r   	<genexpr>z0ApplyTemplates.template_usage.<locals>.<genexpr>  s     0FA0Fs   rt   c              3   4   K   | ]  }|d    k(  s|  yw)r   Nr   )rd  r   r   s     r   re  z0ApplyTemplates.template_usage.<locals>.<genexpr>  s     +V!1QUA+Vs   )r   joinra  rN  r_  r  r   dictzipr`  rW  r   r   r%   )
r   rZ  r   result_name_nparamsr   optionsresult_treer   s
            @r   r   zApplyTemplates.template_usage	  s    tyyu"&0F0F(FGd444""&&{3+Vt~~+V)'Rwv;#d)+1T1+"4.K"&s64'8"9DMMMM##K0NN!!;K'AR"ST;''r   N)r   r   r   rR  r   r   r   r   r   r]  r]    s    S'
(r   r]  c                 ,     t         fd|D              S )Nc              3   @   K   | ]  }j                  |        y wr   )rfind)rd  rZ  ss     r   re  z_rfind.<locals>.<genexpr>  s     +aqwwqz+s   )r   )rr  choicess   ` r   _rfindrt    s    +7+++r   c                 d   d}t        |       }|D ]2  }||z  }|dk(  s	 t        |      }|dk(  r|dz  }n	|dvr|dz  }||z  }4 |j	                  dd      j	                  dd	      }d
|z  }	 t        |      } | S # t        $ r t        d| z        w xY w# t        $ r}t        | |      d }~ww xY w)Nr   rJ   z/Literal ended unexpectedly (bad escaping): `%r`\\Uuxnftrz\"rf   rh   z\'z	u'''%s''')iternextStopIterationr*   replacer   SyntaxError)rr  wr   r  n2to_evales          r   eval_escapingr    s    
AQA 	Q9Z!W TzV9$T	GA 	
		%%%c51AAoG!! H ! Z"#TWX#XYYZ  !1a  !s#   A:-B :B	B/B**B/c                 l   t        | t              sJ | j                  }t        |d      dz   }|dkD  sJ ||d  }t	        d |D              sJ |       | j
                  dk(  rd|v rt        d      | j
                  dk(  rd|v rd	|vrt        d
      |d | }|d   |d   k(  r|d   dv sJ |dd }t        |      }|dk(  rt        d| z        | j
                  dk(  r*|j                  dd      }t        ||| j                        S | j
                  dk(  rt        ||| j                        S J d       )Nz/"r   r   c              3   ,   K   | ]  }|t         v   y wr   )	_RE_FLAGS)rd  fs     r   re  z&_literal_to_pattern.<locals>.<genexpr><  s     -!qI~-s   r   rz   z*You cannot put newlines in string literalsr   r:  zLYou can only use newlines in regular expressions with the `x` (verbose) flagr  z"/r   z$Empty terminals are not allowed (%s)rv  rJ   )rawz:Invariant failed: literal.type not in ["STRING", "REGEXP"])r   r   r   rt  alltyper*   r  r{  r   r   )r   v
flag_startrK  r:  rr  s         r   _literal_to_patternr  6  sV   gu%%%A4"J>>jkNE-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#!U66		!Ew}}55RRRur   c                       e Zd Zd Zd Zy)PrepareLiteralsc                 .    t        dt        |      g      S )NrF  )r   r  )r   r   s     r   r   zPrepareLiterals.literalY  s    )1':;<<r   c                 ,   |j                   |j                   cxk(  rdk(  sJ  J |j                  dd }|j                  dd }t        t        |            t        t        |            cxk(  rdk(  sJ  J d|d|d}t	        dt        |      g      S )Nr   r   r  rv   rD   rx   rF  )r  r   r  r  r   r   )r   r   endregexps       r   r   z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   N)r   r   r   r   r   r   r   r   r  r  W  s    =2r   r  r   c                     t        | d      S )Nr   )r   )r  	flags_sets     r   _make_joined_patternr  e  s    VR  r   c                   \    e Zd Zd Zdee   defdZdee   defdZdefdZd Z	d	 Z
d
 Zy)TerminalTreeToPatternc                     |\  }|S r   r   )r   psrO  s      r   rF  zTerminalTreeToPattern.patterni  s    r   itemsr   c                     |st        d      S t        |      dk(  r|d   S dj                  d |D              }t        ||D ch c]  }|j                   c}      S c c}w )Nr   r   r   c              3   <   K   | ]  }|j                           y wr   	to_regexprd  r   s     r   re  z2TerminalTreeToPattern.expansion.<locals>.<genexpr>t  s     7A!++-7   )r   r  rg  r  rK  )r   r  rF  r   s       r   r   zTerminalTreeToPattern.expansionm  sV    b>!u:?8O''777#Gu-E!agg-EFF-Es   A
expsc                     t        |      dk(  r|d   S |j                  d        ddj                  d |D              z  }t        ||D ch c]  }|j                   c}      S c c}w )Nr   r   c                 `    | j                    | j                   t        | j                         fS r   )	max_width	min_widthr  r   r:  s    r   <lambda>z2TerminalTreeToPattern.expansions.<locals>.<lambda>}  s#    !++|c!''l] K r   )r   z(?:%s)rL   c              3   <   K   | ]  }|j                           y wr   r  r  s     r   re  z3TerminalTreeToPattern.expansions.<locals>.<genexpr>  s     &Cq{{}&Cr  )r  sortrg  r  rK  )r   r  rF  r   s       r   r   z TerminalTreeToPattern.expansionsw  s_    t9>7N 			K	Lchh&Cd&CCD#Gt-D!agg-DEE-Ds   A&
c                 8   |d d \  }}|dk(  rTt        |      dk(  rdt        |d         z  }nDt        t        |dd        \  }}||k  rt        d|||fz        d||fz  }nt        |      dk(  sJ t	        d|j                         d||j                        S )	N   rl      z{%d}r  z{%d,%d}z(?:rp   )r  r   r  r*   r   r  rK  )r   r   r   r  r
  r  s         r   r   zTerminalTreeToPattern.expr  s    !H	r94yA~c$q'l*S$qr(+B7&'PTY[]_aSb'bcc"b)t9>!>u'8"=u{{KKr   c                 ,    | j                  |dgz         S )NrN   )r   )r   r   s     r   r   zTerminalTreeToPattern.maybe  s    yy&&r   c                     t        d      )NzBAliasing not allowed in terminals (You used -> in the wrong place))r*   )r   r   s     r   r   zTerminalTreeToPattern.alias  s    _``r   c                     |d   S rC  r   r   r  s     r   r   zTerminalTreeToPattern.value  s    tr   N)r   r   r   rF  r   r   r   r   r   r   r   r   r   r   r   r  r  h  sY    GtG} G G	FtG} 	F 	FLG L'ar   r  c                       e Zd Zd Zy)ValidateSymbolsc                 >    |\  }t        |t        t        f      sJ |S r   )r   r/   r&   r  s     r   r   zValidateSymbols.value  s"    !dF^,,,r   N)r   r   r   r   r   r   r   r  r    s    r   r  c                 6    t        d      j                  |       S )z#Deepcopy tree `t` without recursionF)r5   r   r   s    r   nr_deepcopy_treer    s    #E*44Q77r   c            	           e Zd ZU eeeeeef   f      ed<   eeeeedf   ee	f      ed<   ee   ed<   deeeeedf   ee	f      deeeeeef   f      dee   ddfdZ
deee   ee   ee   f   fdZy)	Grammar	term_defs.r_  r   r   Nc                 .    || _         || _        || _        y r   )r  r_  r   )r   r_  r  r   s       r   r   zGrammar.__init__  s    ""r   c                    ,-  j                   D cg c]  \  }\  }}|t        |      |ff }}}} j                  D cg c]  \  }}}}||t        |      |f }}}}}|D ]Q  \  }	\  }
}|
t        |
j	                  d            }t        |      dk(  s5|d   j                  rEt        d|	z         t               t               z  }|D 	
cg c]&  \  }	\  }
}|
rt        |	|j                  |
      |      ( }}
}	}t        |      }t               t               z  |z  }|t        |      z  }t               }g }d}|t        |      k  r||   \  }	}}}|dz  }t        |      dk7  r,|r|j                   rt#        d      nd }||_        |	|_        ||_        |j                  |      }|j                  |      }|j)                  |	||f       |t        |      k  r||j*                  z  }t        |      t        |D 	ch c]  \  }	}}|	
 c}}}	      k(  sJ d       t-               }t/               }g }|D ]5  }|\  }	}}|j1                  |       |j                  |      }t3        |      D ]  \  }\  }} | r#|	j5                  d      rt        d	|	d
| d      t7        d |D              }!t9        |!      r8t;        |      xs
 t#               }"|!|"_        |D #cg c]  }#|#t>        k7  s|# }}#n|}"|D ]J  }$tA        |$tB              sJ |$jD                  s"|"s%|"j                   s2tA        |$tF              sJ d|$_$        L tK        tM        |	      ||| |"      }%|j)                  |%        8 t        tO        |            t        |      k7  rtQ        |d       }&|&jS                         D ]  }'t        |'      dkD  s|'d   jT                  r$t        ddjW                  d |'D              z        t        |'D (ch c]%  }(|(jX                  |(jZ                  |(j\                  f' c}(      t        |'      k(  rJ  t        t_        |            }	 t        |      })|D (*ch c]4  }(|(jT                  D ]#  }*tA        |*tL              r|*|(j`                  k7  r|*% 6 c}*}(,,|D *ch c]  }*tM        |*       c}*z  ,tc        |,fd      \  }}+|+D ]  }(te        jf                  d|(        t        |      |)k(  rndk7  r|D (ch c]/  }(|(jT                  D ]  }tA        |tF              r|jh                    1 c}}(-tc        | -fd      \  }}+|+r.te        jf                  d|+D cg c]  }|jh                   c}       || jj                  fS c c}}}w c c}}}}w c c}}
}	w c c}}}	w c c}#w c c}(w c c}*}(w c c}*w c c}}(w c c}w )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=rp   c              3   .   K   | ]  }|t         k(    y wr   )r   )rd  r:  s     r   re  z"Grammar.compile.<locals>.<genexpr>  s     %CAai%Cs   Fc                     | S r   r   r  s    r   r  z!Grammar.compile.<locals>.<lambda>	  s    A r   zXRules defined twice: %s

(Might happen due to colliding expansion of optionals: [] or ?)r   c              3   &   K   | ]	  }d |z    yw)z
  * %sNr   r  s     r   re  z"Grammar.compile.<locals>.<genexpr>  s     4RZ!^4Rs   c                      | j                   v S r   )origin)r
used_ruless    r   r  z!Grammar.compile.<locals>.<lambda>  s    QXXYcMc r   zUnused rule: %srF   c                 t    | j                   v xs( | j                   j                  v xs | j                   v S r   )r   r   )r   r   terminals_to_keep
used_termss    r   r  z!Grammar.compile.<locals>.<lambda>)  sJ    166ZCW  DP[\[a[aeiepep[p  DPtutztz  P  uP r   zUnused terminals: %s)6r  r  r_  list	find_datar  r+  r*   r  r  r   r   rA  r  r]  r   r   r"   r   r   r   r   r8  r$  r,  r*  r   tupleanyr   empty_indicesr   r   r&   is_termr$   r   r#   r%   r5  r(   valuesr   rg  r   orderrm  r   r  r   r   debugr   r   ).r   r   r  r  r   rO  r  or_  r   	term_treer   r   transformerrD  anon_tokens_transfebnf_to_bnfrulesr   rl  	rule_treerm  r   r   res_t_orule_tree_to_textsimplify_rulecompiled_rulesrule_contentr   r   r  exp_optionsr:  r   r   
duplicatesdupsr  rZ  rr  unusedr  r  s.   ` `                                         @@r   compilezGrammar.compile  s    EINNSSyq&1aa*1-q12S	SFJnnUU
1aa,Q/3U	U ,5 	L'D'9h i11+>?J:!#JqM,B,B"#Cd#JKK	L &'*?*AA8AP P44	8Y !{'<'<Y'GR P	 P 2)<%'/*;;>PP 	~i00 "m#i. /8|,D&)WFA6{a@GGLcLc;t<imL'3K$!%K.:+((3D#--d3CLL$W-. #i.  	&&&5zS5!A!A<4R$!ABB\D\\B +,,.%'! 	,L".D$%*44T:J)2:)> ,%%IuT__S1&  X\  ^c  (d  e  e %%C%C C}%"&w-"@;=K0=K-,5 CqF CI C")K$ /C%c6222{{{{7R7R)#x888).	/
 K-y!UKP%%d+%,	,4 s>"#s>'::!.+>J"))+ [t9q=Aw((*  ,H-/WW4RT4R-R,S T T tL!!''199 =LMQTUYQZZZZ[ "*^"<=N N#A%3 /%&[[/ !)![9 !QXX  /! /J 59a;q>99J%2>Cc%d"NF 3.23>"a'  #*8 =Q*+++=%&$.q($; && =& =J !.i  :P  !QIv3f5Maff5MN.$++55q TU PB "B( !D,  M/ :=
 6NsA   VV 
+V(V/&V65V6*V;
,9W .W4W0W
)r   r   r   r   r	   r"  r/   r   __annotations__r"   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 
{65k9JDQUJX\]`Xa9a3b {6r   r  PackageResourcezpkg_name pathc                   x    e Zd ZU dZeed<   ee   ed<   ddedee   ddfdZd Zde	dee
f   d	edee
ef   fd
Zy)FromPackageLoadera  
    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                      || _         || _        y r   )r  r  )r   r  r  s      r   r   zFromPackageLoader.__init__A  s     (r   c                 f    t        |       j                  d| j                  d| j                  dS )Nrn   , rp   )r  r   r  r  r   s    r   __repr__zFromPackageLoader.__repr__E  s#    #Dz22DMM4CTCTUUr   	base_pathgrammar_pathc                    || j                   }n@t        |t              r|j                  | j                  k7  r
t	               |j
                  g}d }|D ]q  }t        j
                  j                  ||      }	 t        j                  | j                  |      }t        | j                  |      |r|j                         fc S dfc S  t	        d      |# t        $ r}|}Y d }~d }~ww xY w)Nr   z"Cannot find grammar in given paths)r  r   r  r  IOErrorpathosrg  pkgutilget_datadecode)	r   r  r  to_tryerrr  	full_pathtextr  s	            r   __call__zFromPackageLoader.__call__H  s    &&F i9Y=O=OSWS`S`=`inn%F 	bDT<8Ib(/(8(8	(R
 't}}i@TX4;;=aa^`aa	b :;D  s   8 C	C)C$$C)))r   )r   r   r   rR  r"  r  r   r   r  r
   r  r	   r  r   r   r   r  r  3  st     M3-) )HSM )T )VE%c?(B"C ESV E[`apruau[v Er   r  larkc           	         	 d}| j                         D ]  \  }}|	|j                  d      D ]z  }|j                  \  }t        |t              rt        d|d|d      t        |t              r&	 | |j                     }|J ||j                  d<   d}it        |t              rzJ   |sn| j                         D ]Z  \  }}|s	|j                  D ]C  }|j                         D 	cg c]  }	t        |	       }
}	t        |      |
v s7t        d	|z         \ y # t        $ r t        d|j                  z        w xY wc c}	w )
NTFr   z'Rules aren't allowed inside terminals (z in rp   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   r   r/   iter_subtreesid)	term_dictchangedr   
token_treeexpitem
term_valuer   r-  r:  idss              r   resolve_term_referencesr  d  sn     ) 1 	2D*!!++G4 2dK0&]acg'hiih/\%.tyy%9
 &111&0CLLO"G%dD1112	2" ) ,  oo' @
d @&+&9&9&;<r!u<<d8s?&'wz~'~@@ $ \*+NQUQZQZ+Z[[\ =s   2D+E"Ec                     t        | t              sJ | j                         rt        | | j	                  d            S t        |       S Nr^   rJ  )r   r"  isupperr$   r   r%   rr  s    r   symbol_from_strcaser	    s:    a89		8A!,,s"34WUVWr   c                       e Zd Zd Zd Zy)PrepareGrammarc                 L    t        t        |      |j                  d            S r  )r$   r"  r   r   r   s     r   r   zPrepareGrammar.terminal  s    D	dooc.BCCr   c                 ,    t        |j                        S r   )r%   r   r  s     r   r   zPrepareGrammar.nonterminal  s    4::&&r   N)r   r   r   r   r   r   r   r   r  r    s    D'r   r  c                     | j                   dk(  sJ | j                  d      D ch c]%  }|j                  d       D ]  }|j                   ' c}}S c c}}w )Nr   r   c                 "    t        | t              S r   )r   r&   r  s    r   r  z$_find_used_symbols.<locals>.<lambda>  s    Z6-B r   )r'  r  scan_valuesr   )r   r:  r   s      r   _find_used_symbolsr    sb    99$$$ NN;7 Eq]]#BCE FF EF E E Es   *Ac                  R   	 t         j                  S # t        $ r t        j	                         D  cg c]  \  } }t        | t        |             nc c}} w }} }t        j	                         D  cg c]2  \  } }| j                  d      |t        | j                  d            f4 nc c}} w }} }|D 	cg c]\  \  }}}t        |      D ]H  \  }}t        t        |      |j                         D 	cg c]  }	t        |	       nc c}	w c}	|d |      J ^ n
c c}	}}}}}w }}}}}}}	t!        |t"              j%                         }
dd l}t)        ||g d      }t+        ||
dg      }d|_        d|_        t1        ||d       t         _        t         j                  cY S w xY w)NrN   )expand1r   )r   r   rK   r   basiclalr)_get_parsercacheAttributeError	TERMINALSr  r   r   RULESlstripr"   r   r*  r#   r%   splitr	  r   r   create_callbackrer    r!   
lexer_typeparser_typer   )r   r   rD  r:  r  r  xsr  r   rr  callbackr  
lexer_confparser_confs                 r   r  r    s   !    !LUOOL]^[T5[y'78^^	^  %{{}.D! ++c"A{4??3;O'PQ . . . "'B BQA9R=B+/1a k!nqwwy&Q!':1'=&Q&QSTVZ\]^ B^ B B B $E2.>>@y".LM
 7)< '
"(+JTJ   !s?    !F&A!F&37B+*F&=;D8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                 Z    |j                  | t        d      }|r|S d|j                  v ryy )NT)use_acceptsr   zExpecting a value)match_examplesGRAMMAR_ERRORSexpected)parser  errors      r   _translate_parser_exceptionr-    s5      D IL#& $r   c           
         	 t               j                  | dz   |      }t               j                  |      S # t        $ r<}|j                  |       }t	        d|j
                  |j                  ||fz        d }~wt        $ ra}|j                  |       }t        t               j                  |      }|r*t	        |d|j
                  d|j                  d|       d }~ww xY w)Nrz   z1Unexpected input at line %d column %d in %s: 

%sz
, at line z column z

)r  r+  r+   get_contextr*   linecolumnr,   r-  r  r   )r  r   r   r   r  contextr,  s          r   _parse_grammarr3    s    }""4$;6 %%d++   >--%PFFAHHdG<= > 	> --%+KM,?,?C5!&&RSRZRZ\cdees"   8 	C%7A88C%AC  C%c                    t        | t              rgt        t               j                  |       }|r|S dj                  | j                  xs | j                        }dt        | j                        d|dS t        |       S )Nr  zUnexpected token z. Expected one of: {rt   )
r   r,   r-  r  r+  rg  acceptsr*  r"  token)r,  error2r*  s      r   _error_reprr8    sb    %),[]-@-@%HM99U]]<enn=?B5;;?OQYZZ5zr   c                 T    d }t        d| fg|      D ]  \  }} ||      s||fc S  y )Nc              3      K   | \  }}|j                         D ]*  }t        |d      }	 |j                  |      }||fz   |f , y # t        $ r Y 9w xY ww)Nr   )rs  r   
feed_tokenr-   )noder  rO  choicer   new_ps         r   expandz*_search_interactive_parser.<locals>.expand  si     aiik 	.Ffb!A.Q fY&--	.  s'   %AAA	AAAAr   )r   )interactive_parser	predicater?  r  rO  s        r   _search_interactive_parserrB    s<    	. "B(:#;"<fE aQ<7Nr   r  c                     g fd}t               j                  | dz   ||      }t        d       }|j                         D cg c]  }|d   	 c}D ]  }d |d   _         S c c}w )Nc                 0   j                  | t        |       f       t        | j                  j	                         d       \  }}|D ]'  }| j                  j                  t        |d             ) | j                  j                  t        dd             y)Nc                 &    d| j                         v S )Nr   )rs  )rO  s    r   r  z7find_grammar_errors.<locals>.on_error.<locals>.<lambda>  s    bgklktktkvbv r   r   r   rz   T)r   r8  rB  r@  as_immutabler;  r   )r  
token_pathr^   
token_typeerrorss       r   on_errorz%find_grammar_errors.<locals>.on_error  s    q+a.)* 313G3G3T3T3VXvw
A$ 	CJ  ++E*b,AB	C	''eT(:;r   rz   )rJ  c                      | d   j                   S rC  )r0  )r  s    r   r  z%find_grammar_errors.<locals>.<lambda>  s    !		 r   r   )r  r+  r(   r  r@  )r  r   rJ  _treeerrors_by_lineelr  rI  s          @r   find_grammar_errorsrO    s{    F MtUXFEf&9:N,3356be6F '"&!'M	 7s   A)c                       fd}|S )Nc                 f    | v r|    } n| d   dk(  rdd| dd  } nd| }  |       } | S )Nr   r^   __r   r   )rr  r3  base_mangler   s    r   manglez_get_mangle.<locals>.mangle  sL    <
Ats{!'12/ &*"AAr   r   )r   r3  rS  rT  s   ``` r   _get_manglerU    s    
 Mr   c                     || S t        |       } | j                         D ]N  }t        |j                        D ]4  \  }}t	        |t
              s|j                  |      |j                  |<   6 P | S r   )r   r  r*  r+  r   r&   renamed)r   rT  r   r   rZ  s        r   _mangle_definition_treerX    sp    ~

3-C  2ajj) 	2DAq!V$ !		& 1

1	22
 Jr   c           	      j   | j                   r5| j                   \  }d|v }|r|j                  d      rt        d      d|v }nd}d}|j                   r|j                   \  }t        |      }	nd }	|#|j                   D 
cg c]  }
|
j                   }}
|||t        |||	|r|      fS d       fS c c}
w )NrN   r^   z4Inlined rules (_rule) cannot use the ?rule modifier.rP   F)r   template_source)r+  r   r*   r   r   r"   )modifiers_treer   rl  priority_treer   mr  r   rO  r   r   s              r   _make_rule_tupler^    s    $$(ts+UVV(##q6#)??3a!''33['T\JP$&] ] ]VZ&] ] ] 4s   >B0c                       e Zd ZddZy)
DefinitionNc                 N    || _         || _        t        |      | _        || _        y r   )r  r   r  rl  rm  )r   r  r   rl  rm  s        r   r   zDefinition.__init__7  s"    	Fmr   r   N)r   r   r   r   r   r   r   r`  r`  6  s    r   r`  c                   n   e Zd ZU eed<   eeeef      ed<   e	eef   ed<   e	ee
f   ed<   ee   ed<   ddedeeeeef         dee	eef      ddfd	Zd
 Zd Zd dddZd dZd Zd Zd Zd!dededeeegef      ddfdZd Zd"deedf   dee   de	eef   deeegef      ddf
dZd#dZdefdZy)$GrammarBuilderglobal_keep_all_tokensimport_paths
used_files_definitions_ignore_namesFNr   c                 Z    || _         |xs g | _        |xs i | _        i | _        g | _        y r   )re  rf  rg  rh  ri  )r   re  rf  rg  s       r   r   zGrammarBuilder.__init__F  s3    &<#(.B$*35(*r   c                     i }t        |d      D ]B  \  }}|dk(  rdn
t        |      }||d|z   <   d|   x|d|z   <   }|j                         |d|z   <   D t         |j                  di |      )	Nr   r   r   r   )r   r   r  Typer   )r*  r"  titler*   format)	r   r  msgrW  r   r   r   postfixlowercase_types	            r   _grammar_errorzGrammarBuilder._grammar_errorN  s     a0 	<GAtFbAG%)D'!"6J76SSD'!"^%3%9%9%;D'!"		<
 :3::--..r   c                     |r/|d}|S t        |t              st        dt        |            |S |t	               }nt        |t              st        d      | j
                  rd|_        |S )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"   re  r   )r   r  rm  s      r   _check_optionszGrammarBuilder._check_optionsW  sx       -"kopwkx#z{{  %-5"#VWW***.'r   )r   c          	         || j                   v r|s)| j                  |d|       n|r| j                  |d|       |j                  d      r| j                  |d|       t        |||| j	                  ||            | j                   |<   y )Nz&{Type} '{name}' defined more than oncez+Cannot override a nonexisting {type} {name}rR  zDNames starting with double-underscore are reserved (Error at {name}))rh  rs  r   r`  ru  )r   r   r  r   rl  rm  r   s          r   _definezGrammarBuilder._defineg  s    4$$$##G-UW[\)VX\]??4 )oquv",Wc64CVCVW^`gCh"i$r   c                    || j                   vr| j                  |d|       | j                   |   }||j                  k7  r| j                  |d|       t        |      |j                  k7  r| j                  |d|       |j
                  | j                  |d|       |j
                  }t        |t              r|j                  dk(  sJ |j                  j                  d|       y )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   )rh  rs  r  r  rl  r   r   r/   r'  r+  insert)r   r   r  r   rl  rm  dbases           r   _extendzGrammarBuilder._extends  s    t((()acghd#aii)suyz=AHH$)acgh66>)WY]^ vv$%$))|*CCCQ$r   c                    t        |t              r| j                  j                  |       y t        |t              sJ |}|j
                  dk(  rt        |j                        dk(  r|j                  \  }|j
                  dk(  ryt        |j                        dk(  ra|j                  \  }|j
                  dk(  rD|j                  \  }t        |t              r&| j                  j                  |j                         y dt        | j                        z  }| j                  j                  |       t        d|t              | j                  |<   y )Nr   r   r   r   z__IGNORE_%dT)rm  )r   r"  ri  r   r/   r'  r  r+  r$   r   r`  r'   rh  )r   exp_or_namer   t2r  r   s         r   _ignorezGrammarBuilder._ignore  s   k3'%%k2k4000Avv%#ajj/Q*>jj77K'C,<,AKKFDyyG+ $%dH5 ..55dii@" #d&8&8"99D%%d+&0qBX&YDd#r   c                    t        |j                        dkD  r|j                  \  }}n|j                  \  }d }t        |t              r7t	        |j                        }|j                  }t        t        ||            }nat	        |j                  d d       }|s|j                  \  }t        d|z        |j                  d   }|j                  |xs |j                  i}|j                  dk(  rd }	n|dk(  r<	 t        j                  j                  t        j                  d   j                        }
n|}
|
rtt        |
t"              rAt#        |
j$                  t        j                  j'                  |
j                        d         }	nZt        j                  j'                  |
      d   }	n7t        j                  j                  t        j                  j(                        }	||	|fS # t         $ r d }
Y w xY w)Nr   r  z&Nothing was imported from grammar `%s`r   <string>__main__r   )r  r+  r   r/   r  rh  ri  r*   r   r'  r  r  abspathsysmodules__file__r  r  r  r  curdir)r   stmtgrammar_name	path_nodearg1dotted_pathrW  r3  r   r  	base_files              r   _unpack_importzGrammarBuilder._unpack_import  s   t}}!"mmOItJIDdD!	 2 23KMME3ue,-G	 2 23B 78K!**"#Kd#RSS%%b)DzzDLD#7#78G>>\)Iz)% "J0G0P0P QI )	i9 /	0B0BBGGMMR[R`R`DabcDd eI "i 8 ;IGGOOBGGNN;	Iw.. & % $I%s   9:G( (G65G6c                 |   |j                   dk(  rt        |j                   \  }}}}d}nb|j                  d   j                  }d}t	        |j                        dk(  rt        |j                  d         nt        }|j                  d   }d}t        fd	|D              } |      }t        |      }|||||fS )
Nr   Fr   r   r  r   r  Tc              3   .   K   | ]  } |        y wr   r   )rd  rO  rT  s     r   re  z4GrammarBuilder._unpack_definition.<locals>.<genexpr>  s     56!95s   )	r'  r^  r+  r   r  r   r'   r  rX  )r   r   rT  r   rl  r   optsr  s     `     r   _unpack_definitionz!GrammarBuilder._unpack_definition  s    99&6&F#D&#tG==#))DF,/,>!,C3t}}Q'(I_D--#CG5f55F$<D%c62Wc64//r   grammar_textr  rT  c                 ,   t        ||      }i }|j                  D ]`  }|j                  dk(  s| j                  ||      \  }}}		 ||   \  }
}||
k(  sJ ddj	                  |      z         |j                  |	       b |j                         D ]  \  }\  }}	| j                  |||	|        |j                  D ]m  }|j                  dv r  | j                  | j                  ||        2|j                  dk(  r1|j                  \  } | j                  | j                  ||      ddi r|j                  dk(  r.|j                  \  } | j                  | j                  ||        |j                  dk(  r| | j                  |j                    |j                  d	k(  rn|j                  D ]]  }t        |t              sJ |       t        |t              }||j                   }n ||j                         }| j                  ||d        _ X|j                  dk(  riJ |        | j"                  j                         D ci c]  \  }}|j$                  r||j&                    }}}t)        |       y # t        $ r ||	f||<   Y qw xY wc c}}w )
Nr   zInconsistent base_path for %s.r:   )r   r   r   Tr   r   r   )r3  r+  r'  r  rg  updater   r  	do_importrw  r  r|  r  r   r&   r$   r   rh  r  r   r  )r   r  r  rT  r   importsr  r  r  r3  import_base_pathimport_aliasesr  r   r  r   rz  r  s                     r   load_grammarzGrammarBuilder.load_grammar  s   lL9OQMM 	>DyyH$262E2EdL2Y/Y>7>{7K4$n$(88r:Z]`]e]efq]r:rr8"))'2	> 29 	D-K-)WNN;	7FC	D MM 	#Dyy,,d55dFCDj(]]d55a@P4Ph&]]d55a@Ah&> DLL$--0i'"mm 6F%ff5=v=5(:G~%{{%fkk2LLw56 h&"d"u3	#:  ,,224
ayy AFFl 
	 
 	 	*M   >+4g+=GK(>D
s   7I9#J9JJc                       fd}t        t        ||            } j                  j                         D ci c]  \  }}||v s|| c}} _        y c c}}w )Nc                     	 j                   |    }|j                  rg S t        |j                        t        |j                        z
  S # t        $ r g cY S w xY wr   )rh  r   r  r  r   r5  rl  )r   rz  r   s     r   rule_dependenciesz8GrammarBuilder._remove_unused.<locals>.rule_dependencies  sX    %%f- yy	%aff-AHH==	  	s   A AA)r5  r   rh  r  )r   usedr  _usedkr  s   `     r   _remove_unusedzGrammarBuilder._remove_unused  sP    	> C/01.2.?.?.E.E.GVda1PU:QTVVs   AAr  .r  r3  rS  c           	         |sJ t        dj                  |      ||      }t        j                  j                  | t        z   }| j
                  ||gng z   t        gz   }|D ]V  }	 t        |      r |||      \  }	}
nFt        j                  j                  ||      }	t        |	d      5 }|j                         }
d d d        t        
      }| j                  j                  |	|      |k7  rt        d      || j                  |	<   t        | j                  | j
                  | j                        }|j!                  |
|	|       |j#                  t%        ||             |j&                  D ]"  }|| j&                  v st)        d|d|d        | j&                  j*                  d
i |j&                    y  t        |d       J d|d	       # 1 sw Y   xY w# t,        $ r Y w xY w)NrR  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   )rU  rg  r  r  EXTrf  stdlib_loadercallableopenreadsha256_digestrg  getRuntimeErrorrd  re  r  r  r  rh  r*   r  r  )r   r  r  r3  rS  rT  r  r  sourcejoined_pathr  r  hgbr   s                  r   r  zGrammarBuilder.do_import  s   {TYY{3WkJww||[1C7""Y5JykPRSWdVee 	XFF#(.y,(G%K"$'',,v|"DKkF; (q vvx(
 "$'??&&{A6!;&'RSS/0,#D$?$?ARARTXTcTcdk6:!!#fg"67OO {Dt000*fjlx+yzz{ )!!((;2??;1	X6 / X  KV  X  X5-( ( s+   'AG!,G=G!G	G!!	G.-G.c           
      L   | j                   j                         D ]  \  }}|j                  }|j                  }t	        |      D ]>  \  }}|| j                   v rt        d|d|d      ||d | v s.t        d|d|d       |n|j                  d      D ]  }|j                  d   j                  }|j                  dd  }	||vs0|| j                   vr | j                  |j                  d|z  |       t        |	      t        | j                   |   j                        k7  st        | j                   |   j                        t        |	      }}
| j                  |j                  d	|
d
|d||        t        |      D ]4  }|| j                   vs||vs| j                  |j                  d||       6  t        | j                         j                  | j                        s7t        dt        | j                        t        | j                         z
  z        y )Nz'Template Parameter conflicts with rule z (in template rp   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!)rh  r  rl  r   r*  r*   r  r+  r   rs  r  r  r  r5  
issupersetri  )r   r   rz  rl  r   r   rO  tempr   r   r*  actuals               r   validatezGrammarBuilder.validate>  s3   ((..0 	{GD!XXF&&C!&) g1)))&ghjn'oppr
?&]^`d'eff	g {&67 	zmmA&++}}QR(f$$"3"33++AII7nqt7tvz{4yC(9(9#(>(E(E$FF+.t/@/@/E/L/L+MsSWy&++AII\dfl8nortxz	z *#. {d///Cv4E''		3npsuyz{1	{8 4$$%001C1CDY]`aeasas]twz{  |M  |M  xN  ^N   O  P  P Er   c                 r   | j                          g }g }| j                  j                         D ]p  \  }}|j                  |j                  |j
                  }}}|j                  r&t        |      dk(  sJ |j                  |||ff       \|j                  ||||f       r t        ||| j                        S rC  )r  rh  r  rl  r   rm  r  r  r   r  ri  )r   r_  r  r   rz  rl  r   rm  s           r   buildzGrammarBuilder.build^  s    		((..0 	?GD!%&XXqvvqyy'SVyy6{a'''  $g!78  $W!=>	? y)T-?-?@@r   )FNNrb  )z<?>Nr   )r   N)r   r   r   r   r  r   r
   r"  r   r   r`  r   r   rs  ru  rw  r|  r  r  r  r  r  r	   r  r  r  r  r   r   r   rd  rd  =  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   rd  c                     | j                         D ]  \  }}d }t        |t              rFt        j                  j                  |      r't        |d      5 }|j                         }d d d        nIt        |t              r9t        t              5  t        j                  | j                  d      }d d d        |t        |      }||k7  st        j                   d|z          y y# 1 sw Y   9xY w# 1 sw Y   ExY w)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  m  s     &&( 	cdC RWW^^D%9dV,  vvx   o.'" ?''.55g>?<%'>KK<tCD    ? ?s   C("C4(C1	4C=	c                     t        d|      }|j                  | d       t        |j                  j	                               S )zXReturns a list of paths to the lark grammars imported by the given grammar (recursively)Fr  )rd  r  r  rg  keys)grammarrf  builders      r   list_grammar_importsr    s8    UL1G*-""'')**r   c                 v    t        ||      }|j                  | |       |j                         |j                  fS r   )rd  r  r  rg  )r  r  rf  re  r  s        r   r  r    s6    3\BG&)==?G....r   rr  c                     t         j                  dk\  r4t        j                  | j	                  d      d      j                         S t        j                  | j	                  d            j                         S )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   rl  r   )xrR  r  os.pathr  r  collectionsr   r   r   r  astr   
contextlibr   typingr   r	   r
   r   r   r   r   r   utilsr   r   r   r   r   r   r   r   lexerr   r   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/   r0   r   visitorsr1   r2   r3   r4   r5   rS  IMPORT_PATHSr  r  r   rL  r  r  r  r  r   r   r$  r8  rA  rU  r]  rt  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r)  r-  r3  r8  rB  r"  rO  rU  rX  r^  r`  rd  r  r  r  r  r   r   r   <module>r     sE     
 "     T T T u u u E E 0 - ) ] ] ' h h ) a aD!|			%%%'% '% +	%
 &% '% &% '% 	;% &% '% &% $% &% (%  )!%" ,#%$ +%%& ,'%( *)%* *+%, '-%. */%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!y !04 0f) 8
F6 F6R .@*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   