|iCbhUddlZddlmZddlmZddlmZmZmZm Z m Z edGddZ Gd d Z d Z e ed fed <iZeeefed<e D]ZedrfeedkrWedr=eeeddeddz<}eee<dZdZdZdZdZdZdezdzezdzZdezZeezezZeezezZ 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@jBdIeAdJe#e@jBdIeAdKe9e@jBdLeAdMe5e@jCdeAdNe6e@jCdeAdOe7e@jCdeAdPe8e@jCdeAdQe4e@jCdeAdRe?e@jCdeAdSeZHeHjIeHjJfeFeHjK<eGLdgeHjKdheHjMd?ejNd$OeGZPejQeedi<edEGdjdkZRgeRdldmeRdndoeRdpdqeRdrdseRdtdueRdvdweRdxdyeRdzd{eRd|d}eRd~deRddeRddeRddeRddeRddeRddeRddeRddeRddeRddeRddeRddeRddeRddeRddeRdd6eRddeRddeRdd$eRddeRddeRddeRddeRddeRddheRddeRddAeRddeRddeRddeRddeRddeRddeRddeRddeRdd¦ZSeeRed<iZTeeeeRfed<eSD]6ZUeTVeUjWdgLeU7eTXD]ZYeYZdńdƦejNdǦZ[ejQeed<ejNdɦZ\ejQeed<dS)N) dataclass)Enum)CallableDictListOptionalTupleT)slotsc8eZdZUeed<eed<eed<eed<dS)_TokentypevaluelinenocolumnN)__name__ __module__ __qualname__str__annotations__int?C:\PYTHON\_runtimes\venv\Lib\site-packages\pycparser/c_lexer.pyr r s4 III JJJ KKK KKKKKrr c ,eZdZdZdeeeegdfdegdfdegdfdeegefddf dZdd ed eddfd Z dd Z e defdZ de efdZde efdZdedededefdZdededdfdZddZdeefdZdS)CLexeraA 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_funcNon_lbrace_funcon_rbrace_functype_lookup_funcreturncf||_||_||_||_|dSN)rrrr _init_state)selfrrrrs r__init__zCLexer.__init__)s;%,, 0 rtextfilenamecJ|||_||_dS)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 rinputz CLexer.input6s(  !rcZd|_d|_d|_d|_d|_d|_dS)Nr&r)r*r+_pos _line_start _pending_tok_linenor$s rr#zCLexer._init_state@s2  .2 rc|jSr")r+r3s rr(zCLexer.filenameHs ~rc|j}t|}|j|j}d|_|S|j|kr||jxxdkrn xdkrnn|xjdz c_nOxdkr/|xjdz c_|xjdz c_|j|_ndkrt ||jdzr%|xjdz c_|t||jdzra|xjdz c_| }t|dkr |d|_t|dkr|dSC| dd|j}|xjdz c_|S | x}r|S|j|kdSdS)N  r. #rPPHASH) r*lenr1r/r2r0 _line_patternmatch_handle_ppline_pragma_pattern_handle_pppragma _make_token _match_token)r$r'ntoktokss rtokenz CLexer.tokenLs6} II   (#C $D Ji!mmty/SSSSS444444444IINIIITTTTLLA%LLIINII'+yD$$SS$**4Q??! Q ++--- &,,T49q=AA! Q #4466t99q==04QD-t99q==#'7N **8S$)DDCIINIIJ"//111s!"  9i!mmmmmmrc|j}|j}d}t||x}rF|j}|J||}t |}t|\}} ||||| f}t ||x} r_| D]\} | | j |r?t | j }| ||dkr|| j | j tjdf}n]|@dt||} || ||xjdz c_dS|\}}}}} |tjkrE|dkrd|} | J|| ||xjt%d|z c_dS|tjkr8t( |d}|dkr||rd}||||} |xj|z c_| jd kr|n| jd kr|| 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_tokens}}i##D#.. .1 :{H'''GGH%%EZZF(2KFCHeVS9D+//S :: :6   ??5=#66  //F|vQ'7'7"!N!M(.  E  <8tDI88C KKS ! ! ! IINII4/3,% \' ' '+++6u66??? KKS ! ! ! IIQ 'II4 \_ $ $#''t44H4D$9$9%$@$@#x44 V 8x      ! ! ! ! X ! !    ! ! ! rrUrr]cN||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_tokens0t''!+XudlF;; rrbcX||jz dz}|||j|dSNr.)r0rr2)r$rbr]rs rrYz CLexer._errors2t''!+ T\622222rcH j}t|}|dj dkr| |j  d t  d fd }| d r dz dt t d t t ddf fd }d t d tddf fd }| kr|dddS dkr|d dStj t d}|s|d dS| d} t|z | kr||ddS dkr|d dStj t d}|s|d dS| d dd} t| dz | krnXtj t d}|s|d dS t| dz i|||dS)Nr8rr c^kr!dvrdz krdvdSdSdSdS)N r.r)lineline_lenr]srskip_wsz&CLexer._handle_ppline..skip_wssP..T#Y%%7%7q..T#Y%%7%7%7%7....%7%7rrlpp_line pp_filenamec|djznt|_||_dz_j_dS)Nzline number missing in #liner.)rYr/rr2r+r0)rprqline_endrmr$s rsuccessz&CLexer._handle_ppline..successs\ :DI.fails9 KKTY/ 0 0 0 1 DI#yD   r"z$filename before line number in #linezinvalid #line directiveTr N)r*r;findr/rSrrrrer=_decimal_constantrO_string_literallstriprstrip) r$r'rCrnrtrwr_rprqrlrsrmr]s ` @@@@rr>zCLexer._handle_pplines<(} II99T49-- r>>HDI()t99          ??63 ' '  1HC )Xc] )# )4 ) ) ) ) ) ) ) ) )c )3 )4 ) ) ) ) ) ) )  (?? GD$    F 9   D7 = = = F H&STT 3 3  D*C 0 0 0 F''!** s7|| (?? GGT " " " F 9   D*C 0 0 0 F H_d344j 1 1  D*C 0 0 0 Fggajj'',,33C88  s1771:: # GIIIh*DJ77A .444 3qwwqzz?? "C # %%%%%rc|j}t|}|j}||kr||dvr|dz }||kr ||dv||kr ||_gS|d|s"|d||dz|_gS|}|tdz }|dd|g}||kr||dvr|dz }||kr ||dv|}||kr#||dkr|dz }||kr ||dk||kr2||d||||||kr(||dkr|xjdz c_|dz }||_||_|S)Nrkr.pragmazinvalid #pragma directivePPPRAGMAr8 PPPRAGMASTR) r*r;r/rSrYrAappendr2r0)r$r'rCr] pragma_posrEstarts rr@zCLexer._handle_pppragmaKs} IIiAgg$s)u,, 1HCAgg$s)u,, !88DIIx--  KK3S 9 9 9aDII  s8}}  XzBBCAgg$s)u,, 1HCAgg$s)u,,Agg$s)t++ 1HCAgg$s)t++ ;; KK((U3YOO P P P 77tCyD(( LLA LL 1HC"D   r)r&ry)rrr__doc__rrrboolr%r,r#propertyr(rr rFrBrArYr>rr@rrrrrs" c3_d23 !T* !T*  #C5$;/      ""#""d""""#X?!x'?!?!?!?!BKhv.KKKKZ C  # &    3#3C3D3333`&`&`&`&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]?)ceZdZdZdZdZdS)rVrr.rN)rrrrWrIrZrrrrVrV2s E B EEErrV)frozencDeZdZUeed<eed<eed<eeed<dS) _RegexRulerU regex_patternra error_messageN)rrrrrrVrrrrrr8sE MMM 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<dS) _FixedTokenrUrTN)rrrrrrrrrrs"MMM LLLLLrrELLIPSISz... 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#dl"3"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:  !!!!!!88888888888888 ^^^^^^^^H . 5c?...` " d38n!!!00G#033w<+>>??(/ W]]__%%*     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  $!!!!!!!!J%$U  J'&U  J-  J "2L4FMMJ!#4l6H$OOJ"$6 8JDQQJ"$6 8JDQQJ,2DdKKJ "8,:LdSSJ}0,2DdKKJ |/A4HHJ |/A4HHJ  J1CTJJJ 1<3EtLLJ!9<;MtTTJ|[,*EEJ~}l.@$GGJ 0BDIIJ 0BDIIJ "2L4F VVJ,2DdKKJt[,/488Y-" d:---^ACS% hsm ;<<=BBB"$d3i$$$ PPE&+lE4G%HN5>" Nu~ N N8K N N NOOOO ",CHH5I,J,J!K!K rz#KKK $ /$K E""/$K u%%/$K u%%/$K D!! /$ K d## /$ K /$K/$Kt/$K$/$K$/$Kd/$Kd/$Kd/$Kd/$K d##/$ K D!!!/$"K D!!#/$$K T""%/$&K d##'/$(K D!!)/$*K 4  +/$,K D!!-/$.K#//$0K1/$2K3/$4K5/$6K#7/$8Ks9/$:Kc;/$<Ks=/$>Ks?/$@KsA/$BKC/$DKcE/$FKcG/$HK#I/$JK#K/$LK#M/$NK C  O/$PK C  Q/$RK#S/$TK#U/$VKW/$XK#Y/$ZK[/$\K]/$ tK ///l8:S${"334999LLF%%fnQ&7<<CCFKKKK%,,..CCG LL33TLBBBB!+,I!J!J rz#JJJ#-2:.?#@#@C@@@@@r