
    
`i                        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%ZwdS ((  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                       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dS )FindRuleSizekeep_all_tokensc                     || _         d S Nr   )selfr   s     e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/lark/load_grammar.py__init__zFindRuleSize.__init__   s    .    symreturnc                     t          |t                    r|j                            d           S t          |t                    r| j        p|j         S |t          u rdS J |            )Nr^   F)
isinstancer%   r   
startswithr$   r   
filter_out_EMPTY)r   r   s     r   _will_not_get_removedz"FindRuleSize._will_not_get_removed   sm    c;'' 	0x**3////c8$$ 	>'=s~+==&==5cur   argsNc              #      K   |D ]N}t          |t                    r|V  t          |t                    r|                     |          rdndV  MJ d S )Nr   r   )r   intr&   r   )r   r   as      r   _args_as_intzFindRuleSize._args_as_int   sy       	 	A!S!! Av&& 55a88?aaa????u	 	r   c                 F    t          |                     |                    S r   )sumr   r   r   s     r   r   zFindRuleSize.expansion       4$$T**+++r   c                 F    t          |                     |                    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      s        / / / / / D    eCK&8!9 iTSW>X    , , , , ,,# , , , , , ,r   r   c                   r    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dS )EBNF_to_BNFc                 L    g | _         i | _        d| _        d| _        d | _        d S )Nanonr   )	new_rulesrules_cacheprefixirule_optionsr   s    r   r   zEBNF_to_BNF.__init__   s-     r   innerc                 J    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;tv">>!r   c                 |    t          |          }| j                            ||| j        f           || j        |<   |S r   )r%   r   appendr   r   )r   keyr   r   ts        r   	_add_rulezEBNF_to_BNF._add_rule   sA    tZ1BCDDD !r   type_exprc           
         	 | j         |         S # t          $ ro |                     |          }t          |          }t	          dt	          d|g          t	          d||g          g          }|                     |||          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 	8 	8u--HH%%Al;'';D	**%  D >>$$77777	8s    A6BBc           
          ||||f}	 | j         |         S # t          $ r^ |                     d||fz            }t          dt          d|g|z  |g|z  z             g          }|                     |||          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 	7 	7'71a&'@AAHlRfX\TFQJ5N%O%O$PQQD>>#x66666	7s    A%A=<A=c           	      F   |df}	 | j         |         S # t          $ r| |                     d|fz            }t          dfdt	                    D             fdt	          |          D             z             }|                     |||          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   c                 @    g | ]}t          d g|z  gz             S r   r   ).0r   r  
target_opts     r   
<listcomp>z4EBNF_to_BNF._add_repeat_opt_rule.<locals>.<listcomp>4  s=     % % %?@;
j\ 9::% % %r   c                 F    g | ]}t          d gz  g|z  z             S r  r	  )r
  r   r   r   r  s     r   r  z4EBNF_to_BNF._add_repeat_opt_rule.<locals>.<listcomp>6  sA       ;<;
dVAX 566  r   )r   r   r   r   r   r   )	r   r   r  r  r  r   r   r   r   s	    ` ```   r   _add_repeat_opt_rulez EBNF_to_BNF._add_repeat_opt_rule  s    2 !VT5)		7#C(( 	7 	7 	7';q!f'DEEHl % % % % %DI!HH% % %     @Ea  %  D
 >>#x66666	7s    BB B r   mnmxc           	      ^   |t           k     r-t          dfdt          ||dz             D                       S }t          |t                    D ]\  }}|                     |||          }||k    r|S ||z
  dz   }t          |t                    }}	t          dg           }
|dd         D ]6\  }}|                     |||	|
          }
|                     |||	          }	7|d         \  }}|                     |||	|
          }
t          dt          d|g|
gz             g          S )z\Generates a rule tree that repeats ``rule`` exactly between ``mn`` to ``mx`` times.
        r   c                 8    g | ]}t          d g|z            S r  r	  )r
  nr   s     r   r  z1EBNF_to_BNF._generate_repeats.<locals>.<listcomp>@  s)    $\$\$\QRdVaZ%@%@$\$\$\r   r   r   N)REPEAT_BREAK_THRESHOLDr   r   r   SMALL_FACTOR_THRESHOLDr  r  )r   r   r  r  	mn_targetr   r  diffdiff_factorsdiff_targetdiff_opt_targets    `         r   _generate_repeatszEBNF_to_BNF._generate_repeats;  sp    &&&l$\$\$\$\%PRTVYZTZJ[J[$\$\$\]]] 	!"&<== 	E 	EDAq--aItDDII88Bw{$T+ABB["-- "% 	I 	IDAq"771k?\`aaO//1k4HHKKB133Aq+X\]],K)?P1P!Q!Q RSSSr   opc                 @   |j         dk    r"t          dg           }t          d||g          S |j         dk    r|                     d|          S |j         dk    r6|                     d|          }t          d|t          dg           g          S |j         dk    r{t          |          d	k    rt	          |d
                   x}}n9t          t          |          \  }}||k     s|d
k     rt          d|||fz            |                     |||          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)   8s??{B''ElT5M222X__
 ))&$777X__
 --fd;;HlXr+r/B/B$CDDDX__4yyA~~d1g,,&RRS$B77b1ff&'PTXZ\^`Sa'abbb))$B777bur   c                     | j         o| j         j        }t          |                              |          }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  sZ    +Q0A0Q 11;;DAA	;9 455,u...r   N)r   r   r   r   strr   r   r/   r   r  r  r   r  r   r   r   r   r   r   r   r      s        ! ! !    
  
8s 
8$ 
8 
8 
8 
87 7 7(#7 #7 #7JTd T T T T T T> 5    :/$ / / / / / /r   r   c                   H    e Zd Zedefd            ZdefdZd ZdefdZdS )SimplifyRule_Visitorr   c                 t    |                      | j                  r	 |                      | j                  d S d S r   )expand_kids_by_datadatar   s    r   _flattenzSimplifyRule_Visitor._flatten  sK    &&ty11 	 &&ty11 	 	 	 	 	r   c                 6                                     t          j                  D ]k\  }t          |t                    rQ|j        dk    rFd_         fdt          |j                  D             _                                          d S ld S )Nr   c                     g | ]D                     t          d fdt          j                  D                                 ES )r   c                 *    g | ]\  }}|k    rn|S r   r   )r
  jotherr   options      r   r  z=SimplifyRule_Visitor.expansion.<locals>.<listcomp>.<listcomp>  sB     =g =g =gAIE HIAvvVVSX =g =g =gr   )visitr   	enumeratechildren)r
  r5  r   r   r   s    @r   r  z2SimplifyRule_Visitor.expansion.<locals>.<listcomp>  s     !K !K !K%+ "&B{ =g =g =g =g =gMVW[WdMeMe=g =g =g -h -h "i "i !K !K !Kr   )r/  r7  r8  r   r/   r-  r)   )r   r   childr   s   `` @r   r   zSimplifyRule_Visitor.expansion  s     	d!$-00 	 	HAu%&& 5:+E+E(	!K !K !K !K !K !K/9%./I/I!K !K !K d###	 	r   c                     |j         \  }}|j        dk    rLg }|j         d         j         D ]'}|                    t          d||g                     (d|_        ||_         d S d S )Nr   r   r   )r8  r-  r   r   )r   r   r   
alias_namealiasesr9  s         r   r   zSimplifyRule_Visitor.alias  sy    =j9$$Gq)2 A Ar'E:+>??@@@@$DI#DMMM %$r   c                     |                      |           t          t          |j                            t          |j                  k    rt	          |j                  |_        d S d S r   )r/  r"  setr8  r)   )r   r   s     r   r   zSimplifyRule_Visitor.expansions  sX    ds4=!!""c$-&8&888&t}55DMMM 98r   N)	r   r   r   staticmethodr/   r/  r   r   r   r   r   r   r*  r*  ~  s~        t    \d    ,$ $ $6t 6 6 6 6 6 6r   r*  c                        e Zd Zd Zd Zd ZdS )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                 D    |\  \  }}}|J ||d|f            ||j         fS )NrD   r   )r   rC  r   _aliasr   s        r   r   zRuleTreeToText.alias  s6    %&"FU~~y#v>~~~%*$$r   N)r   r   r   r   r   r   r   r   r   rA  rA    sA            % % % % %r   rA  c                   .    e Zd ZdZd Zed             ZdS )PrepareAnonTerminalszfCreate a unique list of anonymous terminals. Attempt to give meaningful names to them when we add themc                 ~    || _         d | j         D             | _        d |D             | _        d| _        d | _        d S )Nc                     h | ]	}|j         
S r   rG  r
  tds     r   	<setcomp>z0PrepareAnonTerminals.__init__.<locals>.<setcomp>  s    :::R:::r   c                     i | ]
}|j         |S r   )patternrM  s     r   
<dictcomp>z1PrepareAnonTerminals.__init__.<locals>.<dictcomp>  s    @@@RZ@@@r   r   )	terminalsterm_setterm_reverser   r   )r   rS  s     r   r   zPrepareAnonTerminals.__init__  sK    "::4>:::@@i@@@ r   c                    |j         }|| j        v r2|j        | j        |         j        j        k    rt	          d|z            d }t          |t                    r	 | j        |         j        }n# t          $ r 	 t          |         }ne# t          $ rX |rSt          |          rDt          |d                   r/|                                | j        vr|                                }Y nw xY w|| j        v rd }Y n?w xY wt          |t                    r|| j        v r| j        |         j        }n
J |            |d| j        z  }| xj        dz  c_        || j        vrY|| j        vsJ | j                            |           t#          ||          }|| j        |<   | j                            |           | j        r| j        j        rdnt          |t                    }t-          ||          S )Nz+Conflicting flags for the same terminal: %sr   Fz	__ANON_%dr   r   )r   rU  flagsrQ  r*   r   r   r   r   _TERMINAL_NAMESr   r   upperrT  r   r   addr   rS  r   r   r   r$   )r   pr   	term_nametermdefr   s         r   rQ  zPrepareAnonTerminals.pattern  s)   !!!ag1B11E1M1S&S&SMPQQRRR	a$$ 	% -a05		 	% 	% 	%2 / 6II 2 2 2 2!6!6 2;uQx;P;P 2UZU`U`UbUbjnjwUwUw$)KKMM	2 -- $I	% 9%% 	D%%% -a05	!OO5#df,IFFaKFFDM))D-----Mi(((!)Q//G#*Da N!!'***"/tD4E4UtUU[efgis[t[t
	j9999s7   A. .
C:9BC:AC)&C:(C))C:9C:N)r   r   r   __doc__r   inline_argsrQ  r   r   r   rJ  rJ    sD        pp! ! ! ): ): [): ): ):r   rJ  c                   $    e Zd ZdZd Zd Zd ZdS )_ReplaceSymbolszHelper for ApplyTemplatesc                     i | _         d S r   )namesr   s    r   r   z_ReplaceSymbols.__init__  s    


r   c                     t          |          dk    rGt          |d         t                    r,|d         j        | j        v r| j        |d         j                 S |                     d|d           S )Nr   r   r   )r"  r   r&   r   rd  __default__)r   cs     r   r   z_ReplaceSymbols.value  s`    q66Q;;:adF33;!	TZ8O8O:adi((D111r   c                     |d         j         }|| j        v r.|                     d| j        |         g|dd          z   d           S |                     d|d           S )Nr   r   r   )r   rd  rf  )r   rg  r   s      r   r   z_ReplaceSymbols.template_usage  sd    ty4:##$4tz$7G6H1QRR56PRVWWW 0!T:::r   N)r   r   r   r_  r   r   r   r   r   r   rb  rb    sG        ##  2 2 2
; ; ; ; ;r   rb  c                       e Zd ZdZd Zd ZdS )ApplyTemplateszIApply the templates, creating new rules that represent the used templatesc                 `    || _         t                      | _        t                      | _        d S r   )	rule_defsrb  replacerr>  created_templates)r   rl  s     r   r   zApplyTemplates.__init__  s(    "'))!$r   c                 ^  	 |d         j         	|dd          }	dd                    d |D                       d}|| j        vr| j                            |           	fd| j        D             \  \  }}}}t          |          t          |          k    s
J |            t          |          }t          t          ||                    | j	        _
        | j	                            |           | j                            |g |t          |          f           t          |          S )Nr   r   rr   r<   c              3   $   K   | ]}|j         V  d S r   rG  )r
  r   s     r   	<genexpr>z0ApplyTemplates.template_usage.<locals>.<genexpr>  s$      0F0FA0F0F0F0F0F0Fr   rt   c              3   4   K   | ]}|d          k    |V  dS )r   Nr   )r
  r   r   s     r   rq  z0ApplyTemplates.template_usage.<locals>.<genexpr>  s,      +V+V!1QUA+V+Vr   )r   joinrn  r[  rl  r"  r   dictziprm  rd  r&  r   r%   )
r   rg  r   result_name_nparamsr   optionsresult_treer   s
            @r   r   zApplyTemplates.template_usage	  s-   tyu"&$$0F0F0F0F0F(F(F(F(FGd444"&&{333+V+V+V+Vt~+V+V+V)'Rwv;;#d))+++T+++"4..K"&s64'8'8"9"9DMM##K000N!!;K'ARAR"STTT;'''r   N)r   r   r   r_  r   r   r   r   r   rj  rj    s8        SS' ' '
( ( ( ( (r   rj  c                 :     t           fd|D                       S )Nc              3   B   K   | ]}                     |          V  d S r   )rfind)r
  rg  ss     r   rq  z_rfind.<locals>.<genexpr>  s-      ++aqwwqzz++++++r   )r   )r~  choicess   ` r   _rfindr    s&    ++++7++++++r   c                    d}t          |           }|D ]X}||z  }|dk    rK	 t          |          }n # t          $ r t          d| z            w xY w|dk    r|dz  }n	|dvr|dz  }||z  }Y|                    dd                              dd	          }d
|z  }	 t          |          } n"# t          $ r}t          | |          d }~ww xY w| S )Nr   rJ   z/Literal ended unexpectedly (bad escaping): `%r`\\Uuxnftrz\"rf   rh   z\'z	u'''%s''')iternextStopIterationr*   replacer   SyntaxError)r~  wr   r  n2to_evales          r   eval_escapingr    s"   
AQA  	Q99Z!WW  Z Z Z"#TWX#XYYYZTzzV9$$T	GA			%%%c511AAoG!!! ! ! !1a   ! Hs!   2AB- -
C7CCc                    t          | t                    sJ | j        }t          |d          dz   }|dk    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-|                    dd          }t          ||| j                  S | j        dk    rt          ||| j                  S J d            )Nz/"r   r   c              3   (   K   | ]}|t           v V  d S r   )	_RE_FLAGS)r
  fs     r   rq  z&_literal_to_pattern.<locals>.<genexpr><  s&      --!qI~------r   r   rz   z*You cannot put newlines in string literalsr   rC  zLYou can only use newlines in regular expressions with the `x` (verbose) flagr  z"/r   z$Empty terminals are not allowed (%s)r  rJ   )rawFz:Invariant failed: literal.type not in ["STRING", "REGEXP"])r   r   r   r  alltyper*   r  r  r   r   )r   v
flag_startrX  rC  r~  s         r   _literal_to_patternr  6  s   gu%%%%%A4"J>>>>jkkNE--u-----44u44-|xDAIIGHHH|xDAII#U2B2B 9 : : 	: 	
+:+AQ41R5==QqTT\\\)	!B$AaABwwAGKLLL|xIIfd##!U6666		!	!Ew}5555RRRRur   c                       e Zd Zd Zd ZdS )PrepareLiteralsc                 >    t          dt          |          g          S )NrQ  )r   r  )r   r   s     r   r   zPrepareLiterals.literalY  s    )1'::;<<<r   c                 L   |j         |j         cxk    rdk    sn J |j        dd         }|j        dd         }t          t          |                    t          t          |                    cxk    rdk    sn J d|d|d}t	          dt          |          g          S )Nr   r   r  rv   rD   rx   rQ  )r  r   r"  r  r   r   )r   r   endregexps       r   r   zPrepareLiterals.range\  s    zSX1111111111AbD!i"o=''((Cc0B0B,C,CHHHHqHHHHHHH#eeSSS))i//0111r   N)r   r   r   r   r   r   r   r   r  r  W  s2        = = =2 2 2 2 2r   r  r   c                 "    t          | d          S )Nr   )r   )r  	flags_sets     r   _make_joined_patternr  e  s    VR   r   c                   j    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dS )TerminalTreeToPatternc                     |\  }|S r   r   )r   psr\  s      r   rQ  zTerminalTreeToPattern.patterni  s    r   itemsr   c                     |st          d          S t          |          dk    r|d         S d                    d |D                       }t          |d |D                       S )Nr   r   r   c              3   >   K   | ]}|                                 V  d S r   	to_regexpr
  r   s     r   rq  z2TerminalTreeToPattern.expansion.<locals>.<genexpr>t  s*      77A!++--777777r   c                     h | ]	}|j         
S r   rX  r  s     r   rO  z2TerminalTreeToPattern.expansion.<locals>.<setcomp>u  s    -E-E-E!ag-E-E-Er   )r   r"  rs  r  )r   r  rQ  s      r   r   zTerminalTreeToPattern.expansionm  sm     	"b>>!u::??8O''7777777#G-E-Eu-E-E-EFFFr   expsc                     t          |          dk    r|d         S |                    d            dd                    d |D                       z  }t          |d |D                       S )	Nr   r   c                 J    | j          | j         t          | j                   fS r   )	max_width	min_widthr"  r   rC  s    r   <lambda>z2TerminalTreeToPattern.expansions.<locals>.<lambda>}  s    !+|c!'ll] K r   )r   z(?:%s)rL   c              3   >   K   | ]}|                                 V  d S r   r  r  s     r   rq  z3TerminalTreeToPattern.expansions.<locals>.<genexpr>  s*      &C&Cq{{}}&C&C&C&C&C&Cr   c                     h | ]	}|j         
S r   r  r  s     r   rO  z3TerminalTreeToPattern.expansions.<locals>.<setcomp>  s    -D-D-D!ag-D-D-Dr   )r"  sortrs  r  )r   r  rQ  s      r   r   z TerminalTreeToPattern.expansionsw  sx    t99>>7N 			KK	LLLchh&C&Cd&C&C&CCCD#G-D-Dt-D-D-DEEEr   c                    |d d         \  }}|dk    rot          |          dk    rdt          |d                   z  }nXt          t          |dd                    \  }}||k     rt          d|||fz            d||fz  }nt          |          dk    sJ t	          d|                                d||j                  S )	N   rl      z{%d}r!  z{%d,%d}z(?:rp   )r"  r   r#  r*   r   r  rX  )r   r   r   r  r  r  s         r   r   zTerminalTreeToPattern.expr  s    !H	r994yyA~~c$q'll*S$qrr(++B77&'PTY[]_aSb'bccc"b)t99>>>>yu'8'8'8'8""=u{KKKr   c                 4    |                      |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 Nr   r   r   r  s     r   r   zTerminalTreeToPattern.value  s    tr   N)r   r   r   rQ  r   r   r   r   r   r   r   r   r   r   r   r  r  h  s          GtG} G G G G G	FtG} 	F 	F 	F 	F 	FLG L L L L' ' 'a a a    r   r  c                       e Zd Zd ZdS )ValidateSymbolsc                 J    |\  }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                 F    t          d                              |           S )z#Deepcopy tree `t` without recursionF)r5   r&  r   s    r   nr_deepcopy_treer    s    #E**44Q777r   c            	       X   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dS )	Grammar	term_defs.rl  r   r   Nc                 0    || _         || _        || _        d S r   )r  rl  r   )r   rl  r  r   s       r   r   zGrammar.__init__  s    ""r   c           	      V
   #$% d  j         D             }d  j        D             }|D ]_\  }\  }}|t          |                    d                    }t	          |          dk    r|d         j        st          d|z            `t                      t                      z  ##fd|D             }	t          |	          }
t                      t                      z  |
z  ##t          |          z  #t                      }g }d}|t	          |          k     r||         \  }}}}|dz  }t	          |          dk    r9|r|j        rt          d	          nd }||_        ||_        ||
_        #                    |          }|                    |          }|                    |||f           |t	          |          k     ||j        z  }t	          |          t	          d
 |D                       k    s
J d            t)                      }t+                      }g }|D ]T}|\  }}}|                    |           |                    |          }t/          |          D ]\  }\  }}|r+|                    d          rt          d|d|d          t3          d |D                       }t5          |          r1t7          |          pt                      }||_        d |D             }n|}|D ]G}t;          |t<                    sJ |j        r'|r%|j        rt;          |t@                    sJ d|_!        HtE          tG          |          ||||          }|                    |           Vt	          tI          |                    t	          |          k    rtK          |d           }|&                                D ]}}t	          |          dk    rh|d         j'        r/t          dd(                    d |D                       z            t	          d |D                       t	          |          k    sJ ~t          tS          |                    }	 t	          |          } d |D             $$d |D             z  $tU          |$fd          \  }}!|!D ]}"tW          j,        d|"           t	          |          | k    rnodk    rEd |D             %tU          |	 %fd          \  }	}!|!rtW          j,        dd  |!D                        |	| j-        fS )!Nc                 @    g | ]\  }\  }}|t          |          |ffS r   r  )r
  r  r   r\  s       r   r  z#Grammar.compile.<locals>.<listcomp>  s3    SSSyq&1aa*1--q12SSSr   c                 >    g | ]\  }}}}||t          |          |fS r   r  )r
  r  r\  r   os        r   r  z#Grammar.compile.<locals>.<listcomp>  s2    UUU
1aa,Q//3UUUr   r   r   r   zTerminals cannot be empty (%s)c                 h    g | ].\  }\  }}|
t          |                    |          |          /S r   )r   r&  )r
  r   	term_treer   transformers       r   r  z#Grammar.compile.<locals>.<listcomp>  sW     P P P44	8YP[{'<'<Y'G'GRR P P Pr   Tr   c                     h | ]\  }}}|	S r   r   )r
  r   _t_os       r   rO  z"Grammar.compile.<locals>.<setcomp>  s    !A!A!A<4R$!A!A!Ar   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    V  d S r   r   r
  rC  s     r   rq  z"Grammar.compile.<locals>.<genexpr>  s&      %C%CAai%C%C%C%C%C%Cr   c                 (    g | ]}|t           k    |S r   r  r  s     r   r  z#Grammar.compile.<locals>.<listcomp>  s     C C CqFr   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  V  
dS )z
  * %sNr   r  s     r   rq  z"Grammar.compile.<locals>.<genexpr>  s&      4R4RZ!^4R4R4R4R4R4Rr   c                 6    h | ]}|j         |j        |j        fS r   )r   orderry  )r
  rs     r   rO  z"Grammar.compile.<locals>.<setcomp>  s%    LLL!!'19 =LLLr   c                 f    h | ].}|j         D ]$}t          |t                    r||j        k    "|%/S r   )r   r   r%   origin)r
  r  r~  s      r   rO  z"Grammar.compile.<locals>.<setcomp>  sT     / / /%&[/ / !)![99/ !"QX  !.r   c                 ,    h | ]}t          |          S r   )r%   r
  r~  s     r   rO  z"Grammar.compile.<locals>.<setcomp>  s    999a;q>>999r   c                     | j         v S r   )r  )r  
used_ruless    r   r  z!Grammar.compile.<locals>.<lambda>  s    QXYcMc r   zUnused rule: %srF   c                 Z    h | ](}|j         D ]}t          |t                    |j        )S r   )r   r   r$   r   )r
  r  r   s      r   rO  z"Grammar.compile.<locals>.<setcomp>&  sO     = = =Q*++= =%&$.q($;$;=!& = = = =r   c                 D    | j         v p| j         j        v p| j         v S r   )r   r   )r   r   terminals_to_keep
used_termss    r   r  z!Grammar.compile.<locals>.<lambda>)  s?    16ZCW  DP[\[aeiep[p  DPtutz  P  uP r   zUnused terminals: %sc                     g | ]	}|j         
S r   rG  r
  r   s     r   r  z#Grammar.compile.<locals>.<listcomp>+  s    5M5M5Maf5M5M5Mr   ).r  rl  list	find_datar"  r8  r*   r  r  rJ  r  rj  r   r   r"   r   r   r&  r   r   rA  r*  r6  r7  r   tupleanyr   empty_indicesr   r&   is_termr$   r   r#   r%   r>  r(   valuesr   rs  r   r   r   debugr   )&r   r   r  r  rl  r   r  r   r   rS  anon_tokens_transfebnf_to_bnfrulesr   rx  	rule_treery  r   r   resrule_tree_to_textsimplify_rulecompiled_rulesrule_contentr   r   r  exp_optionsr   r   
duplicatesdupsrg  unusedr  r  r  r  s&   ` `                                @@@r   compilezGrammar.compile  s{    TSDNSSS	UUdnUUU	 ,5 	L 	L'D'9h i11+>>??J:!##JqM,B#"#Cd#JKKK%''*?*A*AAP P P P8AP P P	 2)<<%''/*;*;;>PP 	~i000 "mm#i..  /8|,D&)WFA6{{a@GmGLcm;t<<<<imL'3K$!%K.:+((33D#--d33CLL$W-... #i..   	&&5zzS!A!A5!A!A!ABBBBBD\BBB +,,,..%'! 	, 	,L".D$%%%*44T::J)2:)>)> , ,%%Iu eT__S11 e&,  X\  X\  X\  ^c  ^c  ^c  (d  e  e  e %%C%C%C%C%C C C}%% *"&w--"@;==K0=K- C CI C C CII")K$ / /C%c622222{ /{ /{7R /)#x88888).K--y!UKPP%%d++++%,* s>""##s>':':::!.++>>J"))++ [ [t99q==Aw( T*  ,H-/WW4R4RT4R4R4R-R-R,S T T T LLtLLLMMQTUYQZQZZZZZ "*^"<"<==N	N##A/ /^ / / /J 9959999J%2>CcCcCcCc%d%d"NF 3 3.2222>""a''	 ##= =. = = =J !.i  :P  :P  :P  :P  :P  :P  !Q  !QIv O35M5Mf5M5M5MNNN.$+55r   )r   r   r   r   r	   r(  r/   r   __annotations__r"   r   r   r#   r  r   r   r   r  r    sJ        E#uT3Y//01111E#uS#XkABCC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 {6 {6 {6 {6 {6 {6r   r  PackageResourcezpkg_name pathc                       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dS )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_pathsr   r   Nc                 "    || _         || _        d S r   )r  r  )r   r  r  s      r   r   zFromPackageLoader.__init__A  s     (r   c                 P    t          |           j        d| j        d| j        dS )Nrn   , rp   )r  r   r  r  r   s    r   __repr__zFromPackageLoader.__repr__E  s-    #Dzz222DMMM4CTCTCTUUr   	base_pathgrammar_pathc                    || j         }n;t          |t                    r|j        | j        k    rt	                      |j        g}d }|D ]}t          j                            ||          }	 t          j	        | j        |          }t          | j        |          |r|
                                ndfc S # t          $ r}|}Y d }~}d }~ww xY wt	          d          |)Nr   z"Cannot find grammar in given paths)r  r   r   r  IOErrorpathosrs  pkgutilget_datadecode)	r   r
  r  to_tryerrr  	full_pathtextr  s	            r   __call__zFromPackageLoader.__call__H  s   &FF i99  Y=OSWS`=`=`iin%F 	b 	bDT<88Ib(/(8	(R(R
 't}i@@TXC`4;;===^`aaaa	     :;;Ds   -B66
C CC)r  )r   r   r   r_  r(  r  r   r   r	  r
   r   r	   r  r   r   r   r  r  3  s           MMM3-) ) )HSM )T ) ) ) )V V VE%c?(B"C ESV E[`apruau[v E E E E E Er   r  larkc           	         	 d}|                                  D ]\  }}||                    d          D ]}|j        \  }t          |t                    rt          d|d|d          t          |t                    rE	 | |j                 }n%# t          $ r t          d|j        z            w xY w|J ||j        d<   d}t          |t                    sJ |sn|                                  D ]R\  }}|rK|j        D ]C}d	 |
                                D             }	t          |          |	v rt          d
|z            DSd S )NTFr   z'Rules aren't allowed inside terminals (z in rp   z!Terminal used but not defined: %sr   c                 ,    g | ]}t          |          S r   )idr  s     r   r  z+resolve_term_references.<locals>.<listcomp>  s    <<<r!uu<<<r   zNRecursion in terminal '%s' (recursion is only allowed in rules, not terminals))r  r  r8  r   r%   r*   r$   r   r   r/   iter_subtreesr  )
	term_dictchangedr   
token_treeexpitem
term_valuer   r9  idss
             r   resolve_term_referencesr$  d  s    ) 1 1 	2 	2D*!!++G44 2 2dK00 2&,]a]a]acgcgcg'hiiih// 	2\%.ty%9

# \ \ \*+NQUQZ+Z[[[\%111&0CLO"GG%dD1111112  	),  oo'' @ @
d 	@ @ @<<e&9&9&;&;<<<d88s??&'wz~'~ #	@ @s   B"B1c                     t          | t                    sJ |                                 r$t          | |                     d                    nt          |           S Nr^   rW  )r   r(  isupperr$   r   r%   r~  s    r   symbol_from_strcaser)    sP    a89		W8A!,,s"3"34444UVWr   c                       e Zd Zd Zd ZdS )PrepareGrammarc                 d    t          t          |          |                    d                    S r&  )r$   r(  r   r   r   s     r   r   zPrepareGrammar.terminal  s'    D		dooc.B.BCC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+    s5        D D D' ' ' ' 'r   r+  c                 Z    | j         dk    sJ d |                     d          D             S )Nr   c                 N    h | ]"}|                     d            D ]	}|j        
#S )c                 ,    t          | t                    S r   )r   r&   r  s    r   r  z._find_used_symbols.<locals>.<setcomp>.<lambda>  s    Z6-B-B r   )scan_valuesr   )r
  rC  r   s      r   rO  z%_find_used_symbols.<locals>.<setcomp>  sW     E E Eq]]#B#BCCE E F E E E Er   r   )r-  r  r.  s    r   _find_used_symbolsr3    sG    9$$$$E EDNN;77 E E E Er   c                     	 t           j        S # t          $ r d t                                          D             } d t
                                          D             }d |D             }t          |t                                                    }dd l	}t          | |g d          }t          ||dg          }d|_        d|_        t          ||d           t           _        t           j        cY S w xY w)	Nc                 N    g | ]"\  }}t          |t          |                    #S r   )r   r   )r
  r   r   s      r   r  z_get_parser.<locals>.<listcomp>  s.    ^^^[T5[y'7'788^^^r   c           	          g | ]>\  }}|                     d           |t          |                    d                     f?S )rN   )expand1)lstripr"   r   )r
  r   rC  s      r   r  z_get_parser.<locals>.<listcomp>  sV     . . .D! ++c""A{4??3;O;O'P'P'PQ . . .r   c           
          g | ]W\  }}}t          |          D ]A\  }}t          t          |          d  |                                D             |d|          BXS )c                 ,    g | ]}t          |          S r   )r)  r  s     r   r  z*_get_parser.<locals>.<listcomp>.<listcomp>  s!    &Q&Q&Q!':1'='=&Q&Q&Qr   N)r7  r#   r%   split)r
  r  xsr  r   rC  s         r   r  z_get_parser.<locals>.<listcomp>  s     B B BQA9R==B B+/1a k!nn&Q&Qqwwyy&Q&Q&QSTVZ\]^^ B B B Br   r   )r   r   rK   r   basiclalr)_get_parsercacheAttributeError	TERMINALSr  RULESr   r   create_callbackrer    r!   
lexer_typeparser_typer   )rS  r  callbackrE  
lexer_confparser_confs         r   r?  r?    s   !   ! ! !^^IOOL]L]^^^	. .${{}}. . .B B!&B B B $E2..>>@@			y".L.L.LMM
 7)<< '
"(+JTJJ    !s    C!C21C2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                 ^    |                     | t          d          }|r|S d|j        v rdS d S )NT)use_acceptsr   zExpecting a value)match_examplesGRAMMAR_ERRORSexpected)parser  errors      r   _translate_parser_exceptionrR    sD      D II 	'L##&& $#r   c           
         	 t                                          | dz   |          }n# t          $ r:}|                    |           }t	          d|j        |j        ||fz            d }~wt          $ rb}|                    |           }t          t                      j        |          }|r$t	          |d|j        d|j        d|           d }~ww xY wt                      
                    |          S )Nrz   z1Unexpected input at line %d column %d in %s: 

%sz
, at line z column z

)r?  rP  r+   get_contextr*   linecolumnr,   rR  r+  r&  )r  r   r   r   r  contextrQ  s          r   _parse_grammarrX    s   }}""4$;66 > > >--%%PFAHdG<= > > 	>   --%%+KMM,?CC 	f555!&&&RSRZRZRZ\c\cdeee %%d+++s!   %( 
C5A''C4ACCc                    t          | t                    rat          t                      j        |           }|r|S d                    | j        p| j                  }dt          | j	                  d|dS t          |           S )Nr  zUnexpected token z. Expected one of: {rt   )
r   r,   rR  r?  rP  rs  acceptsrO  r(  token)rQ  error2rO  s      r   _error_reprr]    s    %)) ,[]]-@%HH 	M99U]<en==?B5;?O?O?O?OQYQYQYZZ5zzr   c                 `    d }t          d| fg|          D ]\  }} ||          r||fc S d S )Nc              3      K   | \  }}|                                 D ]B}t          |d          }	 |                    |          }||fz   |fV  3# t          $ r Y ?w xY wd S )Nr   )r  r   
feed_tokenr-   )noder  r\  choicer   new_ps         r   expandz*_search_interactive_parser.<locals>.expand  s      aiikk 	. 	.Ffb!!A.Q fY&-----    		. 	.s   A
AAr   )r   )interactive_parser	predicaterd  r  r\  s        r   _search_interactive_parserrg    se    	. 	. 	. "B(:#;"<fEE  a9Q<< 	7NNN	 r   r  c                     g fd}t                                          | dz   ||          }t          d           }d |                                D             D ]}d |d         _        S )Nc                 P                        | t          |           f           t          | j                                        d           \  }}|D ]*}| j                            t          |d                     +| j                            t          dd                     dS )Nc                 .    d|                                  v S )Nr   )r  )r\  s    r   r  z7find_grammar_errors.<locals>.on_error.<locals>.<lambda>  s    bgklktktkvkvbv r   r   r   rz   T)r   r]  rg  re  as_immutabler`  r   )r  
token_pathr^   
token_typeerrorss       r   on_errorz%find_grammar_errors.<locals>.on_error  s    q+a..)*** 313G3T3T3V3VXvXvww
A$ 	C 	CJ ++E*b,A,ABBBB	''eT(:(:;;;tr   rz   )ro  c                     | d         j         S r  )rU  )r  s    r   r  z%find_grammar_errors.<locals>.<lambda>  s    !	 r   c                     g | ]
}|d          S )r   r   )r
  els     r   r  z'find_grammar_errors.<locals>.<listcomp>  s    666be666r   r   )r?  rP  r(   r  re  )r  r   ro  _treeerrors_by_liner  rn  s         @r   find_grammar_errorsru    s    F     MMtUXFFEf&9&9::N66n3355666F ' '"&!Mr   c                       fd}|S )Nc                     | v r	|          } n$| d         dk    rdd| dd          } nd| }  |           } | S )Nr   r^   __r   r   )r~  r<  base_mangler   s    r   manglez_get_mangle.<locals>.mangle  sh    <<
AAts{{{!'122/ &*"AAr   r   )r   r<  ry  rz  s   ``` r   _get_mangler{    s/    
 
 
 
 
 
 
 Mr   c                     || S t          |           } |                                 D ]N}t          |j                  D ]7\  }}t	          |t
                    r|                    |          |j        |<   8O| S r   )r   r  r7  r8  r   r&   renamed)r   rz  r   r   rg  s        r   _mangle_definition_treer~    s    ~

3--C   2 2aj)) 	2 	2DAq!V$$ 2 !		& 1 1
1	2 Jr   c           	      (   | j         r8| j         \  }d|v }|r$|                    d          rt          d          d|v }nd}d}|j         r|j         \  }t          |          }	nd }	|d |j         D             }|||t	          |||	|r|nd           fS )NrN   r^   z4Inlined rules (_rule) cannot use the ?rule modifier.rP   Fc                     g | ]	}|j         
S r   )r   r  s     r   r  z$_make_rule_tuple.<locals>.<listcomp>0  s    333a!'333r   )r   template_source)r8  r   r*   r   r"   )
modifiers_treer   rx  priority_treer   mr7  r   r\  r   s
             r   _make_rule_tupler    s     $( 	Wts++ 	WUVVV( #q66336?333['T\JPBZ$$VZ&] &] &] ] ]r   c                       e Zd ZddZdS )
Definitionr   Nc                 X    || _         || _        t          |          | _        || _        d S r   )r  r   r  rx  ry  )r   r  r   rx  ry  s        r   r   zDefinition.__init__7  s(    	Fmmr   r   N)r   r   r   r   r   r   r   r  r  6  s(             r   r  c                      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dS )&GrammarBuilderglobal_keep_all_tokensimport_paths
used_files_definitions_ignore_namesFNr   c                 T    || _         |pg | _        |pi | _        i | _        g | _        d S r   )r  r  r  r  r  )r   r  r  r  s       r   r   zGrammarBuilder.__init__F  s9    &<#(.B$*35(*r   c                     i }t          |d          D ]N\  }}|dk    rdnt          |          }||d|z   <   d|         x|d|z   <   }|                                |d|z   <   Ot           |j        di |          )	Nr   r   r   r   )r   r   r  Typer   )r7  r(  titler*   format)	r   r  msgrd  r   r   r   postfixlowercase_types	            r   _grammar_errorzGrammarBuilder._grammar_errorN  s     a000 	< 	<GAtFFbbAG%)D'!"6J76SSD'!"^%3%9%9%;%;D'!"":3:----...r   c                    |r:|d}nxt          |t                    st          dt          |                    nC|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"   r  r   )r   r  ry  s      r   _check_optionszGrammarBuilder._check_optionsW  s     	/-- |"lkopwkxkxkx#z{{{| %--55 X"#VWWW* /*.'r   r   )r   c          	      2   || j         v r|s|                     |d|           n|r|                     |d|           |                    d          r|                     |d|           t          ||||                     ||                    | j         |<   d S )Nz&{Type} '{name}' defined more than oncez+Cannot override a nonexisting {type} {name}rx  zDNames starting with double-underscore are reserved (Error at {name}))r  r  r   r  r  )r   r   r  r   rx  ry  r   s          r   _definezGrammarBuilder._defineg  s    4$$$ ]##G-UW[\\\ 	^)VX\]]]??4   	w)oquvvv",Wc64CVCVW^`gChCh"i"i$r   c                    || j         vr|                     |d|           | j         |         }||j        k    r|                     |d|           t          |          |j        k    r|                     |d|           |j        |                     |d|           |j        }t          |t                    r|j        dk    sJ |j	        
                    d|           d S )Nz6Can't extend {type} {name} as it wasn't defined beforezHCannot extend {type} {name} - one is a terminal, while the other is not.z6Cannot extend {type} with different parameters: {name}z,Can't extend {type} {name} - it is abstract.r   r   )r  r  r  r  rx  r   r   r/   r-  r8  insert)r   r   r  r   rx  ry  dbases           r   _extendzGrammarBuilder._extends  s    t((()acghhhd#ai)suyzzz==AH$$)acghhh6>)WY]^^^ v$%%C$)|*C*C*CCQ$$$$$r   c                 ~   t          |t                    r| j                            |           d S t          |t                    sJ |}|j        dk    rt          |j                  dk    r|j        \  }|j        dk    rkt          |j                  dk    rS|j        \  }|j        dk    r?|j        \  }t          |t                    r!| j                            |j	                   d S dt          | j                  z  }| j                            |           t          d|t                    | j        |<   d S )Nr   r   r   r   z__IGNORE_%dT)ry  )r   r(  r  r   r/   r-  r"  r8  r$   r   r  r'   r  )r   exp_or_namer   t2r!  r   s         r   _ignorezGrammarBuilder._ignore  s4   k3'' 	Z%%k22222k400000Av%%#aj//Q*>*>j7K''C,<,<,A,AKFDyG++ $%dH55 # .55di@@@"F #d&8"9"99D%%d+++&0qBX&Y&Y&YDd###r   c                    t          |j                  dk    r|j        \  }}n|j        \  }d }t          |t                    r9t	          |j                  }|j        }t          t          ||                    }nVt	          |j        d d                   }|s|j        \  }t          d|z            |j        d         }|j        |p|j        i}|j	        dk    rd }	n|dk    rH	 t          j                            t          j        d         j                  }
n# t           $ r d }
Y nw xY w|}
|
ryt          |
t"                    r>t#          |
j        t          j                            |
j                  d                   }	nTt          j                            |
          d         }	n.t          j                            t          j        j                  }	||	|fS )Nr   r  z&Nothing was imported from grammar `%s`r   <string>__main__r   )r"  r8  r   r/   r  rt  ru  r*   r   r-  r  r  abspathsysmodules__file__rA  r   r  r;  curdir)r   stmtgrammar_name	path_nodearg1dotted_pathrd  r<  r   r
  	base_files              r   _unpack_importzGrammarBuilder._unpack_import  s   t}!!"mOIttJIDdD!! 
	9	 233KME3ue,,--GG	 23B3 788K T!*"#Kd#RSSS%b)DzDLD#78G>\))IIz))% "J0G0P Q QII% % % % $III% )	 <i99 < /	0BBGMMR[R`DaDabcDd e eII "i 8 8 ;IIGOOBGN;;	Iw..s   (4D D,+D,c                 |   |j         dk    rt          |j         \  }}}}d}n\|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   | ]} |          V  d S r   r   )r
  r\  rz  s     r   rq  z4GrammarBuilder._unpack_definition.<locals>.<genexpr>  s+      5566!99555555r   )	r-  r  r8  r   r"  r   r'   r  r~  )r   r   rz  r   rx  r   optsr  s     `     r   _unpack_definitionz!GrammarBuilder._unpack_definition  s    9&6&F#D&#tGG=#)DF,/,>,>!,C,C3t}Q'(((I_D-#CG5555f55555F6$<<D%c622Wc64//r   <?>grammar_textr  rz  c                    t          ||          }i }|j        D ]}|j        dk    ry|                     ||          \  }}}		 ||         \  }
}||
k    s J dd                    |          z              |                    |	           o# t          $ r
 ||	f||<   Y w xY w|                                D ] \  }\  }}	|                     |||	|           !|j        D ]B}|j        dv r | j	        | 
                    ||            +|j        dk    r+|j        \  } | j	        | 
                    ||          ddi a|j        dk    r(|j        \  } | j        | 
                    ||            |j        dk    r| | j        |j          |j        d	k    rq|j        D ]g}t          |t                    s
J |            t          |t                    }||j        }n ||j                  }| 	                    ||d            h-|j        dk    r:J |            d | j                                        D             }t%          |           d S )Nr   zInconsistent base_path for %s.r:   )r   r   r   Tr   r   r   Fc                 2    i | ]\  }}|j         ||j        S r   )r  r   )r
  r   r  s      r   rR  z/GrammarBuilder.load_grammar.<locals>.<dictcomp>  s7     
 
 
ay
dAF 
 
 
r   )rX  r8  r-  r  rs  updater   r  	do_importr  r  r  r  r   r&   r$   r   r  r$  )r   r  r  rz  r   importsr  r  r
  r<  import_base_pathimport_aliasesr  r   r  r   r  s                    r   load_grammarzGrammarBuilder.load_grammar  s   lL99OQM 	> 	>DyH$$262E2EdL2Y2Y/Y>7>{7K4$n$(8888:Z]`]e]efq]r]r:r888"))'2222 > > >+4g+=GK(((> % 29 	D 	D-K-)WNN;	7FCCCCM 	# 	#Dy,,,d55dFCCDDDj((]d55a@@P4PPPPh&&]d55a@@AAAh&&> DL$-00i''"m 6 6F%ff55==v==5(::G~%{%vfk22LLw55556 h&&"d""u
 
,2244
 
 
	 	 	*****s   AB		BBc                       fd}t          t          ||                    fd j                                        D              _        d S )Nc                     	 j         |          }n# t          $ r g cY S w xY w|j        rg S t          |j                  t          |j                  z
  S r   )r  r   r  r3  r   r>  rx  )r   r  r   s     r   rule_dependenciesz8GrammarBuilder._remove_unused.<locals>.rule_dependencies  sg    %f-   			y 	%af--AH==s      c                 $    i | ]\  }}|v 	||S r   r   )r
  kr  _useds      r   rR  z1GrammarBuilder._remove_unused.<locals>.<dictcomp>  s%    VVVda1PU::Q:::r   )r>  r   r  r  )r   usedr  r  s   `  @r   _remove_unusedzGrammarBuilder._remove_unused  sh    	> 	> 	> 	> 	> C/0011VVVVd.?.E.E.G.GVVVr   r  .r
  r<  ry  c           	         |sJ t          d                    |          ||          }t          j        j        | t          z   }| j        ||gng z   t          gz   }|D ]s}	 t          |          r |||          \  }	}
n]t          j                            ||          }	t          |	d          5 }|	                                }
d d d            n# 1 swxY w Y   t          |
          }| j                            |	|          |k    rt          d          || j        |	<   t          | j        | j        | j                  }|                    |
|	|           |                    t%          ||                     |j        D ]!}|| j        v rt)          d|d|d          " | j        j        di |j          d S # t,          $ r Y qw xY wt          |d           J d	|d
            )Nrx  utf8encodingz)Grammar file was changed during importingzCannot import 'z' from 'z': Symbol already defined.FzCouldn't import grammar zP, but a corresponding file was found at a place where lark doesn't search for itr   )r{  rs  r  r  EXTr  stdlib_loadercallableopenreadsha256_digestr  getRuntimeErrorr  r  r  r  r#  r  r*   r  r  )r   r  r
  r<  ry  rz  r  r  sourcejoined_pathr  r  hgbr   s                  r   r  zGrammarBuilder.do_import  s   {TYY{33WkJJw|[1C7"Y5JykkPRSWdVee 	X 	XFF## ((.y,(G(G%K"$',,v|"D"DKkF;;; (q vvxx( ( ( ( ( ( ( ( ( ( ( ( ( ( (
 "$''?&&{A66!;;&'RSSS/0,#D$?ARTXTcddk6:::!!#fg"6"6777O { {Dt000*lfjfjfjlxlxlx+yzzz 1 )!(;;2?;;;!    & //// X  X  KV  KV  KV  X  X  X5s7   "AG2CGC	GC	G
GGc           
      &   | j                                         D ]\  }}|j        }|j        }t	          |          D ]F\  }}|| j         v rt          d|d|d          ||d |         v rt          d|d|d          G|m|                    d          D ]}|j        d         j        }|j        dd          }	||vr|| j         vr| 	                    |j
        d|z  |           t          |	          t          | j         |         j                  k    rRt          | j         |         j                  t          |	          }}
| 	                    |j
        d	|
d
|d||           t          |          D ],}|| j         vr!||vr| 	                    |j
        d||           -t          | j                                       | j                  s9t          dt          | j                  t          | j                   z
  z            d S )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!)r  r  rx  r   r7  r*   r  r8  r   r  r  r"  r3  r>  
issupersetr  )r   r   r  rx  r   r   r\  tempr   r   rO  actuals               r   validatezGrammarBuilder.validate>  s   (..00 	{ 	{GD!XF&C!&)) g g1)))&,ghghghjnjnjn'oppprr
??&,]^]^]^`d`d`d'efff # {&677 	z 	zmA&+}QRR(f$$$"333++AI7nqt7tvz{{{4yyC(9#(>(E$F$FFF+.t/@/E/L+M+MsSWyy&++AII\d\d\dflflfl8nortxz z z *#.. { {d///Cv4E4E''	3npsuyzzz{ 4$%%001CDD 	PY]`aeas]t]twz{  |M  xN  xN  ^N   O  P  P  P	P 	Pr   c                 d   |                                   g }g }| j                                        D ]i\  }}|j        |j        |j        }}}|j        r/t          |          dk    sJ |                    |||ff           P|                    ||||f           jt          ||| j
                  S r  )r  r  r  rx  r   ry  r  r"  r   r  r  )r   rl  r  r   r  rx  r   ry  s           r   buildzGrammarBuilder.build^  s    		(..00 	? 	?GD!%&Xqvqy'SVy ?6{{a''''  $g!78888  $W!=>>>>y)T-?@@@r   )FNNr  )r  Nr   )r   N)r   r   r   r   r  r   r
   r(  r   r   r  r   r   r  r  r  r  r  r  r  r  r  r	   r  r  r  r  r   r   r   r  r  =  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 
j 
j 
j 
j% % % %(Z Z Z*%/ %/ %/N0 0 0(2+ 2+ 2+C 2+xX`beafhkakXlOm 2+w{ 2+ 2+ 2+ 2+jW W W!X !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 !X !X !XHP P P P@Aw A A A A A Ar   r  c                 N   |                                  D ]\  }}d }t          |t                    r]t          j                            |          r>t          |d          5 }|                                }d d d            n# 1 swxY w Y   nbt          |t                    rMt          t                    5  t          j        |                     d          }d d d            n# 1 swxY w Y   |t          |          }||k    rt          j        d|z              dS dS )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   	?RW^^D%9%9 	?dV,,,  vvxx                             o.. 	?'"" ? ?'.55g>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<%%'>>K<tCDDD55  4s$   "BB	
B	8"C&&C*	-C*	c                     t          d|          }|                    | d           t          |j                                                  S )zXReturns a list of paths to the lark grammars imported by the given grammar (recursively)Fr  )r  r  r  r  keys)grammarr  builders      r   list_grammar_importsr    sD    UL11G*---"''))***r   c                     t          ||          }|                    | |           |                                |j        fS r   )r  r  r  r  )r  r  r  r  r  s        r   r  r    s>    3\BBG&)))==??G...r   r~  c                 
   t           j        dk    r;t          j        |                     d          d                                          S t          j        |                     d                                                    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    sg     6!!~ahhv..FFFPPRRR~ahhv..//99;;;r   r  r   )xr_  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   r`  IMPORT_PATHSr  r  r   rY  rB  rC  r  r  r   r   r*  rA  rJ  rb  rj  r  r  r  r  r  r  r  r  r  r   r  r  r$  r)  r+  r3  r?  rN  rR  rX  r]  rg  r(  ru  r{  r~  r  r  r  r  r  r  r  r   r   r   <module>r     sz      



 " " " " " "                      T T T T T T T T T T T T T T T T T T T T u u u u u u u u u u u u u u u u u u u u E E E E E E E E E E E E E E 0 0 0 0 0 0 - - - - - - ) ) ) ) ) ) ) ) ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ' ' ' ' ' ' ' ' h h h h h h h h h h h h h h ) ) ) ) ) ) ) ) a a a a a a a a a a a a a afD!!!|				%%%'% '% +	%
 &% '% &% '% 	;% &% '% &% $% &% (%  )!%" ,#% %$ +%%& ,'%( *)%* *+%, '-%. */%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ZZK	
 QRK	 'K	 K	 :K	 79K	 =/K	  0 0 0K	& .<'K	( ,)K	, 2()-K	0    1K	<    =K	D       EK	P QK	 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 4 4{K	B \<0CK	D >"EK	F &'GK	H V56IK	 K	L 34 67(#UK	 K	 K	`  
  , , , , ,; , , ,: X/ X/ X/ X/ X/% X/ X/ X/v*6 *6 *6 *6 *67 *6 *6 *6Z
% 
% 
% 
% 
%[ 
% 
% 
%4: 4: 4: 4: 4:. 4: 4: 4:n; ; ; ; ;) ; ; ;$( ( ( ( (( ( ( (., , ,  4S S SB 
2 
2 
2 
2 
2) 
2 
2 
2!y ! ! ! !0 0 0 0 04 0 0 0f    )   8 8 8
F6 F6 F6 F6 F6 F6 F6 F6R *.@@*E *E *E *E *E *E *E *EZ "!&,77@ @ @DX X X ' ' ' ' '( ' ' 'E E E! ! !* 
#XJ/	(,	(*J*J*JK	@BkBkBkl	.	:	'-9	IIIJ	YYYZ	FV	-y9	07)<	!O#45	"%8$9: ' ' ', , , ,"      c # $u_VYEY?Z:[    ,   	 	 	] ] ]0       mA mA mA mA mA mA mA mA`	  $ 02 + + + +/ / /	<S 	<S 	< 	< 	< 	< 	< 	<r   