
    h]                        S SK JrJr  S SKrS SKJr  S SKJrJrJ	r	J
r
JrJrJrJrJrJrJrJr  S SKJr  S SKr S SKr\(       a  SSKJr  SSKJr  SS	KJrJrJrJ r   SS
K!J"r"J#r#J$r$  SSK%J&r&  S SK'J'r'   \(" \5      r) " S S\\5      r+ " S S\+5      r, " S S\+5      r- " S S\5      r.\" SSS9r/ " S S\05      r1 " S S5      r2 " S S5      r3 " S S5      r4S  r5S! r6 " S" S#5      r7S$\04S% jr8 " S& S'5      r9 " S( S)5      r:\\1/\14   r; " S* S+\5      r<S4S,\	\.\04   4S- jjr= " S. S/\<5      r> " S0 S1\>5      r? " S2 S3\<5      r@g! \ a     GNf = f! \* a    Sr) Nf = f)5    )abstractmethodABCN)suppress)TypeVarTypeDictIterator
CollectionCallableOptional	FrozenSetAnyClassVarTYPE_CHECKINGoverload)
ModuleType   )	LexerConf)ParserState)classifyget_regexp_width	Serializelogger)UnexpectedCharactersLexErrorUnexpectedToken)TOKEN_DEFAULT_PRIORITY)copyFc            	           \ rS rSr% Sr\\S'   \\   \S'   \\   \S'   \	\   \S'   SS\S\\   S\\   SS4S	 jjr
S
 rS rS r\S\4S j5       r\\S\4S j5       5       r\\S\4S j5       5       rS rSrg)Pattern!   z(An abstraction over regular expressions.valueflagsrawtypeNreturnc                 <    Xl         [        U5      U l        X0l        g N)r"   	frozensetr#   r$   )selfr"   r#   r$   s       ]C:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\lark/lexer.py__init__Pattern.__init__)   s    
u%
    c                 4    [        U R                  5       5      $ r(   )repr	to_regexpr*   s    r+   __repr__Pattern.__repr__.   s    DNN$%%r.   c                 X    [        [        U 5      U R                  U R                  45      $ r(   )hashr%   r"   r#   r2   s    r+   __hash__Pattern.__hash__2   s     T$ZTZZ899r.   c                     [        U 5      [        U5      :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r(   )r%   r"   r#   r*   others     r+   __eq__Pattern.__eq__5   s<    DzT%[(dTZZ5;;-Fd4::Y^YdYdKddr.   c                     [        5       er(   NotImplementedErrorr2   s    r+   r1   Pattern.to_regexp8   s    !##r.   c                     [        5       er(   r?   r2   s    r+   	min_widthPattern.min_width<        "##r.   c                     [        5       er(   r?   r2   s    r+   	max_widthPattern.max_widthA   rE   r.   c                 B    U R                    H  nSU< SU< S3nM     U$ )Nz(?:))r#   )r*   r"   fs      r+   
_get_flagsPattern._get_flagsF   s    A#$e,E r.   )r#   r$   r"   ) N)__name__
__module____qualname____firstlineno____doc__str__annotations__r
   r   r   r,   r3   r7   r<   r   r1   propertyintrC   rG   rM   __static_attributes__rO   r.   r+   r    r    !   s    .Jc?	#
3-c *S/ Xc] ^b 
&:e $3 $ $ $3 $  $ $3 $  $r.   r    c                   l    \ rS rSr% SrSr\\   \S'   S\4S jr	\
S\4S j5       r\
S\4S j5       rS	rg
)
PatternStrL   )r"   r#   r$   rU   r%   r&   c                 `    U R                  [        R                  " U R                  5      5      $ r(   )rM   reescaper"   r2   s    r+   r1   PatternStr.to_regexpQ   s    ryy455r.   c                 ,    [        U R                  5      $ r(   lenr"   r2   s    r+   rC   PatternStr.min_widthT       4::r.   c                 ,    [        U R                  5      $ r(   rb   r2   s    r+   rG   PatternStr.max_widthX   re   r.   rO   N)rP   rQ   rR   rS   __serialize_fields__r%   r   rU   rV   r1   rW   rX   rC   rG   rY   rO   r.   r+   r[   r[   L   sX    2D(3-63 6 3   3  r.   r[   c                   v    \ rS rSr% SrSr\\   \S'   S\4S jr	Sr
S r\S\4S	 j5       r\S\4S
 j5       rSrg)	PatternRE]   )r"   r#   r$   _widthr^   r%   r&   c                 8    U R                  U R                  5      $ r(   )rM   r"   r2   s    r+   r1   PatternRE.to_regexpb   s    tzz**r.   Nc                 p    U R                   c  [        U R                  5       5      U l         U R                   $ r(   )rl   r   r1   r2   s    r+   
_get_widthPatternRE._get_widthf   s)    ;;*4>>+;<DK{{r.   c                 (    U R                  5       S   $ Nr   rp   r2   s    r+   rC   PatternRE.min_widthk        ##r.   c                 (    U R                  5       S   $ )Nr   rt   r2   s    r+   rG   PatternRE.max_widtho   rv   r.   )rl   )rP   rQ   rR   rS   rh   r%   r   rU   rV   r1   rl   rp   rW   rX   rC   rG   rY   rO   r.   r+   rj   rj   ]   sd    <D(3-+3 + F
 $3 $ $ $3 $ $r.   rj   c            	       x    \ rS rSr% SrSr\\4r\	\
S'   \\
S'   \\
S'   \4S\	S\S\SS4S	 jjrS
 rS\	4S jrSrg)TerminalDeft   zA definition of a terminal)namepatternpriorityr|   r}   r~   r&   Nc                 `    [        U[        5      (       d   U5       eXl        X l        X0l        g r(   )
isinstancer    r|   r}   r~   )r*   r|   r}   r~   s       r+   r,   TerminalDef.__init__}   s)    '7++4W4+	 r.   c                 l    [        U 5      R                  < SU R                  < SU R                  < S3$ )N(, rK   )r%   rP   r|   r}   r2   s    r+   r3   TerminalDef.__repr__   s!    #Dz22DIIt||LLr.   c                     U R                   R                  S5      (       a)  U R                  R                  =(       d    U R                   $ U R                   $ )N__)r|   
startswithr}   r$   r2   s    r+   	user_reprTerminalDef.user_repr   s:    99%%<<##0tyy099r.   )rP   rQ   rR   rS   rT   rh   r[   rj   __serialize_namespace__rU   rV   r    rX   r   r,   r3   r   rY   rO   r.   r+   rz   rz   t   s]     8()3
IMDZ !S !7 !c !_c !M3 r.   rz   _TToken)boundc                     ^  \ rS rSr% SrSrSr\\S'   \	\
   \S'   \\S'   \	\
   \S'   \	\
   \S	'   \	\
   \S
'   \	\
   \S'   \	\
   \S'   \      SS\S\S\	\
   S\	\
   S	\	\
   S
\	\
   S\	\
   S\	\
   SS 4S jj5       r\      SS\S\S\	\
   S\	\
   S	\	\
   S
\	\
   S\	\
   S\	\
   SS 4S jj5       rS r\SU 4S jj5       r\S S\	\   S\	\   SS 4S jj5       r\S S\	\   S\	\   SS 4S jj5       rS rS S\	\   S\	\   SS 4S jjr\S\\   S\S\SS S\4
S j5       rS rS rS rS r\R2                  rSrU =r$ )!r      a  A string with meta-information, that is produced by the lexer.

When parsing text, the resulting chunks of the input that haven't been discarded,
will end up in the tree as Token instances. The Token class inherits from Python's ``str``,
so normal string comparisons and operations will work as expected.

Attributes:
    type: Name of the token (as specified in grammar)
    value: Value of the token (redundant, as ``token.value == token`` will always be true)
    start_pos: The index of the token in the text
    line: The line of the token in the text (starting with 1)
    column: The column of the token in the text (starting with 1)
    end_line: The line where the token ends
    end_column: The next column after the end of the token. For example,
        if the token is a single character with a column value of 4,
        end_column will be 5.
    end_pos: the index where the token ends (basically ``start_pos + len(token)``)
)r%   	start_posr"   linecolumnend_line
end_columnend_posr%   r"   r%   r   r"   r   r   r   r   r   r&   c	                     g r(   rO   )	clsr%   r"   r   r   r   r   r   r   s	            r+   __new__Token.__new__   s     	r.   type_c	                     g r(   rO   )	r   r   r"   r   r   r   r   r   r   s	            r+   r   r      s     r.   c                     SU;   a@  [         R                  " S[        5        SU;   a  [        S5      eUR	                  S5      US'   U R
                  " U0 UD6$ Nr   z(`type_` is deprecated use `type` insteadr%   zAError: using both 'type' and the deprecated 'type_' as arguments.)warningswarnDeprecationWarning	TypeErrorpop_future_new)r   argskwargss      r+   r   r      sT    fMMDFXY cdd#ZZ0F6N///r.   c	                    > [         [        U ]  X5      n	Xl        X9l        X)l        XIl        XYl        Xil        Xyl	        Xl
        U	$ r(   )superr   r   r%   r   r"   r   r   r   r   r   )r   r%   r"   r   r   r   r   r   r   inst	__class__s             r+   r   Token._future_new   sA    UC(4	"
	 $r.   c                     g r(   rO   r*   r%   r"   s      r+   updateToken.update       r.   c                     g r(   rO   )r*   r   r"   s      r+   r   r      r   r.   c                     SU;   a@  [         R                  " S[        5        SU;   a  [        S5      eUR	                  S5      US'   U R
                  " U0 UD6$ r   )r   r   r   r   r   _future_update)r*   r   r   s      r+   r   r      sV    fMMDFXY cdd#ZZ0F6N""D3F33r.   c                 v    [         R                  Ub  UOU R                  Ub  UU 5      $ U R                  U 5      $ r(   )r   new_borrow_posr%   r"   r   s      r+   r   Token._future_update   sB    ##$D$))&E
 	
,0JJ
 	
r.   r   borrow_tc           
          U " XUR                   UR                  UR                  UR                  UR                  UR
                  5      $ r(   )r   r   r   r   r   r   )r   r   r"   r   s       r+   r   Token.new_borrow_pos   sN    5!3!3X]]HOOU]UfUfhph{h{  ~F  ~N  ~N  O  	Or.   c                     U R                   U R                  U R                  U R                  U R                  U R
                  44$ r(   )r   r%   r"   r   r   r   r2   s    r+   
__reduce__Token.__reduce__   s3    DJJ		SWS^S^ _``r.   c                 @    SU R                   < SU R                  < S3$ )NzToken(r   rK   r   r2   s    r+   r3   Token.__repr__  s    "&))TZZ88r.   c                     [        U R                  U R                  U R                  U R                  U R
                  5      $ r(   )r   r%   r"   r   r   r   )r*   memos     r+   __deepcopy__Token.__deepcopy__  s)    TYY

DNNDIIt{{SSr.   c                     [        U[        5      (       a  U R                  UR                  :w  a  g[        R	                  X5      $ )NF)r   r   r%   rU   r<   r:   s     r+   r<   Token.__eq__	  s0    eU##		UZZ(?zz$&&r.   rO   )NNNNNNNN)rP   rQ   rR   rS   rT   	__slots____match_args__rU   rV   r   rX   r   r   r   classmethodr   r   r   r   r   r   r   r3   r   r<   r7   rY   __classcell__)r   s   @r+   r   r      s   $ fI&N
I}J
3-SMsmc] 
 (,"&$(&*(,%)   }	
 3- SM sm ! c] 
  
 (,"&$(&*(,%)

 
  }	

 3-
 SM
 sm
 !
 c]
 

 
0   8C=  QX   HSM # RY  4
8C= 
 
Y` 
 ODH OS O O OTV O Oa9T' ||Hr.   c                   :    \ rS rSrSrSrS rS rS
S\4S jjr	Sr
g	)LineCounteri  z>A utility class for keeping track of line & column information)char_posr   r   line_start_posnewline_charc                 H    Xl         SU l        SU l        SU l        SU l        g )Nr   r   )r   r   r   r   r   )r*   r   s     r+   r,   LineCounter.__init__  s%    (	r.   c                     [        U[        5      (       d  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r(   )r   r   NotImplementedr   r   r:   s     r+   r<   LineCounter.__eq__  s>    %--!!}}.Z43D3DHZHZ3ZZr.   tokenc                 ^   U(       ag  UR                  U R                  5      nU(       aE  U =R                  U-  sl        U R                  UR	                  U R                  5      -   S-   U l        U =R                  [        U5      -  sl        U R                  U R
                  -
  S-   U l        g)zConsume a token and calculate the new line & column.

As an optional optimization, set test_newline=False if token doesn't contain a newline.
r   N)countr   r   r   rindexr   rc   r   )r*   r   test_newlinenewliness       r+   feedLineCounter.feed$  s    
 {{4#4#45H		X%	&*mmell4CTCT6U&UXY&Y#U#mmd&9&99A=r.   )r   r   r   r   r   N)T)rP   rQ   rR   rS   rT   r   r,   r<   r   r   rY   rO   r.   r+   r   r     s&    DNI [>% > >r.   r   c                        \ rS rSrS rS rSrg)UnlessCallbacki3  c                     Xl         g r(   scanner)r*   r   s     r+   r,   UnlessCallback.__init__4  s    r.   c                 r    U R                   R                  UR                  S5      nU(       a	  Uu  o1l        U$ rs   )r   matchr"   r%   )r*   tres_values       r+   __call__UnlessCallback.__call__7  s-    ll  !, NFFr.   r   NrP   rQ   rR   rS   r,   r   rY   rO   r.   r+   r   r   3  s    r.   r   c                        \ rS rSrS rS rSrg)	CallChaini>  c                 (    Xl         X l        X0l        g r(   	callback1	callback2cond)r*   r   r   r   s       r+   r,   CallChain.__init__?  s    ""	r.   c                 v    U R                  U5      nU R                  U5      (       a  U R                  U5      $ U$ r(   )r   r   r   )r*   r   t2s      r+   r   CallChain.__call__D  s0    ^^A$(IIbMMt~~a 9r9r.   r   Nr   rO   r.   r+   r   r   >  s    
:r.   r   c                 X    U R                  XU5      nU(       a  UR                  S5      $ g rs   )r   group)re_regexpsr#   ms        r+   
_get_matchr   I  s(    		&U#Awwqz 	r.   c                    [        U S 5      n[        U5      S::  d   UR                  5       5       e[        5       n0 nUR	                  [
        / 5       H  n/ nUR	                  [        / 5       H  n	U	R                  UR                  :w  a  M  U	R                  R                  n
U
[        X'R                  R                  5       X5      :X  d  M_  UR                  U	5        U	R                  R                  UR                  R                  ::  d  M  UR                  U	5        M     U(       d  M  [        [!        XUSUS95      XgR"                  '   M     U  Vs/ s H  oU;  d  M
  UPM     nnX4$ s  snf )Nc                 ,    [        U R                  5      $ r(   )r%   r}   r   s    r+   <lambda> _create_unless.<locals>.<lambda>O  s    4		?r.      T)match_whole	use_bytes)r   rc   keyssetgetrj   r[   r~   r}   r"   r   r1   appendr#   addr   Scannerr|   )	terminalsg_regex_flagsr   r  tokens_by_typeembedded_strscallbackretokunlessstrtokr   r   new_terminalss                r+   _create_unlessr  N  s3   i)BCN~!#:^%8%8%::#EMH##Ir2$((R8F%..0$$AJsMM$;$;$=qPPf%>>''5==+>+>>!%%f- 9 6#1'&QTbfr{2|#}HZZ  3 !*D	1m-CQ	MD"" Es   	E.#E.c                   *    \ rS rSrSS jrS rS rSrg)r
  id  c                     Xl         X l        X0l        X@l        XPl        U R                    Vs1 s H  ofR
                  iM     snU l        U R                  U[        U5      5      U l	        g s  snf r(   )
r  r  r   r  r  r|   allowed_types_build_mresrc   _mres)r*   r  r  r   r  r  r   s          r+   r,   Scanner.__init__e  sW    "*"&.2nn=nffn=%%iY@
 >s   A+c                   ^ U R                   (       a  SOSm/ nU(       a  SR                  U4S jUS U  5       5      nU R                  (       a  UR                  S5      n U R                  R                  X@R                  5      nUR                  U5        XS  nU(       a  M  U$ ! [         a    U R                  XS-  5      s $ f = f)N$ |c              3      >#    U  H5  nS UR                   < SUR                  R                  5       T-   < S3v   M7     g7f)z(?P<>rK   N)r|   r}   r1   ).0r   postfixs     r+   	<genexpr>&Scanner._build_mres.<locals>.<genexpr>w  s0     xcw^_9L9L9NQX9X Ycws   =A zlatin-1r  )
r  joinr  encoder   compiler  AssertionErrorr  r  )r*   r  max_sizemresr}   mrer"  s         @r+   r  Scanner._build_mresp  s     ))#riixclmvnvcwxxG~~!..3Bhh&&w0B0BC KK!),I i  " B''	q=AABs   !%B& &CCc                     U R                    H:  nUR                  X5      nU(       d  M  UR                  S5      UR                  4s  $    g rs   )r  r   r   	lastgroup)r*   textposr+  r   s        r+   r   Scanner.match  s:    ::C		$$Aqwwqz1;;.. r.   )r  r  r  r  r   r  r  N)F)rP   rQ   rR   rS   r,   r  r   rY   rO   r.   r+   r
  r
  d  s    	A&/r.   r
  rc                     SU ;   =(       d5    SU ;   =(       d)    SU ;   =(       d    SU ;   =(       d    SU ;   =(       a    SU ;   $ )zExpressions that may indicate newlines in a regexp:
- newlines (\n)
- escaped newline (\\n)
- anything but ([^...])
- any-char (.) when the flag (?s) exists
- spaces (\s)

z\nz\sz[^z(?s.rO   )r2  s    r+   _regexp_has_newliner6    s>     19Z
ZeqjZDAIZ%1*BYQTXYQYZr.   c                   t    \ rS rSr% SrSr\\S'   \\S'   \	\
   \S'   SS\S\	\   S\	\
   4S jjrS	 rS
 rSrg)
LexerStatei  zRepresents the current state of the lexer as it scans the text
(Lexer objects are only instantiated per grammar, not per text)
)r/  line_ctr
last_tokenr/  r9  r:  Nc                 |    Xl         U=(       d"    [        [        U[        5      (       a  SOS5      U l        X0l        g )N   
r4  )r/  r   r   bytesr9  r:  )r*   r/  r9  r:  s       r+   r,   LexerState.__init__  s,    	 [KD%9P9PVZ$[$r.   c                     [        U[        5      (       d  [        $ U R                  UR                  L =(       a9    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  $ r(   )r   r8  r   r/  r9  r:  r:   s     r+   r<   LexerState.__eq__  sO    %,,!!yyEJJ&r4==ENN+JrtbgbrbrOrrr.   c                 v    [        U 5      " U R                  [        U R                  5      U R                  5      $ r(   )r%   r/  r   r9  r:  r2   s    r+   __copy__LexerState.__copy__  s&    Dz$))T$--%8$//JJr.   )r:  r9  r/  r   )rP   rQ   rR   rS   rT   r   rU   rV   r   r   r   r,   r<   rB  rY   rO   r.   r+   r8  r8    sU     1I
I%S %H[,A %T\]bTc %
sKr.   r8  c                   Z    \ rS rSrSrSSS\4S jr\SSS\SS 4S	 j5       r	S
 r
S r\rSrg)LexerThreadi  zTA thread that ties a lexer instance and a lexer state, to be used by the parser
    lexerLexerlexer_statec                     Xl         X l        g r(   rF  state)r*   rF  rH  s      r+   r,   LexerThread.__init__  s    
 
r.   r/  r&   c                 &    U " U[        U5      5      $ r(   r8  )r   rF  r/  s      r+   	from_textLexerThread.from_text  s    5*T*++r.   c                 N    U R                   R                  U R                  U5      $ r(   )rF  lexrK  )r*   parser_states     r+   rR  LexerThread.lex  s    zz~~djj,77r.   c                 `    [        U 5      " U R                  [        U R                  5      5      $ r(   )r%   rF  r   rK  r2   s    r+   rB  LexerThread.__copy__  s     Dz$**d4::&677r.   rJ  N)rP   rQ   rR   rS   rT   r8  r,   r   rU   rO  rR  rB  r   _TokenrY   rO   r.   r+   rE  rE    sT    !g !J ! ,g ,S ,] , ,88 Fr.   rE  c                   D    \ rS rSrSr\S\S\S\\	   4S j5       r
S rSrg	)
rG  i  z`Lexer interface

Method Signatures:
    lex(self, lexer_state, parser_state) -> Iterator[Token]
rH  rS  r&   c                     [         $ r(   )r   )r*   rH  rS  s      r+   rR  	Lexer.lex  s    r.   c                     [        U5      $ )
DeprecatedrN  )r*   r/  s     r+   make_lexer_stateLexer.make_lexer_state  s    $r.   rO   N)rP   rQ   rR   rS   rT   r   r8  r   r	   r   rR  r]  rY   rO   r.   r+   rG  rG    s9    
 z  %   r.   rG  terminal_to_regexpc                    U(       d  [         R                  R                  U 5      nU(       a  SOSnUR                  5       U:  a  g [	        U S 5      R                  5        H  nUR                  USS9 H  u  pgUR                  UR                  :X  d   eUR                  Xg5        SUR                   SUR                   S3n UR                  XgU5      R                  5       n	U(       a  [        U S
U	 35      e[        R                  " SX5        UR                  5       U:  d  M  [        R                  " S5            g    M     g ! [         a    S	n	 Nrf = f)Nr  g?c                     U R                   $ r(   )r~   r   s    r+   r   )_check_regex_collisions.<locals>.<lambda>  s    

r.   T)skip_markedzCollision between Terminals z and z. zONo example could be found fast enough. However, the collision does still existsr4  z5%s The lexer will choose between them arbitrarily.
%sz2Found 8 regex collisions, will not check for more.)interegular
Comparatorfrom_regexescount_marked_pairsr   valuescheckr~   markr|   get_example_overlapformat_multiline
ValueErrorr   r   warning)
r_  
comparatorstrict_modemax_collisions_to_showmax_timer   abmessageexamples
             r+   _check_regex_collisionsrw    s=    ++889KL
  qSH $$&*@@,.BCJJL$$U$=DA::+++OOA! 5QVVHE!&&LGl$88xHYY[ '"WI677NNSU\f,,.2HHST# > M  lkls    E		EEc                       \ rS rSr% \\\4   \S'   \SSS jj5       r	\SS\
S\S\4S jj5       rS	\
S\S\\   4S
 jrSrg)AbstractBasicLexeri  terminals_by_nameNr&   c                     g r(   rO   )r*   confro  s      r+   r,   AbstractBasicLexer.__init__  r   r.   	lex_staterS  c                     g r(   rO   )r*   r~  rS  s      r+   
next_tokenAbstractBasicLexer.next_token  r   r.   rK  c              #   x   #    [        [        5          U R                  X5      v   M  ! , (       d  f       g = f7fr(   )r   EOFErrorr  )r*   rK  rS  s      r+   rR  AbstractBasicLexer.lex   s,     hooe::   s   :)
7:rO   r(   r|  r   r&   N)rP   rQ   rR   rS   r   rU   rz   rV   r   r,   r8  r   r   r  r	   rR  rY   rO   r.   r+   ry  ry    sk    C,--  J c U  ; ;3 ;8E? ;r.   ry  c                       \ rS rSr% \\   \S'   \\   \S'   \\   \S'   \	\\
4   \S'   \	\\
4   \S'   \\S'   SSS
 jjrS r\S 5       rS rSS\S\S	\4S jjrSrg)
BasicLexeri  r  ignore_typesnewline_typesuser_callbacksr  r^   Nr&   c                 *   [        UR                  5      n[        S U 5       5      (       d   U5       eUR                  U l        UR
                  (       Gd\  0 nU H  nUR                  R                  5       n U R                  R                  XaR                  5        UR                  R                  S:X  a(  [        SUR                  < SUR                  < S35      eUR                  R                  S:X  d  M  XdU'   M     [        UR                   5      U Vs1 s H  oUR                  iM     sn::  d>  [        S[        UR                   5      U Vs1 s H  oUR                  iM     sn-
  -  5      e["        (       a  [%        XBUR&                  5        OUR&                  (       a  [        S	5      e[)        S
 U 5       5      U l        [)        UR                   5      U l        UR/                  S S9  X0l        UR0                  U l        UR                  U l	        UR4                  U l        UR6                  U l        S U l        g ! U R                  R                   a(    [        SUR                  < SUR                  < 35      ef = fs  snf s  snf )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fr(   )r   rz   r!  r   s     r+   r#  &BasicLexer.__init__.<locals>.<genexpr>  s     Ay!:a--ys   zCannot compile token z: r   z,Lexer does not allow zero-width terminals. (rK   r^   z$Ignore terminals are not defined: %szUinteregular must be installed for strict mode. Use `pip install 'lark[interegular]'`.c              3      #    U  H;  n[        UR                  R                  5       5      (       d  M-  UR                  v   M=     g 7fr(   )r6  r}   r1   r|   r  s     r+   r#  r  ,  s.     &oy!DWXYXaXaXkXkXmDnvqvvys
   ,AAc                     U R                   * U R                  R                  * [        U R                  R                  5      * U R
                  4$ r(   )r~   r}   rG   rc   r"   r|   )xs    r+   r   %BasicLexer.__init__.<locals>.<lambda>/  s7    qzzkAII4G4G3G#aiiooJ^I^`a`f`f%gr.   )key)listr  all	re_moduler^   skip_validationr}   r1   r'  r  errorr   r|   rC   r%   r  ignorehas_interegularrw  strictr)   r  r  sort	callbacksr  r  rz  _scanner)r*   r|  ro  r  r_  r   r   s          r+   r,   BasicLexer.__init__  s   (	AyAAAL9LA..###!#,,.XGGOOF,>,>? 99&&!+"\]\b\bdedmdm#noo99>>T),2q)  $(CA(CCET[[IYmv\wmvhi]c]cmv\wIwxyy'(:Tvww '&oy&oo%dkk2gh""nn!//!%!7!77 ww}} X"AFFAII#VWWX )D\ws   9%IJJAJc                   ^ [        U R                  U R                  U R                  U R                  5      u  ol        [        U R
                  R                  5       5      (       d   eU R                  R                  5        HQ  u  mnTU R
                  ;   a-  [        U R
                  T   UU4S j5      U R
                  T'   MC  X R
                  T'   MS     [        XR                  U R                  U R                  5      U l        g )Nc                 "   > U R                   T:H  $ r(   )r%   )r   r   s    r+   r   +BasicLexer._build_scanner.<locals>.<lambda>?  s    TUTZTZ^cTcr.   )r  r  r  r^   r  r  r  rh  r  itemsr   r
  r  )r*   r  rL   r   s      @r+   _build_scannerBasicLexer._build_scanner8  s    #1$..$BTBTVZV]V]_c_m_m#n 	=4=='')****++113HE1%'0u1EqJc'de$'(e$ 4  	+=+=twwWr.   c                 T    U R                   c  U R                  5         U R                   $ r(   )r  r  r2   s    r+   r   BasicLexer.scannerE  s"    == !}}r.   c                 8    U R                   R                  X5      $ r(   )r   r   )r*   r/  r0  s      r+   r   BasicLexer.matchK  s    ||!!$,,r.   r~  rS  c                 ^   UR                   nUR                  [        UR                  5      :  Ga  U R	                  UR                  UR                  5      nU(       d  U R
                  R                  U R                  -
  nU(       d  S1n[        UR                  UR                  UR                  UR                  XQR                  =(       a    UR                  /X R                  S9eUu  pgXpR                  ;   nS n	U(       a  XpR                  ;   a,  [        XvUR                  UR                  UR                  5      n	UR                  XgU R                   ;   5        U	b  UR                  U	l        UR                  U	l        UR                  U	l        U	R(                  U R                  ;   a  U R                  U	R(                     " U	5      n	U(       d+  [+        U	[        5      (       d  [-        SU	-  5      eXl        U	$ UR                  [        UR                  5      :  a  GM  [/        U 5      e)Nz<END-OF-FILE>)allowedtoken_historyrK  rz  z+Callbacks must return a token (returned %r))r9  r   rc   r/  r   r   r  r  r   r   r   r:  rz  r  r   r   r  r   r   r   r%   r   r   r  )
r*   r~  rS  r9  r   r  r"   r   ignoredr   s
             r+   r  BasicLexer.next_tokenN  s   %%#inn"55**Y^^X->->?C,,44t7H7HH./G*9>>8;L;Lhmm]e]l]l3:J^J^Jydmdxdxcy1=QgQgi i LE000GAe}}4%(9(98==(//ZMM%$*<*<!<=}%]]
'$--	66T]]*aff-a0A%a//&'TWX'XYY+,(H7 #inn"55< tnr.   )
r  r  r  r  r  r^   r  rz  r  r  r(   r  )rP   rQ   rR   rS   r
   rz   rV   r   rU   r   	_Callbackr   r,   r  rW   r   r   r8  r   r   r  rY   rO   r.   r+   r  r    s    +&&C. S>!i((3	>""N(TX  
- J  c  U    r.   r  c            	           \ rS rSr% \\\4   \S'   \\S'   \r\	\   \S'   SSSS\\\
\   4   S\
\   S	S
4S jjrS\SSS	\\   4S jrSrg
)ContextualLexeriq  lexers
root_lexerr  r|  r   statesalways_acceptr&   Nc                 $   [        UR                  5      nUR                  n[        U5      nXFl        [        (       aZ  UR
                  (       dI  [        R                  R                  U Vs0 s H  owUR                  R                  5       _M     sn5      nOS n0 n	0 U l        UR                  5        H#  u  p[        U5      n X   nXR                  U
'   M%     UR                  UL d   eSUl        U R#                  Xh5      U l        g s  snf ! [         aw    [        U5      [        UR                   5      -  [        U5      -  n[        U5      nU Vs/ s H  oU;   d  M
  X_   PM     Os  snf snUl        U R#                  X5      nXU'    Nf = f)NT)r  r  rz  r   r  r  rd  re  rf  r}   r1   r  r  r)   KeyErrorr  r  r  r  )r*   r|  r  r  r  rz  	trad_confr   ro  lexer_by_tokensrK  acceptsr  rF  
lexer_confns                   r+   r,   ContextualLexer.__init__w  sb   (	 22J	'?4#7#7$//<<`i=j`i[\ATATAV>V`i=jkJJDF$llnNEG$C-', "'KK - ""i///$(	!//)@) >k  -g,T[[)99C<NN!)_
FM'hgVgQg(<(9(<g'h
$
?',$-s+   ,$D	DAF	E*!E*)#FFrH  rS  r   c           	   #   h  #      U R                   UR                     nUR                  X5      v   M.  ! [         a     g [         ag  n UR
                  nU R                  R                  X5      n[        XdR                  X%/U R                  R                  S9e! [         a    Uef = fS nAff = f7f)N)rK  r  rz  )
r  positionr  r  r   r:  r  r   r  rz  )r*   rH  rS  rF  er:  r   s          r+   rR  ContextualLexer.lex  s     	L$9$9:&&{AA   	# 	(33
22;M%eYYlZfz~  {J  {J  {\  {\  ]  ]' 	s7   B2/3 
B/B2	B/	ABB''B**B//B2)r  r  )rO   )rP   rQ   rR   rS   r   rX   ry  rV   r  r   r
   rU   r,   r8  r	   r   rR  rY   rO   r.   r+   r  r  q  s    (())""+5J'(5A[ A$sJsO7K2L A]ghk]l Atx A<z  8TY? r.   r  )   )Aabcr   r   r^   
contextlibr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   typesr   r   rd  ImportErrorcommonr   parsers.lalr_parser_stater   utilsr   r   r   r   
exceptionsr   r   r   grammarr   r   boolr  	NameErrorr    r[   rj   rz   r   rU   r   r   r   r   r   r  r
  r6  r8  rE  r  rG  rw  ry  r  r  rO   r.   r+   <module>r     s   $ 	      	 !6 @ @ G G + ;'O(i (V "$ $.) 0 T!AC AH> >B : :
#,#/ #/L[3 [K K4 * eWe^$	 C  [#5E0F @; ;"h# hV3e 3G  		   Os#   E 4E EEEE