
    xiCb                        U 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
  ed       G d d             Z G d	 d
      ZdZe
edf   ed<   i Zeeef   ed<   eD ]o  Zej%                  d      rI ee      dkD  r>ed   j)                         r+eeedd j+                         edd j-                         z   <   ]eeej-                         <   q dZdZdZdZdZdZdez   dz   ez   dz   Zdez   Zeez   ez   Zeez   ez   Z dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#e$z   d$z   e%z   d$z   e&z   d%z   Z(d&Z)d'e(z   dz   Z*d(e*z   d(z   Z+d)e+z   Z,d*e+z   Z-d+e+z   Z.d,e+z   Z/d(e*z   d-z   Z0d.e*z   d/z   e*z   d0z   Z1d.e*z   d1z   e'z   d2z   Z2d3e)z   dz   Z3d4e3z   d5z   Z4d)e4z   Z5d*e4z   Z6d+e4z   Z7d,e4z   Z8d4e3z   d6z   e'z   e3z   d5z   Z9d7Z:d8Z;d9e;z   dz   e:z   d:z   e:z   d;z   Z<d<Z=d=ez   d>z   ez   d?z   ez   d@z   Z>dAez   dAz   ez   d$z   e>z   dz   e=z   dBz   Z? G dC dDe      Z@ edE       G dF dG             ZA eAdHe"e@j                  dI       eAdJe#e@j                  dI       eAdKe9e@j                  dL       eAdMe5e@j                  d       eAdNe6e@j                  d       eAdOe7e@j                  d       eAdPe8e@j                  d       eAdQe4e@j                  d       eAdRe?e@j                  d       eAdSe<e@j                  d       eAdTee@j                  d       eAdUe e@j                  d       eAdVe!e@j                  dW       eAdXee@j                  d       eAdYee@j                  d       eAdZe0e@j                  d       eAd[e+e@j                  d       eAd\e,e@j                  d       eAd]e-e@j                  d       eAd^e.e@j                  d       eAd_e/e@j                  d       eAd`e1e@j                  da       eAdbe2e@j                  d       eAdcee@j                  d      gZEeeA   edd<   i ZFeee
e@e	e   f   f   ede<   g ZGee   edf<   eED ]S  ZHeHj                  eHj                  feFeHj                  <   eGj                  dgeHj                   dheHj                   d       U  e j                  d$j                  eG            ZPe j                  e   edi<    edE       G dj dk             ZRg  eRdldm       eRdndo       eRdpdq       eRdrds       eRdtdu       eRdvdw       eRdxdy       eRdzd{       eRd|d}       eRd~d       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd6       eRdd       eRdd       eRdd$       eRdd       eRdd       eRdd       eRdd       eRdd       eRddh       eRdd       eRddA       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd       eRdd«      ZSeeR   ed<   i ZTeeeeR   f   ed<   eSD ]0  ZUeTj                  eUj                  d    g       j                  eU       2 eTj                         D ]  ZYeYj                  dń dƫ         e j                  dǫ      Z[e j                  e   ed<    e j                  dɫ      Z\e j                  e   ed<   y)    N)	dataclass)Enum)CallableDictListOptionalTupleT)slotsc                   6    e Zd ZU eed<   eed<   eed<   eed<   y)_TokentypevaluelinenocolumnN)__name__
__module____qualname__str__annotations__int     ]/var/www/html/chatbot/card-advisor-bot/venv/lib/python3.12/site-packages/pycparser/c_lexer.pyr   r      s    
IJKKr   r   c            
           e Zd ZdZdeeeegdf   deg df   deg df   deegef   ddf
dZdd	ed
eddfdZ	ddZ
edefd       Zdee   fdZdee   fdZdedededefdZdededdfdZddZdee   fdZy)CLexera  A standalone lexer for C.

    Parameters for construction:
        error_func:
            Called with (msg, line, column) on lexing errors.
        on_lbrace_func:
            Called when an LBRACE token is produced (used for scope tracking).
        on_rbrace_func:
            Called when an RBRACE token is produced (used for scope tracking).
        type_lookup_func:
            Called with an identifier name; expected to return True if it is
            a typedef name and should be tokenized as TYPEID.

    Call input(text) to initialize lexing, and then keep calling token() to
    get the next token, until it returns None (at end of input).
    
error_funcNon_lbrace_funcon_rbrace_functype_lookup_funcreturnc                 \    || _         || _        || _        || _        | j	                          y N)r   r   r   r   _init_state)selfr   r   r   r   s        r   __init__zCLexer.__init__)   s/     %,, 0r   textfilenamec                 @    | j                          || _        || _        y)zInitialize the lexer to the given input text.

        filename is an optional name identifying the file from which the input
        comes. The lexer can modify it if #line directives are encountered.
        N)r#   _lexdata	_filename)r$   r&   r'   s      r   inputzCLexer.input6   s     	!r   c                 X    d| _         d| _        d| _        d| _        d | _        d| _        y )N r      )r)   r*   _pos_line_start_pending_tok_linenor$   s    r   r#   zCLexer._init_state@   s.    	.2r   c                     | j                   S r"   )r*   r3   s    r   r'   zCLexer.filenameH   s    ~~r   c                    | j                   }t        |      }| j                  | j                  }d | _        |S | j                  |k  r|| j                     xxdk(  rnxdk(  rn n  | xj                  dz  c_        nPxdk(  r> | xj                  dz  c_        | xj                  dz  c_        | j                  | _        ndk(  rt        j                  || j                  dz         r&| xj                  dz  c_        | j                          t        j                  || j                  dz         rR| xj                  dz  c_        | j                         }t        |      dkD  r
|d   | _        t        |      dkD  r|d   S K| j                  dd| j                        }| xj                  dz  c_        |S 	 | j                         x}r|S | j                  |k  ry y )N 	r.   
#r   PPHASH)r)   lenr1   r/   r2   r0   _line_patternmatch_handle_ppline_pragma_pattern_handle_pppragma_make_token_match_token)r$   r&   ntoktokss        r   tokenzCLexer.tokenL   s~   6 }}I(##C $DJii!mtyy/S4ZIINILLA%LIINI'+yyD$$**4Q?		Q	++- &,,T499q=A		Q	#446t9q=04QD-t9q=#'7N **8S$))DCIINIJ"//11s1"
 9 ii!mr   c                 t   | j                   }| j                  }d}t        j                  ||      x}r?|j                  }|J |j                  |      }t        |      }t        |   \  }}	|||||	f}t        j                  ||         x}
rm|
D ]h  }|j                  |j                  |      s t        |j                        }|||d   kD  r)||j                  |j                  t        j                  df} n |9dt        ||          }	| j!                  |	|       | xj                  dz  c_        y|\  }}}}}	|t        j"                  k(  r@|dk(  rd| }	|	J | j!                  |	|       | xj                  t%        d|      z  c_        y|t        j&                  k(  r.t(        j                  |d      }|dk(  r| j+                  |      rd}| j-                  |||      }| xj                  |z  c_        |j.                  d	k(  r| j1                          |S |j.                  d
k(  r| j3                          |S )zMatch one token at the current position.

        Returns a Token on success, or None if no token could be matched and
        an error was reported. This method always advances _pos by the matched
        length, or by 1 on error/no-match.
        Nr   zIllegal character r.   BAD_CHAR_CONSTzInvalid char constant IDTYPEIDLBRACERBRACE)r)   r/   _regex_masterr=   	lastgroupgroupr;   _regex_actions_fixed_tokens_by_firstget
startswithliteraltok_type_RegexActionTOKENrepr_errorERRORmaxrI   _keyword_mapr   rA   r   r   r   )r$   r&   posbestmrU   r   lengthactionmsgbucketentryrD   s                r   rB   zCLexer._match_token   s5    }}ii ##D#..1.{{H'''GGH%EZF(2KFCHeVS9D+//S	::6: ??5==#6 /F|vQ'7"!NN!MM(..    <&tDI&78CKKS!IINI/3,%\'''++.ug6?"?KKS!IIQ'I\__$#''t4H4D$9$9%$@#x4		V	88x! 
 XX!!
r   rU   r   r]   c                 Z    || j                   z
  dz   }t        ||| j                  |      }|S )a#  Create a Token at an absolute input position.

        Expects tok_type/value and the absolute byte offset pos in the current
        input. Does not advance lexer state; callers manage _pos themselves.
        Returns a Token with lineno/column computed from current line tracking.
        r.   )r0   r   r2   )r$   rU   r   r]   r   rD   s         r   rA   zCLexer._make_token   s2     t'''!+XudllF;
r   rb   c                 b    || j                   z
  dz   }| j                  || j                  |       y Nr.   )r0   r   r2   )r$   rb   r]   r   s       r   rY   zCLexer._error   s+    t'''!+T\\62r   c                 N   	
  j                   }t        |      }|j                  d j                        

dk(  r|
| j                  
 	dt        	      d	fd} |        	j	                  d      rdz  dt
        t           d	t
        t           dd f
 fd
}dt        dt        dd f
 fd} |        k\  r
 |d d        y 	   dk(  r
 |d       y t        j                  t        	d        }|s
 |d       y |j                  d      }t        |      z   |        k\  r
 ||d        y 	   dk7  r
 |d       y t        j                  t        	d        }|s
 |d       y |j                  d      j                  d      j                  d      }t        |j                  d            z  	  |        k\  rnGt        j                  t        	d        }|s
 |d       y t        |j                  d            z  T |||       y )Nr8   r   r    c                  H    k  r    dv rdz  k  r	    dv ry y y y )N 	r.   r   )lineline_lenr]   s   r   skip_wsz&CLexer._handle_ppline.<locals>.skip_ws  s9    .T#Y%%7q .T#Y%%7.%7.r   rl      pp_linepp_filenamec                     |  j                  dj                  z          nt        |       _        ||_        dz   _        j                  _        y )Nzline number missing in #liner.   )rY   r/   r   r2   r*   r0   )rp   rq   line_endrm   r$   s     r   successz&CLexer._handle_ppline.<locals>.success  sO    :DII<PQ"7|*%0DN 1DI#yyDr   rb   offsetc                 z    j                  | j                  |z          dz   _        j                  _        y rg   )rY   r/   r0   )rb   ru   rs   r$   s     r   failz#CLexer._handle_ppline.<locals>.fail  s1    KKTYY/0 1DI#yyDr   "z$filename before line number in #linezinvalid #line directiver    N)r)   r;   findr/   rS   r   r   r   rer=   _decimal_constantrO   _string_literallstriprstrip)r$   r&   rC   rn   rt   rw   r_   rp   rq   rl   rs   rm   r]   s   `        @@@@r   r>   zCLexer._handle_ppline   s"   ( }}I99T499-r>HDII)t9	
 		??63'1HC	)Xc] 	)# 	)4 	)	)c 	)3 	)4 	)
 		(?D$97=HH&ST
3*C0''!*s7|	(?GT"9*C0HH_d34j1*C0ggaj'',33C8s1771: Ih*DJ7A.43qwwqz?"C  	%r   c                    | j                   }t        |      }| j                  }||k  r||   dv r|dz  }||k  r||   dv r||k\  r	|| _        g S |j                  d|      s| j	                  d|       |dz   | _        g S |}|t        d      z  }| j                  dd|      g}||k  r||   dv r|dz  }||k  r||   dv r|}||k  r||   dk7  r|dz  }||k  r	||   dk7  r||kD  r%|j                  | j                  d||| |             ||k  r)||   dk(  r!| xj                  dz  c_        |dz  }|| _        || _        |S )Nrk   r.   pragmazinvalid #pragma directivePPPRAGMAr8   PPPRAGMASTR)	r)   r;   r/   rS   rY   rA   appendr2   r0   )r$   r&   rC   r]   
pragma_posrE   starts          r   r@   zCLexer._handle_pppragmaK  s    }}IiiAg$s)u,1HC Ag$s)u,!8DIIx-KK3S9aDII
s8}  XzBCAg$s)u,1HC Ag$s)u, Ag$s)t+1HC Ag$s)t+;KK((U3OP7tCyD(LLAL1HC"D	r   )r-   ry   )r   r   r   __doc__r   r   r   boolr%   r+   r#   propertyr'   r   r   rF   rB   rA   rY   r>   r   r@   r   r   r   r   r      s   "c3_d23 !T* !T*	
 #C5$;/ 
"# " "d " #  ?!x' ?!BKhv. KZ	C 	 	# 	& 	3# 3C 3D 3`&D*$v, *r   r   )-AUTOBREAKCASECHARCONSTCONTINUEDEFAULTDODOUBLEELSEENUMEXTERNFLOATFORGOTOIFINLINEINTLONGREGISTEROFFSETOFRESTRICTRETURNSHORTSIGNEDSIZEOFSTATICSTRUCTSWITCHTYPEDEFUNIONUNSIGNEDVOIDVOLATILEWHILE__INT128_BOOL_COMPLEX	_NORETURN_THREAD_LOCAL_STATIC_ASSERT_ATOMIC_ALIGNOF_ALIGNAS_PRAGMA.	_keywordsr\   _r.      z[a-zA-Z_$][0-9a-zA-Z_$]*z0[xX]z[0-9a-fA-F]+z0[bB]z[01]+zD(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?z(0z)|([1-9][0-9]*)z0[0-7]*z0[0-7]*[89]z\/\*z\/\/z,([a-wyzA-Z._~!=&\^\-\\?'"]|x(?![0-9a-fA-F]))z(\d+)(?!\d)z(x[0-9a-fA-F]+)(?![0-9a-fA-F])z#([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-9])z(\\(|z))z(\\[0-9a-zA-Z._~!=&\^\-\\?'"])z
([^'\\\n]|'Lu8uUz{2,4}'z('z*\n)|('z*$)z[^'
]+')|('')|('z	[^'\n]*')z
([^"\\\n]|rx   z*"*z([eE][-+]?[0-9]+)z([0-9]*\.[0-9]+)|([0-9]+\.)z((((z
?)|([0-9]+z
))[FfLl]?)z([pP][+-]?[0-9]+)z(((z)?\.z)|(z\.))(z[FfLl]?)c                       e Zd ZdZdZdZy)rV   r   r.   r   N)r   r   r   rW   rI   rZ   r   r   r   rV   rV   2  s    E	
BEr   rV   )frozenc                   <    e Zd ZU eed<   eed<   eed<   ee   ed<   y)
_RegexRulerU   regex_patternra   error_messageN)r   r   r   r   r   rV   r   r   r   r   r   r   8  s     MC= r   r   UNSUPPORTED_C_STYLE_COMMENTzKComments are not supported, see https://github.com/eliben/pycparser#3using.UNSUPPORTED_CXX_STYLE_COMMENTBAD_STRING_LITERALz#String contains invalid escape codeWSTRING_LITERALU8STRING_LITERALU16STRING_LITERALU32STRING_LITERALSTRING_LITERALHEX_FLOAT_CONSTFLOAT_CONSTINT_CONST_HEXINT_CONST_BINBAD_CONST_OCTzInvalid octal constantINT_CONST_OCTINT_CONST_DECINT_CONST_CHAR
CHAR_CONSTWCHAR_CONSTU8CHAR_CONSTU16CHAR_CONSTU32CHAR_CONSTUNMATCHED_QUOTEzUnmatched 'rH   rI   _regex_rulesrP   _regex_pattern_partsz(?P<>rM   c                   "    e Zd ZU eed<   eed<   y)_FixedTokenrU   rT   N)r   r   r   r   r   r   r   r   r   r     s    MLr   r   ELLIPSISz...LSHIFTEQUALz<<=RSHIFTEQUALz>>=PLUSPLUSz++
MINUSMINUSz--ARROWz->LANDz&&LORz||LSHIFTz<<RSHIFTz>>LEz<=GEz>=EQz==NEz!=
TIMESEQUALz*=DIVEQUALz/=MODEQUALz%=	PLUSEQUALz+=
MINUSEQUALz-=ANDEQUALz&=OREQUALz|=XOREQUALz^=EQUALS=PLUS+MINUS-TIMESDIVIDE/MOD%ORAND&NOT~XOR^LNOT!LT<GTCONDOP?LPARENRPARENLBRACKET[RBRACKET]rK   {rL   }COMMA,PERIOD.SEMI;COLON:_fixed_tokensrQ   c                 ,    t        | j                        S r"   )r;   rT   )items    r   <lambda>r&    s    #dll"3 r   )keyreversez([ \t]*line\W)|([ \t]*\d+)r<   z[ \t]*pragma\Wr?   )]r{   dataclassesr   enumr   typingr   r   r   r   r	   r   r   r   r   r   r\   keywordrS   r;   isalphaupperlower_identifier_hex_prefix_hex_digits_bin_prefix_bin_digits_integer_suffix_optr|   _octal_constant_hex_constant_bin_constant_bad_octal_constant_unsupported_c_style_comment_unsupported_cxx_style_comment_simple_escape_decimal_escape_hex_escape_bad_escape_escape_sequence _escape_sequence_start_in_string_cconst_char_char_const_wchar_const_u8char_const_u16char_const_u32char_const_multicharacter_constant_unmatched_quote_bad_char_const_string_charr}   _wstring_literal_u8string_literal_u16string_literal_u32string_literal_bad_string_literal_exponent_part_fractional_constant_floating_constant_binary_exponent_part_hex_fractional_constant_hex_floating_constantrV   r   rZ   rW   rI   r   rP   r   _rulera   r   rU   r   r   compilejoinrM   Patternr   r#  rQ   _entry
setdefaultrT   values_bucketsortr<   r?   r   r   r   <module>r`     s
   
 !  8 8   ^ ^H.	5c? .`  "d38n ! 0G#3w<!#3
8J8J8LBIWRa[&&(712;+<+<+>>?(/W]]_%0 * L  	!114GG#M  11k),??k),??#   ' !( B E$38 . 3&83>LtS  $I   #33c9L 3&[ {"{"{"-8 ,&3lBUJ 66DGWW 
 !#CCcI$t+( ?* ?* ?* L(3.<|KdR  *9 
	
  	
    1 	K+%3e;kIKW  	
  
	

  

   4  $! ! ! %$U	 '&U	 -	  "2L4F4FM!#4l6H6H$O"$68J8JDQ"$68J8JDQ,2D2DdK "8,:L:LdS}0,2D2DdK|/A/A4H|/A/A4H 	 1C1CTJ 1<3E3EtL!9<;M;MtT|[,*<*<dC}lL,>,>E~}l.@.@$G0B0BDI0B0BDI "2L4F4FV,2D2DdKt[,//48Y-"d: -^ ACS%hsm ;<<= B"$ d3i $ PE&+llE4G4G%HN5>>"$u~~&6a8K8K7LA NOP ",CHH5I,J!Krzz# K $  
/$
E"/$u%/$ u%/$ 
D!	/$
 d#/$ /$ /$ t/$ $/$ $/$ d/$ d/$ d/$ d/$ d#/$  
D!!/$" 
D!#/$$ T"%/$& d#'/$( 
D!)/$* 	4 +/$, 
D!-/$. #//$0 1/$2 3/$4 5/$6 #7/$8 s9/$: c;/$< s=/$> s?/$@ sA/$B C/$D cE/$F cG/$H #I/$J #K/$L #M/$N 
C O/$P 
C Q/$R #S/$T #U/$V W/$X #Y/$Z [/$\ ]/$tK  /l 8: S${"334 9 LF%%fnnQ&7<CCFKL%,,. CGLL3TLBC ",,I!Jrzz# J#-2::.?#@C @r   