
    IiiE                        S SK r SSKJrJr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   " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S S5      r " S S5      rS rS r " S S5      rS r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      r " S$ S%\5      r g)&    N   )Strclassifyget_regexp_widthPy36	Serializesuppress)UnexpectedCharactersLexErrorUnexpectedToken)warn)copyc                   j    \ rS rSrSrSrSS jrS rS rS r	S r
S rS	 r\(       a  S
 rSrgS rSrg)Pattern   Nc                 <    Xl         [        U5      U l        X0l        g N)value	frozensetflagsraw)selfr   r   r   s       0/venv/lib/python3.13/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   )hashtyper   r   r    s    r   __hash__Pattern.__hash__   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__   s<    DzT%[(dTZZ5;;-Fd4::Y^YdYdKddr   c                     [        5       er   NotImplementedErrorr    s    r   r   Pattern.to_regexp        !##r   c                     [        5       er   r.   r    s    r   	min_widthPattern.min_width#   r1   r   c                     [        5       er   r.   r    s    r   	max_widthPattern.max_width&   r1   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_flags+   s    ZZ'(%0  Lr   c                 <    U R                    H  nSU-  U-   nM     U$ )Nz(?%s)r;   r<   s      r   r>   r?   1   s#    ZZ 1-  Lr   )r   r   r   ) N)__name__
__module____qualname____firstlineno__r   r%   r   r!   r&   r+   r   r3   r6   r   r>   __static_attributes__rA   r   r   r   r      s?    
CD
&:e$$$ 		r   r   c                   6    \ rS rSrSrSrS r\S 5       r\r	Sr
g)
PatternStr8   )r   r   strc                 `    U R                  [        R                  " U R                  5      5      $ r   )r>   reescaper   r    s    r   r   PatternStr.to_regexp=   s    ryy455r   c                 ,    [        U R                  5      $ r   )lenr   r    s    r   r3   PatternStr.min_width@   s    4::r   rA   N)rB   rC   rD   rE   __serialize_fields__r%   r   propertyr3   r6   rF   rA   r   r   rH   rH   8   s+    +D6  Ir   rH   c                   L    \ rS rSrSrSrS rSrS r\	S 5       r
\	S 5       rS	rg)
	PatternREF   )r   r   _widthrL   c                 8    U R                  U R                  5      $ r   )r>   r   r    s    r   r   PatternRE.to_regexpK   s    tzz**r   Nc                 p    U R                   c  [        U R                  5       5      U l         U R                   $ r   )rW   r   r   r    s    r   
_get_widthPatternRE._get_widthO   s)    ;;*4>>+;<DK{{r   c                 (    U R                  5       S   $ Nr   r[   r    s    r   r3   PatternRE.min_widthT        ##r   c                 (    U R                  5       S   $ )Nr   r_   r    s    r   r6   PatternRE.max_widthX   ra   r   )rW   )rB   rC   rD   rE   rR   r%   r   rW   r[   rS   r3   r6   rF   rA   r   r   rU   rU   F   sF    5D+ F
 $ $ $ $r   rU   c                   6    \ rS rSrSr\\4rSS jrS r	S r
Srg)TerminalDef]   )namepatternpriorityc                 `    [        U[        5      (       d   U5       eXl        X l        X0l        g r   )
isinstancer   rg   rh   ri   )r   rg   rh   ri   s       r   r   TerminalDef.__init__a   s)    '7++4W4+	 r   c                 l    [        U 5      R                  < SU R                  < SU R                  < S3$ )N(, r:   )r%   rB   rg   rh   r    s    r   r!   TerminalDef.__repr__g   s!    #Dz22DIIt||LLr   c                     U R                   R                  S5      (       a)  U R                  R                  =(       d    U R                   $ U R                   $ )N__)rg   
startswithrh   r   r    s    r   	user_reprTerminalDef.user_reprj   s:    99%%<<##0tyy099r   N)r   )rB   rC   rD   rE   rR   rH   rU   __serialize_namespace__r   r!   rt   rF   rA   r   r   re   re   ]   s#    8()3!Mr   re   c                      ^  \ rS rSrSrSrSU 4S jjr\S 5       rSS jr	\
S 5       rS rS	 rS
 rS r\R"                  rSrU =r$ )Tokenq   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_posc
                   >  [         [        U ]  X5      n
Xl        Ub  UOU	U
l        X*l        XJl        XZl	        Xjl
        Xzl        Xl        U
$ ! [         a'    UR	                  S5      n[         [        U ]  X5      n
 Nhf = f)Nlatin1)superrx   __new__UnicodeDecodeErrordecoder%   rz   r   r{   r|   r}   r~   r   )clstype_r   rz   r{   r|   r}   r~   r   pos_in_streaminst	__class__s              r   r   Token.__new__   s    	9,S8D
 	&/&;
	 $ " 	9LL*E,S8D	9s   A .A?>A?c                 <    [        S[        S5        U R                  $ )Nz<Attribute Token.pos_in_stream was renamed to Token.start_pos   )r   DeprecationWarningrz   r    s    r   r   Token.pos_in_stream   s    KM_abc~~r   c                 v    [         R                  Ub  UOU R                  Ub  UU 5      $ U R                  U 5      $ r   )rx   new_borrow_posr%   r   )r   r   r   s      r   updateToken.update   sB    ##&EDII&E
 	
,0JJ
 	
r   c           
          U " XUR                   UR                  UR                  UR                  UR                  UR
                  5      $ r   )rz   r{   r|   r}   r~   r   )r   r   r   borrow_ts       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   rz   r{   r|   r    s    r   
__reduce__Token.__reduce__   s3    DJJ		SWS^S^ _``r   c                 @    SU R                   < SU R                  < S3$ )NzToken(ro   r:   )r%   r   r    s    r   r!   Token.__repr__   s    "&))TZZ88r   c                     [        U R                  U R                  U R                  U R                  U R
                  5      $ r   )rx   r%   r   rz   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)rk   rx   r%   r   r+   r)   s     r   r+   Token.__eq__   s0    eU##		UZZ(?zz$&&r   rA   )NNNNNNN)NN)rB   rC   rD   rE   __doc__	__slots__r   rS   r   r   classmethodr   r   r!   r   r+   r   r&   rF   __classcell__)r   s   @r   rx   rx   q   se    $ fI"  
 O Oa9T' ||Hr   rx   c                   .    \ rS rSrSrS rS rSS jrSrg)	LineCounter   )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   )rk   r   NotImplementedr   r   r)   s     r   r+   LineCounter.__eq__   s>    %--!!}}.Z43D3DHZHZ3ZZr   c                 ^   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   rP   r|   )r   token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)	rB   rC   rD   rE   r   r   r+   r   rF   rA   r   r   r   r      s    NI [>r   r   c                        \ rS rSrS rS rSrg)UnlessCallback   c                     Xl         g r   scanner)r   r   s     r   r   UnlessCallback.__init__   s    r   c                 r    U R                   R                  UR                  S5      nU(       a	  Uu  o1l        U$ r^   )r   matchr   r%   )r   tres_values       r   __call__UnlessCallback.__call__   s-    ll  !, NFFr   r   NrB   rC   rD   rE   r   r   rF   rA   r   r   r   r      s    r   r   c                        \ rS rSrS rS rSrg)	CallChain   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__   s0    ^^A$(IIbMMt~~a 9r9r   r   Nr   rA   r   r   r   r      s    
:r   r   c                 X    U R                  XU5      nU(       a  UR                  S5      $ g r^   )r   group)re_regexpsr   ms        r   
_get_matchr      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                  :  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%   rh   )r   s    r   <lambda> _create_unless.<locals>.<lambda>   s    4		?r   r   T)match_whole	use_bytes)r   rP   keyssetgetrU   rH   ri   rh   r   r   r   appendr   addr   Scannerrg   )	terminalsg_regex_flagsr   r   tokens_by_typeembedded_strscallbackretokunlessstrtokr   r   new_terminalss                r   _create_unlessr      s3   i)BCN~!#:^%8%8%::#EMH##Ir2$((R8F/$$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   i
  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   rg   allowed_types_build_mresrP   _mres)r   r   r   r   r   r   r   s          r   r   Scanner.__init__  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                  XUR                  R                  5        VVs0 s H  u  pgXv_M	     snn45        XS  nU(       a  M  U$ ! [         a    U R                  XS-  5      s $ f = fs  snn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<>r:   N)rg   rh   r   ).0r   postfixs     r   	<genexpr>&Scanner._build_mres.<locals>.<genexpr>  s0     xcw^_9L9L9NQX9X Ycws   =A zlatin-1r   )r   joinr   encoder   compiler   AssertionErrorr   r   
groupindexitems)	r   r   max_sizemresrh   mrenir   s	           @r   r   Scanner._build_mres  s     ))#riixclmvnvcwxxG~~!..3@hh&&w0B0BC KK0D0D0FG0Fqt0FGHI!),I i  " @''	Q;??@ Hs   !%C .C8C54C5c                     U R                    H>  u  p4UR                  X5      nU(       d  M  UR                  S5      XER                     4s  $    g r^   )r   r   r   	lastindex)r   textposr	  type_from_indexr   s         r   r   Scanner.match)  s@    $(JJ C		$$Aqwwqz?;;#??? %/r   )r   r   r   r   r   r   r   N)F)rB   rC   rD   rE   r   r   r   rF   rA   r   r   r   r   
  s    	A&@r   r   c                     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.rA   )rs    r   _regexp_has_newliner  0  s>     19Z
ZeqjZDAIZ%1*BYQTXYQYZr   c                   "    \ rS rSrSr\rS rSrg)Lexeri;  zKLexer interface

Method Signatures:
    lex(self, text) -> Iterator[Token]
c                 \    [        [        U[        5      (       a  SOS5      n[        X5      $ )N   
r  )r   rk   bytes
LexerState)r   r  line_ctrs      r   make_lexer_stateLexer.make_lexer_stateC  s%    
4(?(?uTJ$))r   rA   N)	rB   rC   rD   rE   r   r   lexr  rF   rA   r   r   r  r  ;  s    
 C*r   r  c                   F    \ rS rSrS rS r\S 5       rS rS r	S
S jr
S	rg)TraditionalLexeriH  c                 f   [        UR                  5      n[        S U 5       5      (       d   U5       eUR                  U l        UR
                  (       d  U H  n U R                  R                  UR                  R                  5       UR                  5        UR                  R                  S:X  d  M^  [        SUR                  < SUR                  < S35      e   [        UR                  5      U Vs1 s H  o3R                  iM     sn::  d>  [        S[        UR                  5      U Vs1 s H  o3R                  iM     sn-
  -  5      e[!        S U 5       5      U l        [!        UR                  5      U l        UR'                  S	 S
9  X l        UR(                  U l        UR                  U l	        UR,                  U l        UR.                  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   )rk   re   r   r   s     r   r   ,TraditionalLexer.__init__.<locals>.<genexpr>L  s     Ay!:a--ys   zCannot compile token z: r   z,Lexer does not allow zero-width terminals. (r:   z$Ignore terminals are not defined: %sc              3      #    U  H;  n[        UR                  R                  5       5      (       d  M-  UR                  v   M=     g 7fr   )r  rh   r   rg   r&  s     r   r   r'  _  s.     &oy!DWXYXaXaXkXkXmDnvqvvys
   ,AAc                     U R                   * U R                  R                  * [        U R                  R                  5      * U R
                  4$ r   )ri   rh   r6   rP   r   rg   )xs    r   r   +TraditionalLexer.__init__.<locals>.<lambda>b  s7    qzzkAII4G4G3G#aiiooJ^I^`a`f`f%gr   )key)listr   all	re_modulerL   skip_validationr  rh   r   r   errorr   rg   r3   r   ignorer   newline_typesignore_typessort	callbacksuser_callbacksr   terminals_by_name_scanner)r   confr   r   s       r   r   TraditionalLexer.__init__J  s   (	AyAAAL9LA..##XGGOOAII$7$7$94;M;MN 99&&!+"\]\b\bdedmdm#noo  $(CA(CCET[[IYmv\wmvhi]c]cmv\wIwxyy '&oy&oo%dkk2gh""nn!//!%!7!7) ww}} X"AFFAII#VWWX )D\ws   >G$8H)1H.$AH&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   1TraditionalLexer._build_scanner.<locals>.<lambda>r  s    TUTZTZ^cTcr   )r   r   r   rL   r   r   r.  valuesr7  r  r   r   r9  )r   r   r=   r   s      @r   _build_scannerTraditionalLexer._build_scannerk  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   )r9  r@  r    s    r   r   TraditionalLexer.scannerx  s"    == !}}r   c                 8    U R                   R                  X5      $ r   )r   r   )r   r  r  s      r   r   TraditionalLexer.match~  s    ||!!$,,r   c              #   x   #    [        [        5          U R                  X5      v   M  ! , (       d  f       g = f7fr   )r	   EOFError
next_token)r   stateparser_states      r   r!  TraditionalLexer.lex  s,     hooe::   s   :)
7:Nc                    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                  ;  a  [        XvUR                  UR                  UR                  5      nUR                  XgU R                  ;   5        UR                  Ul        UR                  Ul        UR                  Ul        UR&                  U R(                  ;   aB  U R(                  UR&                     " U5      n[+        U[        5      (       d  [-        SU-  5      eXl        U$ XpR(                  ;   aA  [        XvUR                  UR                  UR                  5      n	U R(                  U   " U	5        UR                  XgU R                  ;   5        UR                  [        UR                  5      :  a  GM@  [/        U 5      e)Nz<END-OF-FILE>)allowedtoken_historyrI  r8  z+Callbacks must return a token (returned %r))r  r   rP   r  r   r   r   r4  r
   r{   r|   
last_tokenr8  rx   r   r3  r}   r~   r   r%   r   rk   r   rG  )
r   	lex_staterJ  r  r   rM  r   r   r   r   s
             r   rH  TraditionalLexer.next_token  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---%(9(98==(//Zed.@.@%@A%]]
'$--	66T]]*aff-a0A%a//&'TWX'XYY'($MM)uX->->x_BMM%(,ed.@.@%@A9 #inn"55> tnr   )
r9  r   r   r4  r3  rL   r   r8  r   r7  r   )rB   rC   rD   rE   r   r@  rS   r   r   r!  rH  rF   rA   r   r   r#  r#  H  s1    BX  
-;
!r   r#  c                   .    \ rS rSrSrSS jrS rS rSrg)	r  i  r  r  rO  Nc                 (    Xl         X l        X0l        g r   rS  )r   r  r  rO  s       r   r   LexerState.__init__  s    	 $r   c                     [        U[        5      (       d  [        $ U R                  UR                  L =(       a9    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  $ r   )rk   r  r   r  r  rO  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   r  rO  r    s    r   __copy__LexerState.__copy__  s&    Dz$))T$--%8$//JJr   )rO  r  r  r   )	rB   rC   rD   rE   r   r   r+   rY  rF   rA   r   r   r  r    s    0I%
sKr   r  c                   *    \ rS rSrSS jrS rS rSrg)ContextualLexeri  c                 &   [        UR                  5      nUR                  n[        U5      nXFl        0 n0 U l        UR                  5        H#  u  p[        U	5      n
 Xz   nXR                  U'   M%     UR                  UL d   e[        U5      U l        g ! [         aq    [        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5      nXU
'    Nf = fr   )r-  r   r8  r   lexersr  r   KeyErrorr   r2  r#  
root_lexer)r   r:  statesalways_acceptr   r8  	trad_conflexer_by_tokensrI  acceptsr,  lexer
lexer_confr
  s                 r   r   ContextualLexer.__init__  s   (	 22J	'$llnNEG$C-', "'KK - ""i///*95  -g,T[[)99C<NN!)_
FM'hgVgQg(<(9(<g'h
$(4',$-s%   BAD	C1(C10DDc                 8    U R                   R                  U5      $ r   )r`  r  )r   r  s     r   r   ContextualLexer.make_lexer_state  s    //55r   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)rI  rN  r8  )
r^  positionrH  rG  r
   rO  r`  r   rM  r8  )r   lexer_staterJ  rf  erO  r   s          r   r!  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`  N)rA   )rB   rC   rD   rE   r   r  r!  rF   rA   r   r   r\  r\    s    626r   r\  c                   *    \ rS rSrSrS rS rS rSrg)LexerThreadi  zOA thread that ties a lexer instance and a lexer state, to be used by the parserc                 <    Xl         UR                  U5      U l        g r   )rf  r  rI  )r   rf  r  s      r   r   LexerThread.__init__  s    
++D1
r   c                 N    U R                   R                  U R                  U5      $ r   )rf  r!  rI  )r   rJ  s     r   r!  LexerThread.lex  s    zz~~djj,77r   c                     [         R                  [        5      nU R                  Ul        [	        U R
                  5      Ul        U$ r   )objectr   rq  rf  r   rI  )r   copieds     r   rY  LexerThread.__copy__  s0    ,zzDJJ'r   )rf  rI  N)	rB   rC   rD   rE   r   r   r!  rY  rF   rA   r   r   rq  rq    s    Y28r   rq  )!rL   utilsr   r   r   r   r   r	   
exceptionsr
   r   r   warningsr   r   r   rH   rU   re   rx   r   r   r   r   r   r   r  rw  r  r#  r  r\  rq  rA   r   r   <module>r}     s    
 M M G G  'i 'V $ $.) (EC EP> >> : :
#.#@ #@L[
*F 
*_u _DK K$-e -^& r   