
    bi                     r   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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/m0Z0m1Z1m2Z2m3Z3m4Z4 ddlm5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>m?Z@ ddlAmBZBmCZCmDZDmEZEmFZF  eDd      ZGdgZHdZIdZJ e3d      ZKi 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_ZLi d`dadbdcdddedfdgdhdidjdkdldmdnddoddpdqdrdsdtdudLdKdvdwdxdydzd{d|d}d~eJz  dddddddddddddZMi 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МZNdZOdZP G dӄ deB      ZQeG G dՄ deE             ZR G dׄ deC      ZS G dل deB      ZT G dۄ deE      ZU G d݄ deE      ZV G d߄ deE      ZWd ZXd ZYd ZZeG G d deE             Z[de%fdZ\ G d deF      Z] G d deE      Z^d Z_ G d de       Z` edd      Za G d d      Zb ebdeH      Zcd Zdd ZeeG G d deE             Zfd Zgd Zhddg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Zid Zjd&dZkd Zld Zmd&dendendeee<enf      fdZod'dZpd Zqd Zr G d d      Zs G d d       Ztd! Zug fd"Zvd# Zwd$endenfd%Zxy((  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	Serialize)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COMMENTrL   _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     L/home/cdr/jupyterlab/.venv/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 |       )NrO   r   r   rC   plusrG   starrm   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   r0   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   r0   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   staticmethodr0   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 )NrE   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   r9  r9    s    %r   r9  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   rE  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   rH  flagsrG  r+   r   r   r   r   _TERMINAL_NAMESr   r   upperrF  r   r   addr   rE  r   r   r   r%   )r   pr   	term_nametermdefr   s         r   rG  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_argsrG  r   r   r   rB  rB    s    p! ): ):r   rB  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   rX  __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   rX  rZ  )r   r[  r   s      r   r   z_ReplaceSymbols.template_usage  s_    tyy4::##$4tzz$7G6H1QR56PRVWW 0!T::r   N)r   r   r   rS  r   r   r   r   r   r   rV  rV    s    #2
;r   rV  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_defsrV  replacerr6  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   rs   r=   c              3   4   K   | ]  }|j                     y wr   r?  ).0r   s     r   	<genexpr>z0ApplyTemplates.template_usage.<locals>.<genexpr>  s     0FA0Fs   ru   c              3   4   K   | ]  }|d    k(  s|  yw)r   Nr   )re  r   r   s     r   rf  z0ApplyTemplates.template_usage.<locals>.<genexpr>  s     +V!1QUA+Vs   )r   joinrb  rO  r`  r  r   dictzipra  rX  r!  r   r&   )
r   r[  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   rS  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)re  r[  ss     r   rf  z_rfind.<locals>.<genexpr>  s     +aqwwqz+s   )r   )rs  choicess   ` r   _rfindru    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   rK   z/Literal ended unexpectedly (bad escaping): `%r`\\Uuxnftrz\"rg   ri   z\'z	u'''%s''')iternextStopIterationr+   replacer   SyntaxError)rs  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)re  fs     r   rf  z&_literal_to_pattern.<locals>.<genexpr><  s     -!qI~-s   r   r{   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)rw  rK   )rawz:Invariant failed: literal.type not in ["STRING", "REGEXP"])r   r   r   ru  alltyper+   r  r|  r   r   )r   v
flag_startrL  r;  rs  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 )NrG  )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  rw   rE   ry   rG  )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   psrP  s      r   rG  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re  r   s     r   rf  z2TerminalTreeToPattern.expansion.<locals>.<genexpr>t  s     7A!++-7   )r   r  rh  r  rL  )r   r  rG  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)rM   c              3   <   K   | ]  }|j                           y wr   r  r  s     r   rf  z3TerminalTreeToPattern.expansions.<locals>.<genexpr>  s     &Cq{{}&Cr  )r  sortrh  r  rL  )r   r  rG  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   rm      z{%d}r  z{%d,%d}z(?:rq   )r  r   r  r+   r   r  rL  )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 )NrO   )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 rD  r   r   r  s     r   r   zTerminalTreeToPattern.value  s    tr   N)r   r   r   rG  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   r0   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)r6   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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   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=rq   c              3   .   K   | ]  }|t         k(    y wr   )r   )re  r;  s     r   rf  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   rf  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: %srG   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!  rB  r  r^  r   r   r#   r   r   r   r   r9  r%  r-  r+  r   tupleanyr   empty_indicesr   r   r'   is_termr%   r   r$   r&   r6  r)   valuesr   rh  r   orderrn  r   r  r   r   debugr   r   ).r   r   r  r  r   rP  r  or`  r   	term_treer   r   transformerrE  anon_tokens_transfebnf_to_bnfrulesr   rm  	rule_treern  r   r  res_t_orule_tree_to_textsimplify_rulecompiled_rulesrule_contentr   r   r  exp_optionsr;  r   r   
duplicatesdupsr  r[  rs  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#  r0   r   __annotations__r#   r   __serialize_fields__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__C  s     (r   c                 f    t        |       j                  d| j                  d| j                  dS )Nro   , rq   )r  r   r  r  r   s    r   __repr__zFromPackageLoader.__repr__G  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osrh  pkgutilget_datadecode)	r   r  r  to_tryerrr  	full_pathtextr  s	            r   __call__zFromPackageLoader.__call__J  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   rS  r#  r  r   r   r  r
   r  r	   r  r   r   r   r  r  5  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 rq   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   r0   iter_subtreesid)	term_dictchangedr   
token_treeexpitem
term_valuer   r.  r;  idss              r   resolve_term_referencesr  f  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_   rK  )r   r#  isupperr%   r   r&   rs  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)NrO   )expand1r   )r   r   rL   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   rE  r;  r  r  xsr  r   rs  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_exceptionr0    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)Nr{   z1Unexpected input at line %d column %d in %s: 

%sz
, at line z column z

)r  r.  r,   get_contextr+   linecolumnr-   r0  r  r!  )r  r   r   r  r  contextr/  s          r   _parse_grammarr6    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: {ru   )
r   r-   r0  r  r.  rh  acceptsr-  r#  token)r/  error2r-  s      r   _error_reprr;    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   )rt  r   
feed_tokenr.   )noder  rP  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	predicaterB  r  rP  s        r   _search_interactive_parserrE    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   )rt  )rP  s    r   r  z7find_grammar_errors.<locals>.on_error.<locals>.<lambda>  s    bgklktktkvbv r   r   r   r{   T)r   r;  rE  rC  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   r{   )rM  c                      | d   j                   S rD  )r3  )r  s    r   r  z%find_grammar_errors.<locals>.<lambda>  s    !		 r   r   )r  r.  r)   r  rC  )r  r   rM  _treeerrors_by_lineelr  rL  s          @r   find_grammar_errorsrR    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   )rs  r4  base_mangler   s    r   manglez_get_mangle.<locals>.mangle  sL    <
Ats{!'12/ &*"AAr   r   )r   r4  rV  rW  s   ``` r   _get_manglerX    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  rW  r   r   r[  s        r   _mangle_definition_treer[    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 )NrO   r_   z4Inlined rules (_rule) cannot use the ?rule modifier.rQ   F)r   template_source)r,  r   r+   r   r   r#   )modifiers_treer   rm  priority_treer   mr  r   rP  r   r   s              r   _make_rule_tuplera    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  rm  rn  )r   r  r  rm  rn  s        r   r   zDefinition.__init__8  s"    	Fmr   r   N)r   r   r   r   r   r   r   rc  rc  7  s    r   rc  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   )rh  ri  rj  rk  rl  )r   rh  ri  rj  s       r   r   zGrammarBuilder.__init__G  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  msgrX  r   r   r   postfixlowercase_types	            r   _grammar_errorzGrammarBuilder._grammar_errorO  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#   rh  r   )r   r  rn  s      r   _check_optionszGrammarBuilder._check_optionsX  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}rU  zDNames starting with double-underscore are reserved (Error at {name}))rk  rv  r   rc  rx  )r   r   r  r  rm  rn  r   s          r   _definezGrammarBuilder._defineh  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   )rk  rv  r  r  rm  r  r   r0   r(  r,  insert)r   r   r  r  rm  rn  dbases           r   _extendzGrammarBuilder._extendt  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)rn  )r   r#  rl  r   r0   r(  r  r,  r%   r   rc  r(   rk  )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   r0   r  ri  rj  r+   r   r(  r  r  abspathsysmodules__file__r  r  r  r   curdir)r   stmtgrammar_name	path_nodearg1dotted_pathrX  r4  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   )re  rP  rW  s     r   rf  z4GrammarBuilder._unpack_definition.<locals>.<genexpr>  s     56!95s   )	r(  ra  r,  r   r  r   r(   r  r[  )r   r  rW  r   rm  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  rW  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   )r6  r,  r(  r  rh  updater   r  	do_importrz  r  r  r  r   r'   r%   r   rk  r  r  r  )r   r  r  rW  r  importsr  r  r  r4  import_base_pathimport_aliasesr  r   r  r   r}  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   )rk  r   r  r  r  r6  rm  )r   r}  r   s     r   rule_dependenciesz8GrammarBuilder._remove_unused.<locals>.rule_dependencies  sX    %%f- yy	%aff-AHH==	  	s   A AA)r6  r   rk  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  r4  rV  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)NrU  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  EXTri  stdlib_loadercallableopenreadsha256_digestrj  getRuntimeErrorrg  rh  r  r  r  rk  r+   r  r  )r   r  r  r4  rV  rW  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 rq   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!)rk  r  rm  r  r+  r+   r  r,  r   rv  r  r  r  r6  
issupersetrl  )r   r   r}  rm  r  r   rP  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 rD  )r  rk  r  rm  r  rn  r  r  r   r  rl  )r   r`  r  r   r}  rm  r  rn  s           r   buildzGrammarBuilder.build_  s    		((..0 	?GD!%&XXqvvqyy'SVyy6{a'''  $g!78  $W!=>	? y)T-?-?@@r   )FNNre  )z<?>Nr   )r   N)r   r   r   r   r  r   r
   r#  r   r   rc  r   r   rv  rx  rz  r  r  r  r  r  r  r	   r  r  r  r  r   r   r   rg  rg  >  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   rg  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  n  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  )rg  r  r  rj  keys)grammarri  builders      r   list_grammar_importsr    s8    UL1G*-""'')**r   c                 v    t        ||      }|j                  | |       |j                         |j                  fS r   )rg  r  r  rj  )r  r  ri  rh  r  s        r   r  r    s6    3\BG&)==?G....r   rs  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   ro  r   )yrS  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   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  r0   r1   r   visitorsr2   r3   r4   r5   r6   rT  IMPORT_PATHSr  r  r   rM  r  r  r  r  r   r   r%  r9  rB  rV  r^  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r0  r6  r;  rE  r#  rR  rX  r[  ra  rc  rg  r  r  r  r  r   r   r   <module>r     sP     
 "     T T T A  A  A 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
H6i H6V .@*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   