
    Yh"C                     :    d dl Z ddlmZ ddlmZ  G d de      Zy)    N   )lex)TOKENc                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
ZdZi ZeD ]  Zeeej!                         <    eD ],  Zeeedd j#                         edd j!                         z   <   . eez   dz   Z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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   Z*d)e$z   d*z   e$z   d+z   Z+d)e$z   d,z   e!z   d-z   Z,d.e#z   dz   Z-d/e-z   d0z   Z.d$e.z   Z/d%e.z   Z0d&e.z   Z1d'e.z   Z2d/e-z   d1z   e!z   e-z   d0z   Z3d2Z4d3Z5d4e5z   dz   e4z   d5z   e4z   d6z   Z6d7Z7d8ez   d9z   ez   d:z   ez   d;z   Z8d<ez   d<z   ez   dz   e8z   dz   e7z   d=z   Z9d>Z:d? Z; e<e.      d@        Z= e<e      dA        Z>dB Z?dC Z@dDZAdE ZBdF ZCdG ZDdDZEdH ZFdI ZGdDZHdJ ZIdKZJdLZKdMZLdNZMdOZNdPZOdQZPdRZQdSZRdTZSdUZTdVZUdWZVdXZWdYZXdZZYd[ZZd\Z[d]Z\d^Z]d_Z^d`Z_daZ`dbZadcZbddZcdeZddfZedgZfdhZgdiZhdjZidkZjdlZkdmZldnZmdoZndpZodqZpdrZqdsZrdtZsduZtdvZu e<dw      dx        Zv e<dy      dz        Zwe.Zx e<e6      d{        Zy e<e9      d|        Zz e<e      d}        Z{ e<e      d~        Z| e<e      d        Z} e<e      d        Z~ e<e      d        Z e<e*      d        Z e<e%      d        Z e<e&      d        Z e<e'      d        Z e<e(      d        Z e<e)      d        Z e<e+      d        Z e<e,      d        Z e<e/      d        Z e<e0      d        Z e<e1      d        Z e<e2      d        Z e<e3      d        Z e<e      d        Zd Zy)CLexera   A lexer for the C language. After building it, set the
        input text with input(), and call token() to get new
        tokens.

        The public attribute filename can be set to an initial
        filename, but the lexer will update it upon #line
        directives.
    c                     || _         || _        || _        || _        d| _        d| _        t        j                  d      | _        t        j                  d      | _	        y)ab   Create a new Lexer.

            error_func:
                An error function. Will be called with an error
                message, line and column as arguments, in case of
                an error during lexing.

            on_lbrace_func, on_rbrace_func:
                Called when an LBRACE or RBRACE is encountered
                (likely to push/pop type_lookup_func's scope)

            type_lookup_func:
                A type lookup function. Given a string, it must
                return True IFF this string is a name of a type
                that was defined with a typedef earlier.
         Nz([ \t]*line\W)|([ \t]*\d+)z[ \t]*pragma\W)

error_funcon_lbrace_funcon_rbrace_functype_lookup_funcfilename
last_tokenrecompileline_patternpragma_pattern)selfr
   r   r   r   s        b/var/www/django-portfolio.reubendavern.link/venv/lib/python3.12/site-packages/pycparser/c_lexer.py__init__zCLexer.__init__   sY    $ %,, 0 
 JJ'DE jj):;    c                 <    t        j                   dd| i|| _        y)z Builds the lexer from the specification. Must be
            called after the lexer object is created.

            This method exists separately, because the PLY
            manual warns against calling lex.lex inside
            __init__
        objectN )r   lexer)r   kwargss     r   buildzCLexer.build9   s     WW3D3F3
r   c                 &    d| j                   _        y)z? Resets the internal line number counter of the lexer.
        r   N)r   linenor   s    r   reset_linenozCLexer.reset_linenoC   s     

r   c                 :    | j                   j                  |       y N)r   input)r   texts     r   r$   zCLexer.inputH   s    

r   c                 X    | j                   j                         | _        | j                  S r#   )r   tokenr   r    s    r   r'   zCLexer.tokenK   s     ****,r   c                     | j                   j                  j                  dd|j                        }|j                  |z
  S )z3 Find the column of the token in its line.
        
r   )r   lexdatarfindlexpos)r   r'   last_crs      r   find_tok_columnzCLexer.find_tok_columnO   s5     **$$**4ELLA||g%%r   c                     | j                  |      }| j                  ||d   |d          | j                  j                  d       y )Nr   r   )_make_tok_locationr
   r   skip)r   msgr'   locations       r   _errorzCLexer._errorZ   s:    **51Xa[(1+6

r   c                 <    |j                   | j                  |      fS r#   )r   r.   )r   r'   s     r   r0   zCLexer._make_tok_location_   s    d2259::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_PRAGMAN   )DIDTYPEIDINT_CONST_DECINT_CONST_OCTINT_CONST_HEXINT_CONST_BININT_CONST_CHARFLOAT_CONSTHEX_FLOAT_CONST
CHAR_CONSTWCHAR_CONSTU8CHAR_CONSTU16CHAR_CONSTU32CHAR_CONSTSTRING_LITERALWSTRING_LITERALU8STRING_LITERALU16STRING_LITERALU32STRING_LITERALPLUSMINUSTIMESDIVIDEMODORANDNOTXORLSHIFTRSHIFTLORLANDLNOTLTLEGTGEEQNEEQUALS
TIMESEQUALDIVEQUALMODEQUAL	PLUSEQUAL
MINUSEQUALLSHIFTEQUALRSHIFTEQUALANDEQUALXOREQUALOREQUALPLUSPLUS
MINUSMINUSARROWCONDOPLPARENRPARENLBRACKETRBRACKETLBRACERBRACECOMMAPERIODSEMICOLONELLIPSISPPHASHPPPRAGMAPPPRAGMASTRz[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,([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]|"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]?)))ppline	exclusive)pppragmar   c                    | j                   j                  |j                  j                  |j                  j                        r*|j                  j                  d       dx| _        | _        y| j                  j                  |j                  j                  |j                  j                        r|j                  j                  d       yd|_	        |S )z[ \t]*\#)posr   Nr   r   )
r   matchr   r*   r,   beginpp_linepp_filenamer   typer   ts     r   t_PPHASHzCLexer.t_PPHASH"  s    ""177??"GGGMM(#.22DL4+  &&qwwAGGNN&KGGMM*%AFHr   c                     | j                   | j                  d|       y |j                  j                  d      j	                  d      | _        y )Nz$filename before line number in #liner   )r   r4   valuelstriprstripr   r   s     r   t_ppline_FILENAMEzCLexer.t_ppline_FILENAME0  s;    <<KK>B ww~~c299#>Dr   c                 @    | j                   |j                  | _         y y r#   )r   r   r   s     r   t_ppline_LINE_NUMBERzCLexer.t_ppline_LINE_NUMBER7  s    <<77DL r   c                     | j                   | j                  d|       nAt        | j                         | j                  _        | j
                  | j
                  | _        |j                  j                  d       y)\nNzline number missing in #lineINITIAL)r   r4   intr   r   r   r   r   r   s     r   t_ppline_NEWLINEzCLexer.t_ppline_NEWLINE@  sY    <<KK6: #DLL 1DJJ+ $ 0 0	i r   c                      y)lineNr   r   s     r   t_ppline_PPLINEzCLexer.t_ppline_PPLINEL  s    r   z 	c                 (    | j                  d|       y )Nzinvalid #line directiver4   r   s     r   t_ppline_errorzCLexer.t_ppline_errorR  s    -q1r   c                 x    |j                   xj                  dz  c_        |j                   j                  d       y)r   r   r   N)r   r   r   r   s     r   t_pppragma_NEWLINEzCLexer.t_pppragma_NEWLINEX  s$    	!	i r   c                     |S )pragmar   r   s     r   t_pppragma_PPPRAGMAzCLexer.t_pppragma_PPPRAGMA]      r   c                     d|_         |S )z.+r   )r   r   s     r   t_pppragma_STRzCLexer.t_pppragma_STRc  s    r   c                 (    | j                  d|       y )Nzinvalid #pragma directiver   r   s     r   t_pppragma_errorzCLexer.t_pppragma_errorh  s    /3r   c                 t    |j                   xj                  |j                  j                  d      z  c_        y)z\n+r)   N)r   r   r   countr   s     r   	t_NEWLINEzCLexer.t_NEWLINEq  s!    	!''----r   z\+-z\*/%z\|&~z\^z<<z>>z\|\|z&&!<>z<=z>=z==z!==z\*=z/=z%=z\+=z-=z<<=z>>=z&=z\|=z\^=z\+\+z--z->z\?z\(z\)z\[z\],z\.;:z\.\.\.z\{c                 &    | j                          |S r#   )r   r   s     r   t_LBRACEzCLexer.t_LBRACE      r   z\}c                 &    | j                          |S r#   )r   r   s     r   t_RBRACEzCLexer.t_RBRACE  r   r   c                     |S r#   r   r   s     r   t_FLOAT_CONSTzCLexer.t_FLOAT_CONST  r   r   c                     |S r#   r   r   s     r   t_HEX_FLOAT_CONSTzCLexer.t_HEX_FLOAT_CONST  r   r   c                     |S r#   r   r   s     r   t_INT_CONST_HEXzCLexer.t_INT_CONST_HEX  r   r   c                     |S r#   r   r   s     r   t_INT_CONST_BINzCLexer.t_INT_CONST_BIN  r   r   c                 ,    d}| j                  ||       y )NzInvalid octal constantr   r   r   r2   s      r   t_BAD_CONST_OCTzCLexer.t_BAD_CONST_OCT  s    &Cr   c                     |S r#   r   r   s     r   t_INT_CONST_OCTzCLexer.t_INT_CONST_OCT  r   r   c                     |S r#   r   r   s     r   t_INT_CONST_DECzCLexer.t_INT_CONST_DEC  r   r   c                     |S r#   r   r   s     r   t_INT_CONST_CHARzCLexer.t_INT_CONST_CHAR  r   r   c                     |S r#   r   r   s     r   t_CHAR_CONSTzCLexer.t_CHAR_CONST  r   r   c                     |S r#   r   r   s     r   t_WCHAR_CONSTzCLexer.t_WCHAR_CONST  r   r   c                     |S r#   r   r   s     r   t_U8CHAR_CONSTzCLexer.t_U8CHAR_CONST  r   r   c                     |S r#   r   r   s     r   t_U16CHAR_CONSTzCLexer.t_U16CHAR_CONST  r   r   c                     |S r#   r   r   s     r   t_U32CHAR_CONSTzCLexer.t_U32CHAR_CONST  r   r   c                 ,    d}| j                  ||       y )NzUnmatched 'r   r   s      r   t_UNMATCHED_QUOTEzCLexer.t_UNMATCHED_QUOTE  s    Cr   c                 F    d|j                   z  }| j                  ||       y )NzInvalid char constant %s)r   r4   r   s      r   t_BAD_CHAR_CONSTzCLexer.t_BAD_CHAR_CONST  s    (1772Cr   c                     |S r#   r   r   s     r   t_WSTRING_LITERALzCLexer.t_WSTRING_LITERAL  r   r   c                     |S r#   r   r   s     r   t_U8STRING_LITERALzCLexer.t_U8STRING_LITERAL  r   r   c                     |S r#   r   r   s     r   t_U16STRING_LITERALzCLexer.t_U16STRING_LITERAL  r   r   c                     |S r#   r   r   s     r   t_U32STRING_LITERALzCLexer.t_U32STRING_LITERAL  r   r   c                 ,    d}| j                  ||       y )Nz#String contains invalid escape coder   r   s      r   t_BAD_STRING_LITERALzCLexer.t_BAD_STRING_LITERAL  s    3Cr   c                     | j                   j                  |j                  d      |_        |j                  dk(  r"| j	                  |j                        rd|_        |S )Nrd   re   )keyword_mapgetr   r   r   r   s     r   t_IDzCLexer.t_ID"  sH    !!%%aggt466T>d33AGG<AFr   c                 ^    dt        |j                  d         z  }| j                  ||       y )NzIllegal character %sr   )reprr   r4   r   s      r   t_errorzCLexer.t_error)  s'    $tAGGAJ'77Cr   )__name__
__module____qualname____doc__r   r   r!   r$   r'   r.   r4   r0   keywordskeywords_newr  keywordloweruppertokens
identifier
hex_prefix
hex_digits
bin_prefix
bin_digitsinteger_suffix_optdecimal_constantoctal_constanthex_constantbin_constantbad_octal_constant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_charstring_literal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_constantstatesr   r   r   r   r   r   t_ppline_ignorer   r   r   t_pppragma_ignorer   r   t_ignorer   t_PLUSt_MINUSt_TIMESt_DIVIDEt_MODt_ORt_ANDt_NOTt_XORt_LSHIFTt_RSHIFTt_LORt_LANDt_LNOTt_LTt_GTt_LEt_GEt_EQt_NEt_EQUALSt_TIMESEQUAL
t_DIVEQUAL
t_MODEQUALt_PLUSEQUALt_MINUSEQUALt_LSHIFTEQUALt_RSHIFTEQUAL
t_ANDEQUAL	t_OREQUAL
t_XOREQUAL
t_PLUSPLUSt_MINUSMINUSt_ARROWt_CONDOPt_LPARENt_RPAREN
t_LBRACKET
t_RBRACKETt_COMMAt_PERIODt_SEMIt_COLON
t_ELLIPSISr   r   t_STRING_LITERALr   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   <B4
&
;H
L K /'.GMMO$/   IAHGBQK%%''!"+*;*;*==>I $ ;( ;FF -JJJJJ a../??@RRSVV11Nj();;Lj();;L&8 HM'N6J;J!-/3NB3FzQRVVO
 'L##O3C7K[$Jj.K
?L
NM
NM!+oh6;&z1+=eCO{*+BB:MN^^N $$CCCGK_T)N.(ON*N*N*[,Z7CDH -M<2236}D\QR__`ll3#J.{::EeKJVWbb
N3.z9#=>UUVYYZnnoyy
F	 >? ?  
! O2!
 
4 H.
  FGGHEDEEEHH!EFFDDDDDD H LJJ KL M MJ I J "JL  G  H  HHJJGHFG#J 5\  5\  &    ! " <  <    >    "# $ :  ;  <  =  =  ?  >  ?       
   : r   r   )r   plyr   ply.lexr   r   r   r   r   r   <module>r     s    
  \V \r   