XjCbUddlZddlmZddlmZddlmZmZmZm Z m Z edGddZ Gd d Z d Z e ed fed <iZeeefed<e D]oZej%drIeedkDr>edj)r+eeeddj+eddj-z<]eeej-<qdZdZdZdZdZdZdezdzezdzZdezZeezezZeezezZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#e$zd$ze%zd$ze&zd%zZ(d&Z)d'e(zdzZ*d(e*zd(zZ+d)e+zZ,d*e+zZ-d+e+zZ.d,e+zZ/d(e*zd-zZ0d.e*zd/ze*zd0zZ1d.e*zd1ze'zd2zZ2d3e)zdzZ3d4e3zd5zZ4d)e4zZ5d*e4zZ6d+e4zZ7d,e4zZ8d4e3zd6ze'ze3zd5zZ9d7Z:d8Z;d9e;zdze:zd:ze:zd;zZzezd?zezd@zZ>dAezdAzezd$ze>zdze=zdBzZ?GdCdDeZ@edEGdFdGZAeAdHe"e@jdIeAdJe#e@jdIeAdKe9e@jdLeAdMe5e@jdeAdNe6e@jdeAdOe7e@jdeAdPe8e@jdeAdQe4e@jdeAdRe?e@jdeAdSe|xjdz c_|xjdz c_|j|_n dk(rt j||jdzr&|xjdz c_|jtj||jdzrR|xjdz c_|j}t|dkDr |d|_t|dkDr|dSK|jdd|j}|xjdz c_|S |jx}r|S|j|kryy)N  r. #rPPHASH) r)lenr1r/r2r0 _line_patternmatch_handle_ppline_pragma_pattern_handle_pppragma _make_token _match_token)r$r&ntoktokss rtokenz CLexer.tokenLs~6}} I    (##C $D Jii!mtyy/S4ZIINILLA%LIINI'+yyD$$**4Q? Q ++- &,,T499q=A Q #446t9q=04QD-t9q=#'7N **8S$))DCIINIJ"//11s1"  9ii!mrct|j}|j}d}tj||x}r?|j}|J|j |}t |}t|\}} ||||| f}tj||x} rm| D]h} |j| j|s t | j}|||dkDr)|| j| jtjdf}n|9dt||} |j!| ||xjdz c_y|\}}}}} |tj"k(r@|dk(rd|} | J|j!| ||xjt%d|z c_y|tj&k(r.t(j|d}|dk(r|j+|rd}|j-|||} |xj|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. NrzIllegal character r.BAD_CHAR_CONSTzInvalid char constant IDTYPEIDLBRACERBRACE)r)r/ _regex_masterr= lastgroupgroupr;_regex_actions_fixed_tokens_by_firstget startswithliteraltok_type _RegexActionTOKENrepr_errorERRORmaxrI _keyword_maprrAr rr) r$r&posbestmrUrlengthactionmsgbucketentryrDs rrBzCLexer._match_tokens5}}ii##D#. .1 .{{H' ''GGH%EZF(2KFCHeVS9D+//S : :6 : ??5==#6 /F|vQ'7"!NN!MM(..    <&tDI&78C KKS ! IINI/3,% \'' '++.ug6? "? KKS ! IIQ 'I \__ $#''t4H4D$9$9%$@#x4 V 88x     ! XX !    ! rrUrr]cZ||jz dz}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.)r0r r2)r$rUrr]rrDs rrAzCLexer._make_tokens2t'''!+XudllF; rrbcb||jz dz}|j||j|yNr.)r0rr2)r$rbr]rs rrYz CLexer._errors+t'''!+ T\\62rcN j}t|}|jdj dk(r| |j  d t  d fd }| j d r dz dt t d t t ddf fd }d t d tddf fd }| k\r |ddy dk(r |d ytjt d}|s |d y|jd} t|z | k\r ||dy dk7r |d ytjt d}|s |d y|jdjdjd} t|jdz | k\rnGtjt d}|s |d y t|jdz T|||y)Nr8rr cHkrdvrdz kr dvryyyy)N r.r)lineline_lenr]srskip_wsz&CLexer._handle_ppline..skip_wss9.T#Y%%7q.T#Y%%7.%7.rrlpp_line pp_filenamec| jdjznt|_||_dz_j_y)Nzline number missing in #liner.)rYr/rr2r*r0)rprqline_endrmr$s rsuccessz&CLexer._handle_ppline..successsO :DII.fails1 KKTYY/ 0 1 DI#yyD r"z$filename before line number in #linezinvalid #line directiver N)r)r;findr/rSrrrrer=_decimal_constantrO_string_literallstriprstrip) r$r&rCrnrtrwr_rprqrlrsrmr]s ` @@@@rr>zCLexer._handle_pplines"(}} I99T499- r>HDII)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'',33C8  s1771: Ih*DJ7A.4 3qwwqz? "C %rc|j}t|}|j}||kr||dvr|dz }||kr||dvr||k\r ||_gS|jd|s|j d||dz|_gS|}|tdz }|j dd|g}||kr||dvr|dz }||kr||dvr|}||kr||dk7r|dz }||kr ||dk7r||kDr%|j |j d||||||kr)||dk(r!|xjdz c_|dz }||_||_|S)Nrkr.pragmazinvalid #pragma directivePPPRAGMAr8 PPPRAGMASTR) r)r;r/rSrYrAappendr2r0)r$r&rCr] pragma_posrEstarts rr@zCLexer._handle_pppragmaKs}} IiiAg$s)u, 1HCAg$s)u, !8DIIx- KK3S 9aDII  s8}  XzBCAg$s)u, 1HCAg$s)u,Ag$s)t+ 1HCAg$s)t+ ; KK((U3O P 7tCyD( LLA L 1HC"D   r)r-ry)rrr__doc__rrrboolr%r+r#propertyr'rr rFrBrArYr>rr@rrrrrs" c3_d23 !T* !T*  #C5$;/   "#""d"#?!x'?!BKhv.KZ C  # & 3#3C3D3`&D*$v,*rr)-AUTOBREAKCASECHARCONSTCONTINUEDEFAULTDODOUBLEELSEENUMEXTERNFLOATFORGOTOIFINLINEINTLONGREGISTEROFFSETOFRESTRICTRETURNSHORTSIGNEDSIZEOFSTATICSTRUCTSWITCHTYPEDEFUNIONUNSIGNEDVOIDVOLATILEWHILE__INT128_BOOL_COMPLEX _NORETURN _THREAD_LOCAL_STATIC_ASSERT_ATOMIC_ALIGNOF_ALIGNAS_PRAGMA. _keywordsr\_r.z[a-zA-Z_$][0-9a-zA-Z_$]*z0[xX]z [0-9a-fA-F]+z0[bB]z[01]+zD(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?z(0z)|([1-9][0-9]*)z0[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]|'Lu8uUz{2,4}'z('z*\n)|('z*$)z[^' ]+')|('')|('z [^'\n]*')z ([^"\\\n]|rxz*"*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]?)ceZdZdZdZdZy)rVrr.rN)rrrrWrIrZrrrrVrV2s E B ErrV)frozenc<eZdZUeed<eed<eed<eeed<y) _RegexRulerU regex_patternra error_messageN)rrrrrrVrrrrrr8s M C= rrUNSUPPORTED_C_STYLE_COMMENTzKComments are not supported, see https://github.com/eliben/pycparser#3using.UNSUPPORTED_CXX_STYLE_COMMENTBAD_STRING_LITERALz#String contains invalid escape codeWSTRING_LITERALU8STRING_LITERALU16STRING_LITERALU32STRING_LITERALSTRING_LITERALHEX_FLOAT_CONST FLOAT_CONST INT_CONST_HEX INT_CONST_BIN BAD_CONST_OCTzInvalid octal constant INT_CONST_OCT INT_CONST_DECINT_CONST_CHAR CHAR_CONST WCHAR_CONST U8CHAR_CONST U16CHAR_CONST U32CHAR_CONSTUNMATCHED_QUOTEz Unmatched 'rHrI _regex_rulesrP_regex_pattern_partsz(?P<>rMc"eZdZUeed<eed<y) _FixedTokenrUrTN)rrrrrrrrrrs M LrrELLIPSISz... LSHIFTEQUALz<<= RSHIFTEQUALz>>=PLUSPLUSz++ MINUSMINUSz--ARROWz->LANDz&&LORz||LSHIFTz<<RSHIFTz>>LEz<=GEz>=EQz==NEz!= TIMESEQUALz*=DIVEQUALz/=MODEQUALz%= PLUSEQUALz+= MINUSEQUALz-=ANDEQUALz&=OREQUALz|=XOREQUALz^=EQUALS=PLUS+MINUS-TIMESDIVIDE/MOD%ORAND&NOT~XOR^LNOT!LT<GTCONDOP?LPARENRPARENLBRACKET[RBRACKET]rK{rL}COMMA,PERIOD.SEMI;COLON: _fixed_tokensrQc,t|jSr")r;rT)items rr&s#dll"3r)keyreversez([ \t]*line\W)|([ \t]*\d+)r<z[ \t]*pragma\Wr?)]r{ dataclassesrenumrtypingrrrrr r rrrrr\keywordrSr;isalphaupperlower _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_constantrVrrZrWrIrrPr_rulerarrUrrcompilejoinrMPatternrr#rQ_entry setdefaultrTvalues_bucketsortr<r?rrrr`s  !88 ^^H . 5c?.` " d38n!0G#3w>?(/ W]]_% 0*     L !114GG#M11k),?? k),?? # '!(BE$3 8 . 3&83>LtS$I  #33c9 L 3& [ {" {"{"-8,&3lBUJ 66DGWW !#CCcI  $t+(?*?*?*L(3.<|KdR*9        1 K+% 3e;kIKW        4  $!!!%$U  '&U  -   "2L4F4FM!#4l6H6H$O"$6 8J8JDQ"$6 8J8JDQ,2D2DdK "8,:L:LdS}0,2D2DdK |/A/A4H |/A/A4H  1C1CTJ 1<3E3EtL!9<;M;MtT|[,*<*,>E~}l.@.@$G 0B0BDI 0B0BDI "2L4F4F V,2D2DdKt[,//48Y-" d:-^ACS% hsm ;<<=B"$d3i$ PE&+llE4G4G%HN5>>"$u~~&6a8K8K7LA NOP",CHH5I,J!K rzz#K $ /$ E"/$ u%/$ u%/$ D! /$  d# /$  /$/$t/$$/$$/$d/$d/$d/$d/$ d#/$  D!!/$" D!#/$$ T"%/$& d#'/$( D!)/$* 4 +/$, D!-/$.#//$01/$23/$45/$6#7/$8s9/$:c;/$<s=/$>s?/$@sA/$BC/$DcE/$FcG/$H#I/$J#K/$L#M/$N C O/$P C Q/$R#S/$T#U/$VW/$X#Y/$Z[/$\]/$ tK /l8:S${"3349LF%%fnnQ&7<CCFKL%,,.CG LL3TLBC",,I!J rzz#J#-2::.?#@C@r