K i&pddlmZddlmZddlmZddlmZmZm Z m Z ddl m Z m Z e GddeZy) )yacc)c_ast)CLexer) PLYParser ParseError parameterizedtemplate)fix_switch_casesfix_atomic_specifiersceZdZdedddddfdZddZdZd Zd Zd Z d Z d Z dZ dZ dZdZdZdZddZddZdZdZdZdZdZdZdZdZdZdZd Zd!Zd"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,d/Z-d0Z.d1Z/d2Z0d3Z1d4Z2d5Z3d6Z4d7Z5d8Z6d9Z7d:Z8d;Z9d<Z:d=Z;d>ZdAZ?dBZ@dCZAdDZBdEZCdFZDdGZEdHZFdIZGdJZHdKZIdLZJdMZKdNZLdOZMdPZNdQZOdRZPdSZQdTZRdUZSdVZTdWZUdXZVdYZWeXdZd[d\d]ZYeXdZd[d\d^ZZeXdZd[d\d_Z[eXdZd[d`Z\eXdZd[d\daZ]eXdZd[d\dbZ^eXdZd[d\dcZ_eXdZd[d\ddZ`deZadfZbdgZcdhZddiZedjZfdkZgdlZhdmZidnZjdoZkdpZldqZmdrZndsZodtZpduZqdvZrdwZsdxZtdyZudzZvd{Zwd|Zxd}Zyd~ZzdZ{dZ|dZ}dZ~dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZy)CParserTzpycparser.lextabzpycparser.yacctabFc||j|j|j|j|_|jj ||||jj |_gd}|D]} |j| tj|d|||||_ tg|_ d|_ y)a Create a new CParser. Some arguments for controlling the debug/optimization level of the parser are provided. The defaults are tuned for release/performance mode. The simple rules for using them are: *) When tweaking CParser/CLexer, set these to False *) When releasing a stable parser, set to True lex_optimize: Set to False when you're modifying the lexer. Otherwise, changes in the lexer won't be used, if some lextab.py file exists. When releasing with a stable lexer, set to True to save the re-generation of the lexer table on each run. lexer: Set this parameter to define the lexer to use if you're not using the default CLexer. lextab: Points to the lex table that's used for optimized mode. Only if you're modifying the lexer and want some tests to avoid re-generating the table, make this point to a local lex table file (that's been earlier generated with lex_optimize=True) yacc_optimize: Set to False when you're modifying the parser. Otherwise, changes in the parser won't be used, if some parsetab.py file exists. When releasing with a stable parser, set to True to save the re-generation of the parser table on each run. yacctab: Points to the yacc table that's used for optimized mode. Only if you're modifying the parser, make this point to a local yacc table file yacc_debug: Generate a parser.out file that explains how yacc built the parsing table from the grammar. taboutputdir: Set this parameter to control the location of generated lextab and yacctab files. ) error_funcon_lbrace_funcon_rbrace_functype_lookup_func)optimizelextab outputdir)abstract_declaratorassignment_expressiondeclaration_listdeclaration_specifiers_no_type designation expressionidentifier_listinit_declarator_listid_init_declarator_listinitializer_listparameter_type_listblock_item_listtype_qualifier_liststruct_declarator_listtranslation_unit_or_empty)modulestartdebugr tabmodulerN) _lex_error_func_lex_on_lbrace_func_lex_on_rbrace_func_lex_type_lookup_funcclexbuildtokens_create_opt_rulercparserdict _scope_stack_last_yielded_token) self lex_optimizelexerr yacc_optimizeyacctab yacc_debug taboutputdirrules_with_optrules X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pycparser/c_parser.py__init__zCParser.__init__st++3333!77 9 !"  $ii&&  "# (D  ! !$ ' (yy-"" $ "VH$( c||j_|jjtg|_d|_|j j||j|S)a  Parses C code and returns an AST. text: A string containing the C source code filename: Name of the file being parsed (for meaningful error messages) debug: Debug flag to YACC N)inputr8r()r.filename reset_linenor3r4r5r2parse)r6textrDr(s r?rFz CParser.parses]&   !VH#' ||!!ii" rAcJ|jjtyN)r4appendr3r6s r? _push_scopezCParser._push_scopes   (rAclt|jdkDsJ|jjy)Nr)lenr4poprKs r? _pop_scopezCParser._pop_scopes-4$$%))) rAc|jdj|ds|jd|z|d|jd|<y)zC Add a new typedef name (ie a TYPEID) to the current scope Tz;Typedef %r previously declared as non-typedef in this scopeNr4get _parse_errorr6namecoords r?_add_typedef_namezCParser._add_typedef_namesT  $((t4    "&'(- /'+"d#rAc|jdj|dr|jd|z|d|jd|<y)ze Add a new object, function, or enum member name (ie an ID) to the current scope rRFz;Non-typedef %r previously declared as typedef in this scopeNrSrVs r?_add_identifierzCParser._add_identifiersT   R $ $T5 1    "&'(- /',"d#rAcft|jD]}|j|}||cSy)z8 Is *name* a typedef-name in the current scope? F)reversedr4rT)r6rWscopein_scopes r?_is_type_in_scopezCParser._is_type_in_scopes<d//0 5EyyH#H_  5 rAcH|j||j||yrI)rU_coord)r6msglinecolumns r?r*zCParser._lex_error_funcs #t{{489rAc$|jyrI)rLrKs r?r+zCParser._lex_on_lbrace_funcs rAc$|jyrI)rPrKs r?r,zCParser._lex_on_rbrace_funcs  rAc(|j|}|S)z Looks up types that were previously defined with typedef. Passed to the lexer for recognizing identifiers that are types. )r`)r6rWis_types r?r-zCParser._lex_type_lookup_funcs ((.rAc.|jjS)z We need access to yacc's lookahead token in certain cases. This is the last token yacc requested from the lexer, so we ask the lexer. )r. last_tokenrKs r?_get_yacc_lookahead_tokenz!CParser._get_yacc_lookahead_tokens yy###rAc||}|}|jr|j}|jrt|tjr ||_|S|}t|jtjs1|j}t|jtjs1|j|_||_|S)z Tacks a type modifier on a declarator, and returns the modified declarator. Note: the declarator and modifier may be modified )type isinstancerTypeDecl)r6declmodifier modifier_head modifier_tail decl_tails r?_type_modify_declzCParser._type_modify_decls!    )..M   dENN +!%M O I @%NN !@"+M *INKrAc|}t|tjs'|j}t|tjs'|j|_|j dd|_|D]R}t|tjrt|dkDr|jd|jI||_|cS|sit|jtjs|jd|jtjdg|j|_|Stj|Dcgc]}|jD]}|c}}|dj|_|Scc}}w)z- Fixes a declaration. Modifies decl. Nrz Invalid multiple types specifiedzMissing type in declarationintrX) rorrprndeclnamerWqualsIdentifierTyperNrUrXFuncDeclnames)r6rqtypenamerntnidrWs r?_fix_decl_name_typezCParser._fix_decl_name_type+s@ T5>>299DT5>>2MM ZZ]  Bb%"6"67x=1$%%:BHHF!#DIK dii8!!5tzzC,,G**&DI ,, (>"RXX>T>>qk'')DI ?s?E7 c|xstggggg}|r||j||S||jd||S)a Declaration specifiers are represented by a dictionary with the entries: * qual: a list of type qualifiers * storage: a list of storage type qualifiers * type: a list of type specifiers * function: a list of function specifiers * alignment: a list of alignment specifiers This method is given a declaration specifier, and a new specifier of a given kind. If `append` is True, the new specifier is added to the end of the specifiers list, otherwise it's added at the beginning. Returns the declaration specifier, with the new specifier incorporated. )qualstoragernfunction alignmentrz)r3rJinsert)r6declspecnewspeckindrJspecs r?_add_declaration_specifierz"CParser._add_declaration_specifierWsS X4R"rUWX  J  g &  J  a ) rAc nd|dv}g}|djdn|ddt|ddksBt|dd jd k7s$|j|dd jds8d }|dD]}t |d s|j }n|j d |tj|dd jddd|d|dd j |dd<|dd =nt|ddtjtjtjtjfsu|dd}t|tjs'|j}t|tjs'|j |dd jd|_|dd =|D]l} | dJ|r1tj d|d|d| d| dj } nXtj"d|d|d|d|d| d| jd| jd| dj  } t| jtjtjtjtjfr| } n|j%| |d} |rO|r'|j'| j(| j n&|j+| j(| j t-| } |j/| o|S)z Builds a list of declarations all sharing the given specifiers. If typedef_namespace is true, each declared name is added to the "typedef namespace", which also includes objects, functions, and enum constants. typedefrrzbitsizeNrqrnrRr?rXzInvalid declarationrr{rnr|alignrXr)rWr|rrnrXrinit rWr|rrfuncspecrnrrrX)rTrNrr`hasattrrXrUrrproEnumStructUnionr}rnr{TypedefDeclrrYrWr[r rJ) r6rdeclstypedef_namespace is_typedef declarationsrXt decls_0_tailrq declaration fixed_decls r?_build_declarationszCParser._build_declarationsps/ $y/1   8<< " .  1Xf  %4< 1$DL,<,B,B(Cq(H..tF|B/?/E/Ea/HIfAq'* !!!"7? %~~fb)//2;'6l2&,,  .E!HV V R E!HV, ELL%++u7K7K/MN 8F+L u~~>+00 !u~~>$$,(,V R(8(>(>q(A %L$% ,D<+ ++#mmv, Ofv,,, . $jjv,{+ O!*-f&) HHY/v,,, . +**JJ ekk((-*+) !55k4<P !**:??JAaD Vq[<<!d&7&71&=>AaD<<D$5$5a$;->q!-DFG ..1!1 /!rAcP|d}|j||d|d|d|d<y)zl function_definition : declaration_specifiers id_declarator declaration_list_opt compound_statement rrrrrzN)rrs r?p_function_definition_2zCParser.p_function_definition_2is>t..1!1 /!rAc|d|d<y)a_ statement : labeled_statement | expression_statement | compound_statement | selection_statement | iteration_statement | jump_statement | pppragma_directive | static_assert rrzNrrs r? p_statementzCParser.p_statementxst!rAct|dk(r5tj|d|dgz|j|d|d<y|d|d<y)z} pragmacomp_or_statement : pppragma_directive_list statement | statement rrr block_itemsrXrzN)rNrCompoundrrs r?p_pragmacomp_or_statementz!CParser.p_pragmacomp_or_statementsQ q6Q;>>aD!A$K''1-/AaDQ4AaDrAc |d}|d|d}tjtjtjf}t |dk(rKt |d|rH2w!| 2a5( ;v,{+ O!*-A Q%++ ' ("00T56&*1, ,,d"&-(E !rAc|d|d<y)z& declaration : decl_body SEMI rrzNrrs r? p_declarationzCParser.p_declarationrrAcNt|dk(r |d|d<y|d|dz|d<y)zj declaration_list : declaration | declaration_list declaration rrrzNrrs r?p_declaration_listzCParser.p_declaration_list s/1v{qt!!qt !rAc<|j|d|dd|d<y)z] declaration_specifiers_no_type : type_qualifier declaration_specifiers_no_type_opt rrrrzNrrs r?"p_declaration_specifiers_no_type_1z*CParser.p_declaration_specifiers_no_type_1$..qtQqT6B!rAc<|j|d|dd|d<y)zf declaration_specifiers_no_type : storage_class_specifier declaration_specifiers_no_type_opt rrrrzNrrs r?"p_declaration_specifiers_no_type_2z*CParser.p_declaration_specifiers_no_type_2s$..qtQqT9E!rAc<|j|d|dd|d<y)za declaration_specifiers_no_type : function_specifier declaration_specifiers_no_type_opt rrrrzNrrs r?"p_declaration_specifiers_no_type_3z*CParser.p_declaration_specifiers_no_type_3s$..qtQqT:F!rAc<|j|d|dd|d<y)z_ declaration_specifiers_no_type : atomic_specifier declaration_specifiers_no_type_opt rrrnrzNrrs r?"p_declaration_specifiers_no_type_4z*CParser.p_declaration_specifiers_no_type_4%rrAc<|j|d|dd|d<y)zb declaration_specifiers_no_type : alignment_specifier declaration_specifiers_no_type_opt rrrrzNrrs r?"p_declaration_specifiers_no_type_5z*CParser.p_declaration_specifiers_no_type_5*$..qtQqT;G!rAc@|j|d|ddd|d<y)zI declaration_specifiers : declaration_specifiers type_qualifier rrrTrJrzNrrs r?p_declaration_specifiers_1z"CParser.p_declaration_specifiers_1/)..qtQqT6$.O!rAc@|j|d|ddd|d<y)zR declaration_specifiers : declaration_specifiers storage_class_specifier rrrTrrzNrrs r?p_declaration_specifiers_2z"CParser.p_declaration_specifiers_24s)..qtQqT9T.R!rAc@|j|d|ddd|d<y)zM declaration_specifiers : declaration_specifiers function_specifier rrrTrrzNrrs r?p_declaration_specifiers_3z"CParser.p_declaration_specifiers_39s)..qtQqT:d.S!rAc@|j|d|ddd|d<y)zS declaration_specifiers : declaration_specifiers type_specifier_no_typeid rrrnTrrzNrrs r?p_declaration_specifiers_4z"CParser.p_declaration_specifiers_4>rrAc6|jd|dd|d<y)z2 declaration_specifiers : type_specifier Nrrnrzrrs r?p_declaration_specifiers_5z"CParser.p_declaration_specifiers_5C ..tQqT6B!rAc@|j|d|ddd|d<y)zQ declaration_specifiers : declaration_specifiers_no_type type_specifier rrrnTrrzNrrs r?p_declaration_specifiers_6z"CParser.p_declaration_specifiers_6HrrAc@|j|d|ddd|d<y)zN declaration_specifiers : declaration_specifiers alignment_specifier rrrTrrzNrrs r?p_declaration_specifiers_7z"CParser.p_declaration_specifiers_7Ms)..qtQqT;t.T!rAc|d|d<y)a storage_class_specifier : AUTO | REGISTER | STATIC | EXTERN | TYPEDEF | _THREAD_LOCAL rrzNrrs r?p_storage_class_specifierz!CParser.p_storage_class_specifierRt!rAc|d|d<y)zR function_specifier : INLINE | _NORETURN rrzNrrs r?p_function_specifierzCParser.p_function_specifier\rrAc`tj|dg|j|d|d<y)a+ type_specifier_no_typeid : VOID | _BOOL | CHAR | SHORT | INT | LONG | FLOAT | DOUBLE | _COMPLEX | SIGNED | UNSIGNED | __INT128 rryrzNrr}rrs r?p_type_specifier_no_typeidz"CParser.p_type_specifier_no_typeidbs-##QqTF$2C2CAq2IJ!rAc|d|d<y)z type_specifier : typedef_name | enum_specifier | struct_or_union_specifier | type_specifier_no_typeid | atomic_specifier rrzNrrs r?p_type_specifierzCParser.p_type_specifierrst!rAcN|d}|jjd||d<y)z= atomic_specifier : _ATOMIC LPAREN type_name RPAREN r_AtomicrzN)r|rJ)r6rtyps r?p_atomic_specifierzCParser.p_atomic_specifier|s(d #!rAc|d|d<y)z type_qualifier : CONST | RESTRICT | VOLATILE | _ATOMIC rrzNrrs r?p_type_qualifierzCParser.p_type_qualifiers t!rAcRt|dk(r|d|dgz|d<y|dg|d<y)z init_declarator_list : init_declarator | init_declarator_list COMMA init_declarator rrrrzNrrs r?p_init_declarator_listzCParser.p_init_declarator_list3!$A! qtqtf}!!A$!rAcPt|dt|dkDr|dnd|d<y)zb init_declarator : declarator | declarator EQUALS initializer rrrNrrzr3rNrs r?p_init_declaratorzCParser.p_init_declarator(1SVaZQqTTC!rAcRt|dk(r|d|dgz|d<y|dg|d<y)z id_init_declarator_list : id_init_declarator | id_init_declarator_list COMMA init_declarator rrrrzNrrs r?p_id_init_declarator_listz!CParser.p_id_init_declarator_listr4rAcPt|dt|dkDr|dnd|d<y)zn id_init_declarator : id_declarator | id_declarator EQUALS initializer rrrNrrzr6rs r?p_id_init_declaratorzCParser.p_id_init_declaratorr8rAc@|j|d|ddd|d<y)zY specifier_qualifier_list : specifier_qualifier_list type_specifier_no_typeid rrrnTrrzNrrs r?p_specifier_qualifier_list_1z$CParser.p_specifier_qualifier_list_1rrAc@|j|d|ddd|d<y)zO specifier_qualifier_list : specifier_qualifier_list type_qualifier rrrTrrzNrrs r?p_specifier_qualifier_list_2z$CParser.p_specifier_qualifier_list_2rrAc6|jd|dd|d<y)z4 specifier_qualifier_list : type_specifier Nrrnrzrrs r?p_specifier_qualifier_list_3z$CParser.p_specifier_qualifier_list_3rrAc8t|dgg|dgg|d<y)zH specifier_qualifier_list : type_qualifier_list type_specifier rrrrzNr3rs r?p_specifier_qualifier_list_4z$CParser.p_specifier_qualifier_list_4s$1RqtfrR!rAc2tg|dgggg|d<y)z9 specifier_qualifier_list : alignment_specifier rrrzNrDrs r?p_specifier_qualifier_list_5z$CParser.p_specifier_qualifier_list_5s !vrRP!rAc<|j|d|dd|d<y)zR specifier_qualifier_list : specifier_qualifier_list alignment_specifier rrrrzNrrs r?p_specifier_qualifier_list_6z$CParser.p_specifier_qualifier_list_6rrAcn|j|d}||dd|j|d|d<y)z{ struct_or_union_specifier : struct_or_union ID | struct_or_union TYPEID rrNrWrrXrz)rrr6rklasss r?p_struct_or_union_specifier_1z%CParser.p_struct_or_union_specifier_1s@//!51##Aq)+!rAc|j|d}t|dk(r|dg|j|d|d<y|d|d|j|d|d<y)z struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close | struct_or_union brace_open brace_close rrNrrKrzrrrNrrLs r?p_struct_or_union_specifier_2z%CParser.p_struct_or_union_specifier_2sq//!5 q6Q;''1-/AaD d''1-/AaDrAc|j|d}t|dk(r"||dg|j|d|d<y||d|d|j|d|d<y)a struct_or_union_specifier : struct_or_union ID brace_open struct_declaration_list brace_close | struct_or_union ID brace_open brace_close | struct_or_union TYPEID brace_open struct_declaration_list brace_close | struct_or_union TYPEID brace_open brace_close rrrrKrzrNrPrLs r?p_struct_or_union_specifier_3z%CParser.p_struct_or_union_specifier_3sy //!5 q6Q;qT''1-/AaD qTd''1-/AaDrAc|d|d<y)zF struct_or_union : STRUCT | UNION rrzNrrs r?p_struct_or_unionzCParser.p_struct_or_unionrrAc^t|dk(r |dxsg|d<y|d|dxsgz|d<y)z struct_declaration_list : struct_declaration | struct_declaration_list struct_declaration rrrzNrrs r?p_struct_declaration_listz!CParser.p_struct_declaration_lists: q6Q;Q4:2AaDQ41Q4:2&AaDrAct|d}d|dvsJ|d|j||d}nt|ddk(rY|dd}t|tjr|}ntj |}|j|t | g}n|j|t dd g}||d<y) zW struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI rrrrNrrrnrzrqr)rrNrorNoder}r3)r6rrrnode decl_types r?p_struct_declaration_1zCParser.p_struct_declaration_1 stY/// Q4 ,,d-Ef ! # <?D$ + !006 ,,+,-.E,,D12-4E!rAcd|d<y)z# struct_declaration : SEMI Nrzrrs r?p_struct_declaration_2zCParser.p_struct_declaration_20s !rAc|dg|d<y)z1 struct_declaration : pppragma_directive rrzNrrs r?p_struct_declaration_3zCParser.p_struct_declaration_35rrAcRt|dk(r|d|dgz|d<y|dg|d<y)z struct_declarator_list : struct_declarator | struct_declarator_list COMMA struct_declarator rrrrzNrrs r?p_struct_declarator_listz CParser.p_struct_declarator_list:r4rAc|ddd|d<y)z( struct_declarator : declarator rNrqrrzrrs r?p_struct_declarator_1zCParser.p_struct_declarator_1Cs!.!rAct|dkDr|d|dd|d<ytjdddd|dd|d<y)z struct_declarator : declarator COLON constant_expression | COLON constant_expression rrrfrzNr)rNrrprs r?p_struct_declarator_2zCParser.p_struct_declarator_2HsG q6A:aDQqT2AaD!NN4tTBqQRtTAaDrAc^tj|dd|j|d|d<y)zM enum_specifier : ENUM ID | ENUM TYPEID rNrrzrrrrs r?p_enum_specifier_1zCParser.p_enum_specifier_1Qs+zz!A$d&7&71&=>!rAc^tjd|d|j|d|d<y)zG enum_specifier : ENUM brace_open enumerator_list brace_close Nrrrzrkrs r?p_enum_specifier_2zCParser.p_enum_specifier_2Ws+zz$!d&7&71&=>!rAcdtj|d|d|j|d|d<y)z enum_specifier : ENUM ID brace_open enumerator_list brace_close | ENUM TYPEID brace_open enumerator_list brace_close rrrrzNrkrs r?p_enum_specifier_3zCParser.p_enum_specifier_3\s/zz!A$!d&7&71&=>!rAct|dk(r+tj|dg|dj|d<yt|dk(r |d|d<y|djj |d|d|d<y)z enumerator_list : enumerator | enumerator_list COMMA | enumerator_list COMMA enumerator rrrzrN)rNrEnumeratorListrX enumeratorsrJrs r?p_enumerator_listzCParser.p_enumerator_listbst q6Q;''1! ;AaD Vq[Q4AaD aD   # #AaD )Q4AaDrAc\tj|d|j|d|d<y)z alignment_specifier : _ALIGNAS LPAREN type_name RPAREN | _ALIGNAS LPAREN constant_expression RPAREN rrrzN)rAlignasrrs r?p_alignment_specifierzCParser.p_alignment_specifieros)}}QqT4#4#4Q#:;!rAc&t|dk(r+tj|dd|j|d}n-tj|d|d|j|d}|j |j |j ||d<y)zR enumerator : ID | ID EQUALS constant_expression rrNrrz)rNr Enumeratorrr[rWrX)r6r enumerators r? p_enumeratorzCParser.p_enumeratorus q6Q;))!d))!Q/1J))!ad))!Q/1J Z__j.>.>?!rAc|d|d<y)zQ declarator : id_declarator | typeid_declarator rrzNrrs r? p_declaratorzCParser.p_declaratorrrA)rID)typeidTYPEID)typeid_noparenrc|d|d<y)z1 xxx_declarator : direct_xxx_declarator rrzNrrs r?p_xxx_declarator_1zCParser.p_xxx_declarator_1rrAc:|j|d|d|d<y)z9 xxx_declarator : pointer direct_xxx_declarator rrrzNrvrs r?p_xxx_declarator_2zCParser.p_xxx_declarator_2s"%%adAaD1!rAc dtj|dddd|j|d|d<y)z' direct_xxx_declarator : yyy rNrrz)rrprrs r?p_direct_xxx_declarator_1z!CParser.p_direct_xxx_declarator_1s6~~qT##Aq) +!rAc|d|d<y)z@ direct_xxx_declarator : LPAREN xxx_declarator RPAREN rrzNrrs r?p_direct_xxx_declarator_2z!CParser.p_direct_xxx_declarator_2rrAct|dkDr|dngxsg}tjdt|dkDr|dn|d||dj}|j |d||d<y) z} direct_xxx_declarator : direct_xxx_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET rrNrrrndim dim_qualsrXrqrrrz)rNr ArrayDeclrXrv)r6rr|arrs r?p_direct_xxx_declarator_3z!CParser.p_direct_xxx_declarator_3suQ!12ooA !!A$**  %%1Q4#%>!rAc&|d|dfDcgc]}t|tr|n|g}}|Dcgc] }|D]}||}}}tjd|d||dj}|j |d||d<ycc}wcc}}w) z direct_xxx_declarator : direct_xxx_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET | direct_xxx_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET rrNrrrrrz)rolistrrrXrv)r6ritem listed_qualssublistrrrs r?p_direct_xxx_declarator_4z!CParser.p_direct_xxx_declarator_4s1ad %!+4 6TFB% %)5!g'!$!T! !oo!A$**  %%1Q4#%>!%!s BB c tjdtj|d|j|d|d|dng|dj}|j |d||d<y)zi direct_xxx_declarator : direct_xxx_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET Nrrrrrrzrrr~rrXrvr6rrs r?p_direct_xxx_declarator_5z!CParser.p_direct_xxx_declarator_5spoo1t00A67d.adBA$**  %%1Q4#%>!rActj|dd|dj}|jjdk(ri|j ]|j j D]D}t|tjrn(|j|j|jF|j|d||d<y)z direct_xxx_declarator : direct_xxx_declarator LPAREN parameter_type_list RPAREN | direct_xxx_declarator LPAREN identifier_list_opt RPAREN rNrargsrnrXLBRACErrz) rr~rXrlrnrparamsro EllipsisParamr[rWrv)r6rfuncparams r?p_direct_xxx_declarator_6z!CParser.p_direct_xxx_declarator_6s ~~1A$**  ) ) + 0 0H <yy$!YY--BE!%)<)<=u((U[[AB%%1Q4$%?!rAc|j|d}tj|dxsgd|}t|dkDr:|d}|j|j}|j||_|d|d<y||d<y)zm pointer : TIMES type_qualifier_list_opt | TIMES type_qualifier_list_opt pointer rrN)r|rnrXrrz)rrPtrDeclrNrn)r6rrX nested_type tail_types r? p_pointerzCParser.p_pointers!!!Q' mm!A$*"4uM q6A:!I..,%NN ..,(INQ4AaDAaDrAcRt|dk(r |dg|d<y|d|dgz|d<y)zs type_qualifier_list : type_qualifier | type_qualifier_list type_qualifier rrrzNrrs r?p_type_qualifier_listzCParser.p_type_qualifier_listrrAct|dkDrA|djjtj|j |d|d|d<y)zn parameter_type_list : parameter_list | parameter_list COMMA ELLIPSIS rrrrzN)rNrrJrrrrs r?p_parameter_type_listzCParser.p_parameter_type_listsJ q6A: aDKK  u2243D3DQ3JK Lt!rAct|dk(r+tj|dg|dj|d<y|djj |d|d|d<y)zz parameter_list : parameter_declaration | parameter_list COMMA parameter_declaration rrrzrNrNr ParamListrXrrJrs r?p_parameter_listzCParser.p_parameter_list#X q6Q;??AaD61Q4::6AaD aDKK  qt $Q4AaDrAc|d}|ds,tjdg|j|dg|d<|j|t |dgd|d<y ) z parameter_declaration : declaration_specifiers id_declarator | declaration_specifiers typeid_noparen_declarator rrnrxryrrZrYrzN)rr}rrr3rs r?p_parameter_declaration_1z!CParser.p_parameter_declaration_17sstF|!00%''1-/0DL''QqT?#(%%&(!rAc .|d}|ds,tjdg|j|dg|d<t|ddkDrht|ddjdk(rJ|j |ddjdr&|j |t|dd g d}natjd |d d|dxstjdddd|j|d }|d}|j||}||d<y)zR parameter_declaration : declaration_specifiers abstract_declarator_opt rrnrxryrRrzrNrrYrrrWr|rrnrX) rr}rrNrr`rr3Typenamerpr)r6rrrqrs r?p_parameter_declaration_2z!CParser.p_parameter_declaration_2Cs0tF|!00%''1-/0DL tF| q Sfb)9)?)?%@A%E&&tF|B'7'='=a'@A++QqT56,889;D>>6lqTCU^^D$dC''1- /D F|H++D(;D!rAct|dk(r+tj|dg|dj|d<y|djj |d|d|d<y)ze identifier_list : identifier | identifier_list COMMA identifier rrrzrNrrs r?p_identifier_listzCParser.p_identifier_listcrrAc|d|d<y)z- initializer : assignment_expression rrzNrrs r?p_initializer_1zCParser.p_initializer_1mrrAcr|d*tjg|j|d|d<y|d|d<y)z initializer : brace_open initializer_list_opt brace_close | brace_open initializer_list COMMA brace_close rNrrz)rInitListrrs r?p_initializer_2zCParser.p_initializer_2rs; Q4<>>"d&7&71&=>AaDQ4AaDrAcTt|dk(rN|d|dntj|d|d}tj|g|dj|d<y|d|dntj|d|d}|dj j ||d|d<y)z initializer_list : designation_opt initializer | initializer_list COMMA designation_opt initializer rrNrrzr)rNrNamedInitializerrrXexprsrJ)r6rrs r?p_initializer_listzCParser.p_initializer_list{s q6Q;Q4<1Q4U-C-CAaD!A$-OD>>4&!A$**5AaDQ4<1Q4U-C-CAaD!A$-OD aDJJ  d #Q4AaDrAc|d|d<y)z. designation : designator_list EQUALS rrzNrrs r? p_designationzCParser.p_designationrrAcRt|dk(r |dg|d<y|d|dgz|d<y)z_ designator_list : designator | designator_list designator rrrzNrrs r?p_designator_listzCParser.p_designator_listrrAc|d|d<y)zi designator : LBRACKET constant_expression RBRACKET | PERIOD identifier rrzNrrs r? p_designatorzCParser.p_designatorrrAc tjd|ddddd|dxstjdddd|j|d}|j ||dd|d<y) zH type_name : specifier_qualifier_list abstract_declarator_opt rrrNrrrnrz)rrrprr)r6rrs r? p_type_namezCParser.p_type_namesr>>A$v,q/1?dD$?##Aq) +''!A$v,?!rAcftjdddd}|j||d|d<y)z+ abstract_declarator : pointer Nrrrz)rrprv)r6r dummytypes r?p_abstract_declarator_1zCParser.p_abstract_declarator_1s;NN4tT: %%qT&!rAc:|j|d|d|d<y)zF abstract_declarator : pointer direct_abstract_declarator rrrzNrrs r?p_abstract_declarator_2zCParser.p_abstract_declarator_2s"%%adAaD1!rAc|d|d<y)z> abstract_declarator : direct_abstract_declarator rrzNrrs r?p_abstract_declarator_3zCParser.p_abstract_declarator_3rrAc|d|d<y)zA direct_abstract_declarator : LPAREN abstract_declarator RPAREN rrzNrrs r?p_direct_abstract_declarator_1z&CParser.p_direct_abstract_declarator_1t!rActjd|dg|dj}|j|d||d<y)zn direct_abstract_declarator : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET Nrrrrrz)rrrXrvrs r?p_direct_abstract_declarator_2z&CParser.p_direct_abstract_declarator_2sIoo!A$**  %%1Q4#%>!rAc t|dkDr|dngxsg}tjtjddddt|dkDr|dn|d||j |d|d<y)zk direct_abstract_declarator : LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET rrNrrrrz)rNrrrpr)r6rr|s r?p_direct_abstract_declarator_3z&CParser.p_direct_abstract_declarator_3slQ!12dD$7A !!##Aq) +!rAc tjdtj|d|j|dg|dj}|j |d||d<y)zZ direct_abstract_declarator : direct_abstract_declarator LBRACKET TIMES RBRACKET Nrrrrrzrrs r?p_direct_abstract_declarator_4z&CParser.p_direct_abstract_declarator_4saoo1t00A67A$**  %%1Q4#%>!rAc tjtjddddtj|d|j |dg|j |d|d<y)z? direct_abstract_declarator : LBRACKET TIMES RBRACKET Nrrrrz)rrrpr~rrs r?p_direct_abstract_declarator_5z&CParser.p_direct_abstract_declarator_5sZdD$71t00A67##Aq) +!rActj|dd|dj}|j|d||d<y)zh direct_abstract_declarator : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN rNrrrrz)rr~rXrv)r6rrs r?p_direct_abstract_declarator_6z&CParser.p_direct_abstract_declarator_6sF~~1A$** %%1Q4$%?!rAc tj|dtjdddd|j|d|d<y)zM direct_abstract_declarator : LPAREN parameter_type_list_opt RPAREN rNrrrz)rr~rprrs r?p_direct_abstract_declarator_7z&CParser.p_direct_abstract_declarator_7s?~~1dD$7##Aq)+!rAc ,|d|dfDcgc]}t|tr|n|g}}|Dcgc] }|D]}||}}}tjtjdddd|d||j |d|d<ycc}wcc}}w)z direct_abstract_declarator : LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET | LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET rrNrrrrz)rorrrrpr)r6rrrrrr|s r?p_direct_abstract_declarator_8z&CParser.p_direct_abstract_declarator_8s 1ad %!+4 6TFB% %%1!'g!d!!!dD$7!##Aq) +! %!s B BcNt|dtr |d|d<y|dg|d<y)zG block_item : declaration | statement rrzN)rorrs r? p_block_itemzCParser.p_block_items,"!A$-qt!AaD6!rAc`t|dk(s |ddgk(r |d|d<y|d|dz|d<y)z_ block_item_list : block_item | block_item_list block_item rNrrzrrs r?p_block_item_listzCParser.p_block_item_lists; A! qtv~qt!AaD1Q4K!rAc^tj|d|j|d|d<y)zA compound_statement : brace_open block_item_list_opt brace_close rrrrzN)rrrrs r?p_compound_statement_1zCParser.p_compound_statement_1s+~~!##Aq)+!rAcdtj|d|d|j|d|d<y)z6 labeled_statement : ID COLON pragmacomp_or_statement rrrzN)rLabelrrs r?p_labeled_statement_1zCParser.p_labeled_statement_1#-{{1Q41t'8'8A'>?!rAcftj|d|dg|j|d|d<y)zL labeled_statement : CASE constant_expression COLON pragmacomp_or_statement rrrrzN)rCaserrs r?p_labeled_statement_2zCParser.p_labeled_statement_2's/zz!A$1(9(9!Q(?@!rAc^tj|dg|j|d|d<y)z; labeled_statement : DEFAULT COLON pragmacomp_or_statement rrrzN)rDefaultrrs r?p_labeled_statement_3zCParser.p_labeled_statement_3+s)}}adVT%6%6q!%<=!rAc tj|dtj|j|d|j|d|d<y)z labeled_statement : ID COLON rrzN)rrEmptyStatementrrs r?p_labeled_statement_4zCParser.p_labeled_statement_4/sD{{1Q4!5!5d6G6G16M!NPTPaPabcefPgh!rAc tj|dtj|j|dg|j|d|d<y)z4 labeled_statement : CASE constant_expression COLON rrrzN)rrrrrs r?p_labeled_statement_5zCParser.p_labeled_statement_53sGzz!A$!5!5d6G6G16M!N OQUQbQbcdfgQhi!rActjtj|j|dg|j|d|d<y)z# labeled_statement : DEFAULT COLON rrzN)rrrrrs r?p_labeled_statement_6zCParser.p_labeled_statement_67s@}}e2243D3DQ3JKLdN_N_`acdNef!rAc ftj|d|dd|j|d|d<y)zK selection_statement : IF LPAREN expression RPAREN pragmacomp_or_statement rrNrrzrIfrrs r?p_selection_statement_1zCParser.p_selection_statement_1;s/xx!adD$*;*;Aq*AB!rAc ltj|d|d|d|j|d|d<y)zZ selection_statement : IF LPAREN expression RPAREN statement ELSE pragmacomp_or_statement rrrrzNrrs r?p_selection_statement_2zCParser.p_selection_statement_2?s3xx!adAaD$*;*;Aq*AB!rAc vttj|d|d|j|d|d<y)zO selection_statement : SWITCH LPAREN expression RPAREN pragmacomp_or_statement rrrrzN)r rSwitchrrs r?p_selection_statement_3zCParser.p_selection_statement_3Cs6 QqT1Q4):):1a)@AC!rAcdtj|d|d|j|d|d<y)zN iteration_statement : WHILE LPAREN expression RPAREN pragmacomp_or_statement rrrrzN)rWhilerrs r?p_iteration_statement_1zCParser.p_iteration_statement_1HrrAcdtj|d|d|j|d|d<y)zV iteration_statement : DO pragmacomp_or_statement WHILE LPAREN expression RPAREN SEMI rrrrzN)rDoWhilerrs r?p_iteration_statement_2zCParser.p_iteration_statement_2Ls-}}QqT1Q4):):1a)@A!rAc ttj|d|d|d|d|j|d|d<y)zx iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement rrr rrzN)rForrrs r?p_iteration_statement_3zCParser.p_iteration_statement_3Ps9yy1qtQqT1Q41B1B1a1HI!rAc tjtj|d|j|d|d|d|d|j|d|d<y)zp iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement rrrrzN)rrDeclListrrs r?p_iteration_statement_4zCParser.p_iteration_statement_4TsUyy!d.?.?1.EF1qtQqT4+<+>!A$!adAaDJJ?AaDrAc|d|d<y)z$ cast_expression : unary_expression rrzNrrs r?p_cast_expression_1zCParser.p_cast_expression_1rrAcdtj|d|d|j|d|d<y)z; cast_expression : LPAREN type_name RPAREN cast_expression rrrrzN)rCastrrs r?p_cast_expression_2zCParser.p_cast_expression_2s-zz!A$!d&7&71&=>!rAc|d|d<y)z* unary_expression : postfix_expression rrzNrrs r?p_unary_expression_1zCParser.p_unary_expression_1rrAc^tj|d|d|dj|d<y)z unary_expression : PLUSPLUS unary_expression | MINUSMINUS unary_expression | unary_operator cast_expression rrrzNrUnaryOprXrs r?p_unary_expression_2zCParser.p_unary_expression_2s* }}QqT1Q414!rActj|dt|dk(r|dn|d|j|d|d<y)z unary_expression : SIZEOF unary_expression | SIZEOF LPAREN type_name RPAREN | _ALIGNOF LPAREN type_name RPAREN rrrrzN)rr@rNrrs r?p_unary_expression_3zCParser.p_unary_expression_3sD }} aDFaKAaDQqT   a #%!rAc|d|d<y)z unary_operator : AND | TIMES | PLUS | MINUS | NOT | LNOT rrzNrrs r?p_unary_operatorzCParser.p_unary_operatorr$rAc|d|d<y)z* postfix_expression : primary_expression rrzNrrs r?p_postfix_expression_1zCParser.p_postfix_expression_1rrAc^tj|d|d|dj|d<y)zG postfix_expression : postfix_expression LBRACKET expression RBRACKET rrrzN)rArrayRefrXrs r?p_postfix_expression_2zCParser.p_postfix_expression_2s(~~adAaD!A$**5!rAc~tj|dt|dk(r|dnd|dj|d<y)z postfix_expression : postfix_expression LPAREN argument_expression_list RPAREN | postfix_expression LPAREN RPAREN rrrNrz)rFuncCallrNrXrs r?p_postfix_expression_3zCParser.p_postfix_expression_3s6~~adCFaKAaDT1Q4::N!rActj|d|j|d}tj|d|d||dj|d<y)z postfix_expression : postfix_expression PERIOD ID | postfix_expression PERIOD TYPEID | postfix_expression ARROW ID | postfix_expression ARROW TYPEID rrrrzN)rr~r StructRefrX)r6rfields r?p_postfix_expression_4zCParser.p_postfix_expression_4sM 1t00A67qtQqT5!A$**=!rAcdtjd|dz|d|dj|d<y)z{ postfix_expression : postfix_expression PLUSPLUS | postfix_expression MINUSMINUS rrrrzNr?rs r?p_postfix_expression_5zCParser.p_postfix_expression_5 s.}}S1Q4Z1qtzz:!rAcBtj|d|d|d<y)z postfix_expression : LPAREN type_name RPAREN brace_open initializer_list brace_close | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close rrrzN)rCompoundLiteralrs r?p_postfix_expression_6zCParser.p_postfix_expression_6s"$$QqT1Q40!rAc|d|d<y)z" primary_expression : identifier rrzNrrs r?p_primary_expression_1zCParser.p_primary_expression_1rrAc|d|d<y)z primary_expression : constant rrzNrrs r?p_primary_expression_2zCParser.p_primary_expression_2rrAc|d|d<y)zp primary_expression : unified_string_literal | unified_wstring_literal rrzNrrs r?p_primary_expression_3zCParser.p_primary_expression_3rrAc|d|d<y)z0 primary_expression : LPAREN expression RPAREN rrzNrrs r?p_primary_expression_4zCParser.p_primary_expression_4#rrAc|j|d}tjtj|d|tj|d|dg|||d<y)za primary_expression : OFFSETOF LPAREN type_name COMMA offsetof_member_designator RPAREN rrrrzN)rrrLr~r$)r6rrXs r?p_primary_expression_5zCParser.p_primary_expression_5'sV!!!Q'~~ehhqtU3#nnadAaD\5A#%!rAcVt|dk(r |d|d<yt|dk(r2tj|d|d|d|dj|d<yt|dk(r.tj|d|d|dj|d<yt dt|z) z offsetof_member_designator : identifier | offsetof_member_designator PERIOD identifier | offsetof_member_designator LBRACKET expression RBRACKET rrrzrrrz$Unexpected parsing state. len(p): %uN)rNrrOrXrINotImplementedErrorrs r?p_offsetof_member_designatorz$CParser.p_offsetof_member_designator/s q6Q;Q4AaD Vq[??1Q41qtQqTZZ@AaD Vq[>>!A$!adjj9AaD%&LsSTv&UV VrAct|dk(r+tj|dg|dj|d<y|djj |d|d|d<y)z argument_expression_list : assignment_expression | argument_expression_list COMMA assignment_expression rrrzrN)rNrr$rXrrJrs r?p_argument_expression_listz"CParser.p_argument_expression_list=sX q6Q;>>1Q4&!A$**5AaD aDJJ  ad #Q4AaDrAc\tj|d|j|d|d<y)z identifier : ID rrzN)rr~rrs r? p_identifierzCParser.p_identifierGs'xx!d//156!rAcd}d}|dddD]}|dvr|dz } |dvs|dz }d}|dkDr td|d kDr td d |zd |zz}tj|d z|d|j|d|d<y)z constant : INT_CONST_DEC | INT_CONST_OCT | INT_CONST_HEX | INT_CONST_BIN | INT_CONST_CHAR rzrNlL)uUrz.Constant cannot have more than one u/U suffix.rz.Constant cannot have more than two l/L suffix.z unsigned zlong rx) ValueErrorrConstantr)r6ruCountlCountxrprefixs r? p_constant_1zCParser.p_constant_1Ks1bc AJ! j!     A:NO O aZNO Ov%&(88~~ UNAaD$"3"3Aq"9;!rAc|dddvrd}n|dddvrd}nd}tj||d|j|d|d<y ) zM constant : FLOAT_CONST | HEX_FLOAT_CONST rrR)fFfloatrjz long doubledoublerzNrrpr)r6rrs r? p_constant_2zCParser.p_constant_2bs] Q48z !A qT"X #AA~~ qtT&&q!,.!rAc^tjd|d|j|d|d<y)z constant : CHAR_CONST | WCHAR_CONST | U8CHAR_CONST | U16CHAR_CONST | U32CHAR_CONST charrrzNr{rs r? p_constant_3zCParser.p_constant_3ps.~~ AaD$++Aq13!rAct|dk(r.tjd|d|j|d|d<y|djdd|dddz|d_|d|d<y)z~ unified_string_literal : STRING_LITERAL | unified_string_literal STRING_LITERAL rstringrrzNrR)rNrrprvaluers r?p_unified_string_literalz CParser.p_unified_string_literalsp q6Q;>>!A$ 1 1!Q 79AaD1CR1Q483AaDJQ4AaDrAct|dk(r.tjd|d|j|d|d<y|djj dd|dddz|d_|d|d<y)a unified_wstring_literal : WSTRING_LITERAL | U8STRING_LITERAL | U16STRING_LITERAL | U32STRING_LITERAL | unified_wstring_literal WSTRING_LITERAL | unified_wstring_literal U8STRING_LITERAL | unified_wstring_literal U16STRING_LITERAL | unified_wstring_literal U32STRING_LITERAL rrrrzNrR)rNrrprrrstriprs r?p_unified_wstring_literalz!CParser.p_unified_wstring_literalsz q6Q;>>!A$ 1 1!Q 79AaD1**,Sb1AaDHr@rBrErGrIrNrQrSrUrWr^r`rbrdrgrirlrnrprtrwr{r}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrr r"r%r'r)r,r.r0r3r6r8r;r=rArCrErGrJrMrQrSrVrXrZr\r^r`rcrergrur|rrrrrrrrrAr?r r s%'m(^0) +,:$R!d*X2Wr" J('      M3 =8$  n (,z4C F GC H P S T P C P U  K 8D 8 DP P C S Q H +/$/&'$L  8/ U? ? ? <   ijgCCC @BJD 947T  KB A@4?5%6O >; 1  % W7;. .3 "% %  ErAr N)plyrrrc_lexerr plyparserrrrr ast_transformsr r r rrAr?rs:EEC cEicE cErA