
    #	h*"                    p    S SK Jr  S SKJr  S SKJr  S SKJrJrJ	r	J
r
  S SKJrJr  \
 " S S\5      5       rg)	   )yacc)c_ast)CLexer)	PLYParser
ParseErrorparameterizedtemplate)fix_switch_casesfix_atomic_specifiersc                       \ rS rSrS\SSSSS4S jrSS jrS	 rS
 rS r	S r
S rS rS rS rS rS rS rS rSS jrSS jrS rS rSrS rS rS rS rS rS rS  rS! rS" r S# r!S$ r"S% r#S& r$S' r%S( r&S) r'S* r(S+ r)S, r*S- r+S. r,S/ r-S0 r.S1 r/S2 r0S3 r1S4 r2S5 r3S6 r4S7 r5S8 r6S9 r7S: r8S; r9S< r:S= r;S> r<S? r=S@ r>SA r?SB r@SC rASD rBSE rCSF rDSG rESH rFSI rGSJ rHSK rISL rJSM rKSN rLSO rMSP rNSQ rOSR rPSS rQST rRSU rSSV rTSW rUSX rVSY rWSZ rX\Y" S[S\S]5      S^ 5       rZ\Y" S[S\S]5      S_ 5       r[\Y" S[S\S]5      S` 5       r\\Y" S[S\5      Sa 5       r]\Y" S[S\S]5      Sb 5       r^\Y" S[S\S]5      Sc 5       r_\Y" S[S\S]5      Sd 5       r`\Y" S[S\S]5      Se 5       raSf rbSg rcSh rdSi reSj rfSk rgSl rhSm riSn rjSo rkSp rlSq rmSr rnSs roSt rpSu rqSv rrSw rsSx rtSy ruSz rvS{ rwS| rxS} ryS~ rzS r{S r|S r}S r~S rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)CParser   Tzpycparser.lextabzpycparser.yacctabF c           	         U" U R                   U R                  U R                  U R                  S9U l        U R                  R                  UUUS9  U R                  R                  U l        / SQnU H  n	U R                  U	5        M     [        R                  " U SUUUUS9U l	        [        5       /U l        SU l        g)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_funcon_lbrace_funcon_rbrace_functype_lookup_func)optimizelextab	outputdir)abstract_declaratorassignment_expressiondeclaration_listdeclaration_specifiers_no_typedesignation
expressionidentifier_listinit_declarator_listid_init_declarator_listinitializer_listparameter_type_listblock_item_listtype_qualifier_liststruct_declarator_listtranslation_unit_or_empty)modulestartdebugr   	tabmoduler   N)_lex_error_func_lex_on_lbrace_func_lex_on_rbrace_func_lex_type_lookup_funcclexbuildtokens_create_opt_ruler   cparserdict_scope_stack_last_yielded_token)
selflex_optimizelexerr   yacc_optimizeyacctab
yacc_debugtaboutputdirrules_with_optrules
             D/var/www/html/env/lib/python3.13/site-packages/pycparser/c_parser.py__init__CParser.__init__   s    t ++3333!77	9	 			!" 	 	$ ii&&
" #D!!$' # yy-""$  "VH $(     c                     X R                   l        U R                   R                  5         [        5       /U l        SU l        U R                  R                  UU R                   US9$ )zParses 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)inputr9   r)   )r/   filenamereset_linenor4   r5   r6   r3   parse)r7   textrF   r)   s       r@   rH   CParser.parse   s[     &				 !VH#' ||!!ii "  	rC   c                 J    U R                   R                  [        5       5        g N)r5   appendr4   r7   s    r@   _push_scopeCParser._push_scope   s      (rC   c                 n    [        U R                  5      S:  d   eU R                  R                  5         g )Nr   )lenr5   poprN   s    r@   
_pop_scopeCParser._pop_scope   s-    4$$%)))rC   c                     U R                   S   R                  US5      (       d  U R                  SU-  U5        SU R                   S   U'   g)zBAdd a new typedef name (ie a TYPEID) to the current scope
        Tz;Typedef %r previously declared as non-typedef in this scopeNr5   get_parse_errorr7   namecoords      r@   _add_typedef_nameCParser._add_typedef_name   sW       $((t44 "&'(-/ '+"d#rC   c                     U R                   S   R                  US5      (       a  U R                  SU-  U5        SU R                   S   U'   g)zPAdd a new object, function, or enum member name (ie an ID) to the
current scope
rW   Fz;Non-typedef %r previously declared as typedef in this scopeNrX   r[   s      r@   _add_identifierCParser._add_identifier   sW     R $$T511 "&'(-/ ',"d#rC   c                 l    [        U R                  5       H  nUR                  U5      nUc  M  Us  $    g)z7Is *name* a typedef-name in the current scope?
        F)reversedr5   rY   )r7   r\   scopein_scopes       r@   _is_type_in_scopeCParser._is_type_in_scope   s7     d//0E yyH#H_	 1
 rC   c                 D    U R                  XR                  X#5      5        g rL   )rZ   _coord)r7   msglinecolumns       r@   r+   CParser._lex_error_func   s    #{{489rC   c                 $    U R                  5         g rL   )rO   rN   s    r@   r,   CParser._lex_on_lbrace_func   s    rC   c                 $    U R                  5         g rL   )rT   rN   s    r@   r-   CParser._lex_on_rbrace_func   s    rC   c                 (    U R                  U5      nU$ )zzLooks up types that were previously defined with
typedef.
Passed to the lexer for recognizing identifiers that
are types.
)rg   )r7   r\   is_types      r@   r.   CParser._lex_type_lookup_func   s     ((.rC   c                 .    U R                   R                  $ )zWe 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_tokenrN   s    r@   _get_yacc_lookahead_token!CParser._get_yacc_lookahead_token   s    
 yy###rC   c                    UnUnUR                   (       a  UR                   nUR                   (       a  M  [        U[        R                  5      (       a  Xl         U$ Un[        UR                   [        R                  5      (       d7  UR                   n[        UR                   [        R                  5      (       d  M7  UR                   Ul         X5l         U$ )zTacks a type modifier on a declarator, and returns
the modified declarator.

Note: the declarator and modifier may be modified
)type
isinstancer   TypeDecl)r7   declmodifiermodifier_headmodifier_tail	decl_tails         r@   _type_modify_declCParser._type_modify_decl   s     !    )..M     dENN++!%O
 I @@%NN	 !@@ "+M*NKrC   c                 4   Un[        U[        R                  5      (       d-  UR                  n[        U[        R                  5      (       d  M-  UR                  Ul        UR                  SS Ul        U HY  n[        U[        R                  5      (       a  M$  [        U5      S:  a  U R                  SUR                  5        MQ  XCl        Us  $    U(       dl  [        UR                  [        R                  5      (       d  U R                  SUR                  5        [        R                  " S/UR                  S9Ul        U$ [        R                  " U VVs/ s H  oUR                    H  ofPM     M     snnUS   R                  S9Ul        U$ s  snnf )z,Fixes a declaration. Modifies decl.
        Nr   z Invalid multiple types specifiedzMissing type in declarationintr]       )r|   r   r}   r{   declnamer\   qualsIdentifierTyperR   rZ   r]   FuncDeclnames)r7   r~   typenamer{   tnidr\   s          r@   _fix_decl_name_typeCParser._fix_decl_name_type+  sC   
 T5>>2299D T5>>22 MM	ZZ]
 Bb%"6"677x=1$%%:BHHF !#IK   dii88!!5tzzC,,G**&DI  ,, (>"XXTX>qk'')DI  ?s   F
c                     U=(       d    [        / / / / / S9nU(       a  XS   R                  U5        U$ XS   R                  SU5        U$ )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.
)qualstorager{   function	alignmentr   )r4   rM   insert)r7   declspecnewspeckindrM   specs         r@   _add_declaration_specifier"CParser._add_declaration_specifierW  sO      X4R"rUWXJg&  Ja)rC   c                    SUS   ;   n/ nUS   R                  S5      b  GOUS   S   c  [        US   5      S:  dH  [        US   S	   R                  5      S
:w  d)  U R                  US   S	   R                  S   5      (       d?  SnUS    H"  n[	        US5      (       d  M  UR
                  n  O   U R                  SU5        [        R                  " US   S	   R                  S   SSUS   US   S	   R
                  S9US   S'   US   S		 O[        US   S   [        R                  [        R                  [        R                  [        R                  45      (       d  US   S   n[        U[        R                  5      (       d-  UR                  n[        U[        R                  5      (       d  M-  UR                  c   US   S	   R                  S   Ul        US   S		 U GH}  n	U	S   c   eU(       a/  [        R                   " SUS   US   U	S   U	S   R
                  S9n
OV[        R"                  " SUS   US   US   US   U	S   U	R                  S5      U	R                  S5      U	S   R
                  S9	n
[        U
R                  [        R                  [        R                  [        R                  [        R                  45      (       a  U
nOU R%                  XS   5      nU(       aT  U(       a'  U R'                  UR(                  UR
                  5        O&U R+                  UR(                  UR
                  5        [-        U5      nUR/                  U5        GM     U$ )zBuilds 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.
typedefr   r   bitsizeNr~   r{      rW   r   ?r]   zInvalid declarationr   r   r{   r   alignr]   r   )r\   r   r   r{   r]   r   init	r\   r   r   r   funcspecr{   r   r   r]   )rY   rR   r   rg   hasattrr]   rZ   r   r}   r|   EnumStructUnionr   r{   r   TypedefDeclr   r^   r\   ra   r   rM   )r7   r   declstypedef_namespace
is_typedefdeclarationsr]   tdecls_0_tailr~   declaration
fixed_decls               r@   _build_declarationsCParser._build_declarationsp  s:    $y/1
 8<<	". 1Xf%4< 1$DL,<,B,B(Cq(H..tF|B/?/E/Ea/HIIfAq'** ! & !!"7?  %~~fb)//2;'6l2&,, .E!HV VR  E!HV,

ELL%++u7K7K/M N N 8F+L u~~>>+00 !u~~>>$$,(,VR(8(>(>q(A%L$D<+++#mmv, Ofv,,,. $jjv,{+ O!*-f&) HHY/v,,,	. +**JJekk((-* + + )
!55k<P
 !**:??J<L<LM((*:J:JK.z:J
+K N rC   c                     SUS   ;   a  U R                  SUR                  5        U R                  U[        USS9/SS9S   n[        R
                  " UUUUR                  S	9$ )
z&Builds a function definition.
        r   r   zInvalid typedefNr~   r   Tr   r   r   r   )r~   param_declsbodyr]   )rZ   r]   r   r4   r   FuncDef)r7   r   r~   r   r   r   s         r@   _build_function_definition"CParser._build_function_definition  sz     Y'/<..T-." / $ %&'
 }}#**	 	rC   c                 N    US:X  a  [         R                  $ [         R                  $ )zKGiven a token (either STRUCT or UNION), selects the
appropriate AST class.
struct)r   r   r   )r7   tokens     r@   _select_struct_union_class"CParser._select_struct_union_class  s      H<<;;rC   )
)leftLOR)r   LAND)r   OR)r   XOR)r   AND)r   EQNE)r   GTGELTLE)r   RSHIFTLSHIFT)r   PLUSMINUS)r   TIMESDIVIDEMODc                 |    US   c  [         R                  " / 5      US'   g[         R                  " US   5      US'   g)z7translation_unit_or_empty   : translation_unit
| empty
r   Nr   )r   FileASTr7   ps     r@   p_translation_unit_or_empty#CParser.p_translation_unit_or_empty  s5     Q4<==$AaD==1&AaDrC   c                     US   US'   g)z3translation_unit    : external_declaration
        r   r   N r   s     r@   p_translation_unit_1CParser.p_translation_unit_1       t!rC   c                 B    US   R                  US   5        US   US'   g)zDtranslation_unit    : translation_unit external_declaration
        r   r   r   N)extendr   s     r@   p_translation_unit_2CParser.p_translation_unit_2  s%     	
!AaDt!rC   c                     US   /US'   g)z6external_declaration    : function_definition
        r   r   Nr   r   s     r@   p_external_declaration_1 CParser.p_external_declaration_1       !v!rC   c                     US   US'   g)z.external_declaration    : declaration
        r   r   Nr   r   s     r@   p_external_declaration_2 CParser.p_external_declaration_2       t!rC   c                     US   /US'   g)z<external_declaration    : pp_directive
| pppragma_directive
r   r   Nr   r   s     r@   p_external_declaration_3 CParser.p_external_declaration_3  s     !v!rC   c                     / US'   g)z'external_declaration    : SEMI
        r   Nr   r   s     r@   p_external_declaration_4 CParser.p_external_declaration_4%  s     !rC   c                     US   US'   g)z0external_declaration    : static_assert
        r   r   Nr   r   s     r@   p_external_declaration_5 CParser.p_external_declaration_5*  r   rC   c                     [        U5      S:X  a0  [        R                  " US   SU R                  US5      5      /US'   g[        R                  " US   US   U R                  US5      5      /US'   g)zstatic_assert           : _STATIC_ASSERT LPAREN constant_expression COMMA unified_string_literal RPAREN
| _STATIC_ASSERT LPAREN constant_expression RPAREN
      Nr   r   )rR   r   StaticAssert_token_coordr   s     r@   p_static_assert_declaration#CParser.p_static_assert_declaration/  sk     q6Q;&&qtT43D3DQ3JKLAaD&&qtQqT43D3DQ3JKLAaDrC   c                 H    U R                  SU R                  US5      5        g)zpp_directive  : PPHASH
        zDirectives not supported yetr   N)rZ   r   r   s     r@   p_pp_directiveCParser.p_pp_directive8  s%     	8++Aq1	3rC   c                 L   [        U5      S:X  a.  [        R                  " US   U R                  US5      5      US'   g[        U5      S:X  a.  [        R                  " US   U R                  US5      5      US'   g[        R                  " SU R                  US5      5      US'   g)zipppragma_directive      : PPPRAGMA
| PPPRAGMA PPPRAGMASTR
| _PRAGMA LPAREN unified_string_literal RPAREN
r   r   r   r   r   r   N)rR   r   Pragmar   r   s     r@   p_pppragma_directiveCParser.p_pppragma_directiveC  s    
 q6Q;<<!d&7&71&=>AaDVq[<<!d&7&71&=>AaD<<D$5$5a$;<AaDrC   c                 L    [        U5      S:X  a  US   /OUS   US   /-   US'   g)zZpppragma_directive_list : pppragma_directive
| pppragma_directive_list pppragma_directive
r   r   r   NrR   r   s     r@   p_pppragma_directive_list!CParser.p_pppragma_directive_listO  -     Q1!v!A$!A$-!rC   c                     [        / / / [        R                  " S/U R                  US5      S9// S9nU R	                  UUS   US   US   S9US'   g	)
zTfunction_definition : id_declarator declaration_list_opt compound_statement
        r   r   r   r   r   r   r{   r   r   r   r   r~   r   r   r   N)r4   r   r   r   r   r7   r   r   s      r@   p_function_definition_1CParser.p_function_definition_1W  sv     &&w-1->->q!-DF G ..1!1	 / !rC   c                 J    US   nU R                  UUS   US   US   S9US'   g)zkfunction_definition : declaration_specifiers id_declarator declaration_list_opt compound_statement
        r   r   r      r  r   N)r   r  s      r@   p_function_definition_2CParser.p_function_definition_2i  s>     t..1!1	 / !rC   c                     US   US'   g)zstatement   : labeled_statement
| expression_statement
| compound_statement
| selection_statement
| iteration_statement
| jump_statement
| pppragma_directive
| static_assert
r   r   Nr   r   s     r@   p_statementCParser.p_statementx  s     t!rC   c                     [        U5      S:X  a3  [        R                  " US   US   /-   U R                  US5      S9US'   gUS   US'   g)zLpragmacomp_or_statement     : pppragma_directive_list statement
| statement
r   r   r   block_itemsr]   r   N)rR   r   Compoundr   r   s     r@   p_pragmacomp_or_statement!CParser.p_pragmacomp_or_statement  sQ     q6Q;>>aD!A$K''1-/AaD Q4AaDrC   c                    US   nUS   c  US   n[         R                  [         R                  [         R                  4n[	        U5      S:X  aN  [        US   U5      (       a:  [         R                  " SUS   US   US   US	   US   SSUS   R                  S
9	/nO/U R                  U[        SSS9/SS9nOU R                  UUS   SS9nXQS'   g)zydecl_body : declaration_specifiers init_declarator_list_opt
| declaration_specifiers_no_type id_init_declarator_list_opt
r   r   Nr{   r   r   r   r   r   r   r   Tr   )
r   r   r   r   rR   r|   r   r]   r   r4   )r7   r   r   tys_u_or_er   s         r@   p_decl_bodyCParser.p_decl_body  s     t Q4<
 fBekk5::>H2w!|
2a5( ; ;v,{+ O!*-A Q%++	' 	(" 00T56&* 1 , ,,d"& - (E
 !rC   c                     US   US'   g)z%declaration : decl_body SEMI
        r   r   Nr   r   s     r@   p_declarationCParser.p_declaration   r   rC   c                 H    [        U5      S:X  a  US   O
US   US   -   US'   g)zAdeclaration_list    : declaration
| declaration_list declaration
r   r   r   Nr  r   s     r@   p_declaration_listCParser.p_declaration_list	  s)     1v{qt!qt!rC   c                 <    U R                  US   US   S5      US'   g)z\declaration_specifiers_no_type  : type_qualifier declaration_specifiers_no_type_opt
        r   r   r   r   Nr   r   s     r@   "p_declaration_specifiers_no_type_1*CParser.p_declaration_specifiers_no_type_1  $     ..qtQqT6B!rC   c                 <    U R                  US   US   S5      US'   g)zedeclaration_specifiers_no_type  : storage_class_specifier declaration_specifiers_no_type_opt
        r   r   r   r   Nr+  r   s     r@   "p_declaration_specifiers_no_type_2*CParser.p_declaration_specifiers_no_type_2  s$     ..qtQqT9E!rC   c                 <    U R                  US   US   S5      US'   g)z`declaration_specifiers_no_type  : function_specifier declaration_specifiers_no_type_opt
        r   r   r   r   Nr+  r   s     r@   "p_declaration_specifiers_no_type_3*CParser.p_declaration_specifiers_no_type_3  s$     ..qtQqT:F!rC   c                 <    U R                  US   US   S5      US'   g)z^declaration_specifiers_no_type  : atomic_specifier declaration_specifiers_no_type_opt
        r   r   r{   r   Nr+  r   s     r@   "p_declaration_specifiers_no_type_4*CParser.p_declaration_specifiers_no_type_4%  r.  rC   c                 <    U R                  US   US   S5      US'   g)zadeclaration_specifiers_no_type  : alignment_specifier declaration_specifiers_no_type_opt
        r   r   r   r   Nr+  r   s     r@   "p_declaration_specifiers_no_type_5*CParser.p_declaration_specifiers_no_type_5*  $     ..qtQqT;G!rC   c                 :    U R                  US   US   SSS9US'   g)zHdeclaration_specifiers  : declaration_specifiers type_qualifier
        r   r   r   TrM   r   Nr+  r   s     r@   p_declaration_specifiers_1"CParser.p_declaration_specifiers_1/  )     ..qtQqT6$.O!rC   c                 :    U R                  US   US   SSS9US'   g)zQdeclaration_specifiers  : declaration_specifiers storage_class_specifier
        r   r   r   Tr=  r   Nr+  r   s     r@   p_declaration_specifiers_2"CParser.p_declaration_specifiers_24  s)     ..qtQqT9T.R!rC   c                 :    U R                  US   US   SSS9US'   g)zLdeclaration_specifiers  : declaration_specifiers function_specifier
        r   r   r   Tr=  r   Nr+  r   s     r@   p_declaration_specifiers_3"CParser.p_declaration_specifiers_39  s)     ..qtQqT:d.S!rC   c                 :    U R                  US   US   SSS9US'   g)zRdeclaration_specifiers  : declaration_specifiers type_specifier_no_typeid
        r   r   r{   Tr=  r   Nr+  r   s     r@   p_declaration_specifiers_4"CParser.p_declaration_specifiers_4>  r@  rC   c                 6    U R                  SUS   S5      US'   g)z1declaration_specifiers  : type_specifier
        Nr   r{   r   r+  r   s     r@   p_declaration_specifiers_5"CParser.p_declaration_specifiers_5C        ..tQqT6B!rC   c                 :    U R                  US   US   SSS9US'   g)zPdeclaration_specifiers  : declaration_specifiers_no_type type_specifier
        r   r   r{   Tr=  r   Nr+  r   s     r@   p_declaration_specifiers_6"CParser.p_declaration_specifiers_6H  r@  rC   c                 :    U R                  US   US   SSS9US'   g)zMdeclaration_specifiers  : declaration_specifiers alignment_specifier
        r   r   r   Tr=  r   Nr+  r   s     r@   p_declaration_specifiers_7"CParser.p_declaration_specifiers_7M  s)     ..qtQqT;t.T!rC   c                     US   US'   g)zVstorage_class_specifier : AUTO
| REGISTER
| STATIC
| EXTERN
| TYPEDEF
| _THREAD_LOCAL
r   r   Nr   r   s     r@   p_storage_class_specifier!CParser.p_storage_class_specifierR       t!rC   c                     US   US'   g)z)function_specifier  : INLINE
| _NORETURN
r   r   Nr   r   s     r@   p_function_specifierCParser.p_function_specifier\  r   rC   c                 \    [         R                  " US   /U R                  US5      S9US'   g)ztype_specifier_no_typeid  : VOID
| _BOOL
| CHAR
| SHORT
| INT
| LONG
| FLOAT
| DOUBLE
| _COMPLEX
| SIGNED
| UNSIGNED
| __INT128
r   r   r   Nr   r   r   r   s     r@   p_type_specifier_no_typeid"CParser.p_type_specifier_no_typeidb  s-     ##QqTF$2C2CAq2IJ!rC   c                     US   US'   g)zztype_specifier  : typedef_name
| enum_specifier
| struct_or_union_specifier
| type_specifier_no_typeid
| atomic_specifier
r   r   Nr   r   s     r@   p_type_specifierCParser.p_type_specifierr  s     t!rC   c                 L    US   nUR                   R                  S5        X!S'   g)z<atomic_specifier  : _ATOMIC LPAREN type_name RPAREN
        r   _Atomicr   N)r   rM   )r7   r   typs      r@   p_atomic_specifierCParser.p_atomic_specifier|  s&     d		#!rC   c                     US   US'   g)z8type_qualifier  : CONST
| RESTRICT
| VOLATILE
| _ATOMIC
r   r   Nr   r   s     r@   p_type_qualifierCParser.p_type_qualifier  s     t!rC   c                 L    [        U5      S:X  a  US   US   /-   OUS   /US'   g)zWinit_declarator_list    : init_declarator
| init_declarator_list COMMA init_declarator
r  r   r   r   Nr  r   s     r@   p_init_declarator_listCParser.p_init_declarator_list  -     !$A!qtqtf}!A$!rC   c                 L    [        US   [        U5      S:  a  US   OSS9US'   g)z=init_declarator : declarator
| declarator EQUALS initializer
r   r   r   Nr   r   r4   rR   r   s     r@   p_init_declaratorCParser.p_init_declarator  (     1SVaZQqTTC!rC   c                 L    [        U5      S:X  a  US   US   /-   OUS   /US'   g)z`id_init_declarator_list    : id_init_declarator
| id_init_declarator_list COMMA init_declarator
r  r   r   r   Nr  r   s     r@   p_id_init_declarator_list!CParser.p_id_init_declarator_list  rm  rC   c                 L    [        US   [        U5      S:  a  US   OSS9US'   g)zFid_init_declarator : id_declarator
| id_declarator EQUALS initializer
r   r   r   Nr   r   ro  r   s     r@   p_id_init_declaratorCParser.p_id_init_declarator  rr  rC   c                 :    U R                  US   US   SSS9US'   g)zXspecifier_qualifier_list    : specifier_qualifier_list type_specifier_no_typeid
        r   r   r{   Tr=  r   Nr+  r   s     r@   p_specifier_qualifier_list_1$CParser.p_specifier_qualifier_list_1  r@  rC   c                 :    U R                  US   US   SSS9US'   g)zNspecifier_qualifier_list    : specifier_qualifier_list type_qualifier
        r   r   r   Tr=  r   Nr+  r   s     r@   p_specifier_qualifier_list_2$CParser.p_specifier_qualifier_list_2  r@  rC   c                 6    U R                  SUS   S5      US'   g)z3specifier_qualifier_list  : type_specifier
        Nr   r{   r   r+  r   s     r@   p_specifier_qualifier_list_3$CParser.p_specifier_qualifier_list_3  rM  rC   c                 2    [        US   / / US   // S9US'   g)zGspecifier_qualifier_list  : type_qualifier_list type_specifier
        r   r   r  r   Nr4   r   s     r@   p_specifier_qualifier_list_4$CParser.p_specifier_qualifier_list_4  s$     1RqtfrR!rC   c                 ,    [        / US   // / / S9US'   g)z8specifier_qualifier_list  : alignment_specifier
        r   r  r   Nr  r   s     r@   p_specifier_qualifier_list_5$CParser.p_specifier_qualifier_list_5  s      !vrRP!rC   c                 <    U R                  US   US   S5      US'   g)zQspecifier_qualifier_list  : specifier_qualifier_list alignment_specifier
        r   r   r   r   Nr+  r   s     r@   p_specifier_qualifier_list_6$CParser.p_specifier_qualifier_list_6  r;  rC   c                 h    U R                  US   5      nU" US   SU R                  US5      S9US'   g)zJstruct_or_union_specifier   : struct_or_union ID
| struct_or_union TYPEID
r   r   Nr\   r   r]   r   )r   r   r7   r   klasss      r@   p_struct_or_union_specifier_1%CParser.p_struct_or_union_specifier_1  s@     //!51##Aq)+!rC   c                     U R                  US   5      n[        U5      S:X  a  U" S/ U R                  US5      S9US'   gU" SUS   U R                  US5      S9US'   g)zstruct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
| struct_or_union brace_open brace_close
r   r  Nr   r  r   r   r   rR   r   r  s      r@   p_struct_or_union_specifier_2%CParser.p_struct_or_union_specifier_2  sq     //!5q6Q;''1-/AaD
 d''1-/AaDrC   c                     U R                  US   5      n[        U5      S:X  a  U" US   / U R                  US5      S9US'   gU" US   US   U R                  US5      S9US'   g)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
r   r   r   r  r   r  Nr  r  s      r@   p_struct_or_union_specifier_3%CParser.p_struct_or_union_specifier_3  sy     //!5q6Q;qT''1-/AaD
 qTd''1-/AaDrC   c                     US   US'   g)z!struct_or_union : STRUCT
| UNION
r   r   Nr   r   s     r@   p_struct_or_unionCParser.p_struct_or_union  r   rC   c                 t    [        U5      S:X  a  US   =(       d    / US'   gUS   US   =(       d    / -   US'   g)z^struct_declaration_list     : struct_declaration
| struct_declaration_list struct_declaration
r   r   r   Nr  r   s     r@   p_struct_declaration_list!CParser.p_struct_declaration_list  s:     q6Q;Q4:2AaDQ41Q4:2&AaDrC   c                 h   US   nSUS   ;  d   eUS   b  U R                  UUS   S9nO[        US   5      S:X  aY  US   S   n[        U[        R                  5      (       a  UnO[        R
                  " U5      nU R                  U[        US	9/S9nOU R                  U[        SSS
9/S9nX1S'   g)zVstruct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        r   r   r   r   Nr   r   r{   r   r~   r   )r   rR   r|   r   Noder   r4   )r7   r   r   r   node	decl_types         r@   p_struct_declaration_1CParser.p_struct_declaration_1
  s     tY///Q4,,d - E f!# <?D$

++ 	!006	,,+, - .E ,,D12 - 4E !rC   c                     SUS'   g)z"struct_declaration : SEMI
        Nr   r   r   s     r@   p_struct_declaration_2CParser.p_struct_declaration_20  s     !rC   c                     US   /US'   g)z0struct_declaration : pppragma_directive
        r   r   Nr   r   s     r@   p_struct_declaration_3CParser.p_struct_declaration_35  r   rC   c                 L    [        U5      S:X  a  US   US   /-   OUS   /US'   g)z]struct_declarator_list  : struct_declarator
| struct_declarator_list COMMA struct_declarator
r  r   r   r   Nr  r   s     r@   p_struct_declarator_list CParser.p_struct_declarator_list:  rm  rC   c                     US   SS.US'   g)z'struct_declarator : declarator
        r   Nr~   r   r   r   r   s     r@   p_struct_declarator_1CParser.p_struct_declarator_1C  s     !.!rC   c                     [        U5      S:  a  US   US   S.US'   g[        R                  " SSSS5      US   S.US'   g)zWstruct_declarator   : declarator COLON constant_expression
| COLON constant_expression
r   r   r  r   Nr   )rR   r   r}   r   s     r@   p_struct_declarator_2CParser.p_struct_declarator_2H  sG     q6A:aDQqT2AaD!NN4tTBqQRtTAaDrC   c                 `    [         R                  " US   SU R                  US5      5      US'   g)z(enum_specifier  : ENUM ID
| ENUM TYPEID
r   Nr   r   r   r   r   r   s     r@   p_enum_specifier_1CParser.p_enum_specifier_1Q  s+     zz!A$d&7&71&=>!rC   c                 `    [         R                  " SUS   U R                  US5      5      US'   g)zFenum_specifier  : ENUM brace_open enumerator_list brace_close
        Nr   r   r   r  r   s     r@   p_enum_specifier_2CParser.p_enum_specifier_2W  s+     zz$!d&7&71&=>!rC   c                 f    [         R                  " US   US   U R                  US5      5      US'   g)zvenum_specifier  : ENUM ID brace_open enumerator_list brace_close
| ENUM TYPEID brace_open enumerator_list brace_close
r   r  r   r   Nr  r   s     r@   p_enum_specifier_3CParser.p_enum_specifier_3\  s/     zz!A$!d&7&71&=>!rC   c                     [        U5      S:X  a,  [        R                  " US   /US   R                  5      US'   g[        U5      S:X  a	  US   US'   gUS   R                  R                  US   5        US   US'   g)zXenumerator_list : enumerator
| enumerator_list COMMA
| enumerator_list COMMA enumerator
r   r   r   r   N)rR   r   EnumeratorListr]   enumeratorsrM   r   s     r@   p_enumerator_listCParser.p_enumerator_listb  st    
 q6Q;''1!

;AaDVq[Q4AaDaD##AaD)Q4AaDrC   c                 ^    [         R                  " US   U R                  US5      5      US'   g)zealignment_specifier  : _ALIGNAS LPAREN type_name RPAREN
| _ALIGNAS LPAREN constant_expression RPAREN
r   r   r   N)r   Alignasr   r   s     r@   p_alignment_specifierCParser.p_alignment_specifiero  s)     }}QqT4#4#4Q#:;!rC   c                 *   [        U5      S:X  a,  [        R                  " US   SU R                  US5      5      nO.[        R                  " US   US   U R                  US5      5      nU R	                  UR
                  UR                  5        X!S'   g)z1enumerator  : ID
| ID EQUALS constant_expression
r   r   Nr   r   )rR   r   
Enumeratorr   ra   r\   r]   )r7   r   
enumerators      r@   p_enumeratorCParser.p_enumeratoru  s     q6Q;))!d))!Q/1J ))!ad))!Q/1J 	Z__j.>.>?!rC   c                     US   US'   g)z0declarator  : id_declarator
| typeid_declarator
r   r   Nr   r   s     r@   p_declaratorCParser.p_declarator  r   rC   )r   ID)typeidTYPEID)typeid_noparenr  c                     US   US'   g)z0xxx_declarator  : direct_xxx_declarator
        r   r   Nr   r   s     r@   p_xxx_declarator_1CParser.p_xxx_declarator_1  r   rC   c                 :    U R                  US   US   5      US'   g)z8xxx_declarator  : pointer direct_xxx_declarator
        r   r   r   Nr   r   s     r@   p_xxx_declarator_2CParser.p_xxx_declarator_2  s"     %%adAaD1!rC   c           
      `    [         R                  " US   SSSU R                  US5      S9US'   g)z&direct_xxx_declarator   : yyy
        r   Nr   r   )r   r}   r   r   s     r@   p_direct_xxx_declarator_1!CParser.p_direct_xxx_declarator_1  s6     ~~qT##Aq)+!rC   c                     US   US'   g)z?direct_xxx_declarator   : LPAREN xxx_declarator RPAREN
        r   r   Nr   r   s     r@   p_direct_xxx_declarator_2!CParser.p_direct_xxx_declarator_2  r   rC   c                     [        U5      S:  a  US   O/ =(       d    / n[        R                  " S[        U5      S:  a  US   OUS   UUS   R                  S9nU R	                  US   US9US'   g)	z|direct_xxx_declarator   : direct_xxx_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        r   r   Nr  r   r{   dim	dim_qualsr]   r~   r   r   )rR   r   	ArrayDeclr]   r   )r7   r   r   arrs       r@   p_direct_xxx_declarator_3!CParser.p_direct_xxx_declarator_3  su     Q!12 ooA
!!A$**	 %%1Q4#%>!rC   c                 <   US   US   4 Vs/ s H  n[        U[        5      (       a  UOU/PM     nnU VVs/ s H  oD  H
  nUc  M  UPM     M     nnn[        R                  " SUS   UUS   R                  S9nU R                  US   US9US'   gs  snf s  snnf )	zdirect_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
r   r  Nr   r   r  r  r   )r|   listr   r  r]   r   )r7   r   itemlisted_qualssublistr   r  r  s           r@   p_direct_xxx_declarator_4!CParser.p_direct_xxx_declarator_4  s     1ad%# !+4 6 6TFB# 	 %)5 !g'$ 'T	 !oo!A$**	 %%1Q4#%>!%!s   $BB
Bc           
          [         R                  " S[         R                  " US   U R                  US5      5      US   b  US   O/ US   R                  S9nU R                  US   US9US'   g)zhdirect_xxx_declarator   : direct_xxx_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        Nr  r   r   r  r  r   r   r  r  r   r]   r   r7   r   r  s      r@   p_direct_xxx_declarator_5!CParser.p_direct_xxx_declarator_5  sp     oo1t00A67d.adBA$**	 %%1Q4#%>!rC   c                    [         R                  " US   SUS   R                  S9nU R                  5       R                  S:X  aq  UR
                  bd  UR
                  R                   HJ  n[        U[         R                  5      (       a    O*U R                  UR                  UR                  5        ML     U R                  US   US9US'   g)zdirect_xxx_declarator   : direct_xxx_declarator LPAREN parameter_type_list RPAREN
| direct_xxx_declarator LPAREN identifier_list_opt RPAREN
r   Nr   argsr{   r]   LBRACEr  r   )r   r   r]   rx   r{   r  paramsr|   EllipsisParamra   r\   r   )r7   r   funcparams       r@   p_direct_xxx_declarator_6!CParser.p_direct_xxx_declarator_6  s    
 ~~1A$**  ))+00H<yy$!YY--E!%)<)<==u((U[[A . %%1Q4$%?!rC   c                 
   U R                  US5      n[        R                  " US   =(       d    / SUS9n[        U5      S:  a<  US   nUR                  b  UR                  nUR                  b  M  X4l        US   US'   gX1S'   g)zPpointer : TIMES type_qualifier_list_opt
| TIMES type_qualifier_list_opt pointer
r   r   N)r   r{   r]   r   r   )r   r   PtrDeclrR   r{   )r7   r   r]   nested_type	tail_types        r@   	p_pointerCParser.p_pointer  s~     !!!Q'  mm!A$*"4uMq6A:!I..,%NN	 ..,(NQ4AaDaDrC   c                 L    [        U5      S:X  a  US   /OUS   US   /-   US'   g)zJtype_qualifier_list : type_qualifier
| type_qualifier_list type_qualifier
r   r   r   Nr  r   s     r@   p_type_qualifier_listCParser.p_type_qualifier_list  r  rC   c                     [        U5      S:  aB  US   R                  R                  [        R                  " U R                  US5      5      5        US   US'   g)zEparameter_type_list : parameter_list
| parameter_list COMMA ELLIPSIS
r   r   r   r   N)rR   r  rM   r   r  r   r   s     r@   p_parameter_type_listCParser.p_parameter_type_list  sJ     q6A:aDKKu2243D3DQ3JKLt!rC   c                     [        U5      S:X  a,  [        R                  " US   /US   R                  5      US'   gUS   R                  R                  US   5        US   US'   g)zUparameter_list  : parameter_declaration
| parameter_list COMMA parameter_declaration
r   r   r   r   NrR   r   	ParamListr]   r  rM   r   s     r@   p_parameter_listCParser.p_parameter_list#  X     q6Q;??AaD61Q4::6AaDaDKKqt$Q4AaDrC   c                     US   nUS   (       d*  [         R                  " S/U R                  US5      S9/US'   U R                  U[	        US   S9/S9S   US'   g	)
zrparameter_declaration   : declaration_specifiers id_declarator
| declaration_specifiers typeid_noparen_declarator
r   r{   r   r   r   r  r  r   N)r   r   r   r   r4   r  s      r@   p_parameter_declaration_1!CParser.p_parameter_declaration_17  ss     tF|!00%''1-/ 0DL''QqT?# ( %%&(!rC   c                 :   US   nUS   (       d*  [         R                  " S/U R                  US5      S9/US'   [        US   5      S:  ah  [        US   S   R                  5      S:X  aI  U R                  US   S   R                  S   5      (       a   U R                  U[        US   SS	9/S
9S   nOd[         R                  " SUS   SUS   =(       d    [         R                  " SSSS5      U R                  US5      S9nUS   nU R                  X45      nX1S'   g)zQparameter_declaration   : declaration_specifiers abstract_declarator_opt
        r   r{   r   r   rW   r   r   Nr   r  r   r   r\   r   r   r{   r]   )r   r   r   rR   r   rg   r   r4   Typenamer}   r   )r7   r   r   r~   r   s        r@   p_parameter_declaration_2!CParser.p_parameter_declaration_2C  s/    tF|!00%''1-/ 0DL tF|q Sfb)9)?)?%@A%E&&tF|B'7'='=a'@AA++QqT56 , 889;D >>6lqTCU^^D$dC''1-/D F|H++D;D!rC   c                     [        U5      S:X  a,  [        R                  " US   /US   R                  5      US'   gUS   R                  R                  US   5        US   US'   g)z@identifier_list : identifier
| identifier_list COMMA identifier
r   r   r   r   Nr  r   s     r@   p_identifier_listCParser.p_identifier_listc  r  rC   c                     US   US'   g)z,initializer : assignment_expression
        r   r   Nr   r   s     r@   p_initializer_1CParser.p_initializer_1m  r   rC   c                 v    US   c+  [         R                  " / U R                  US5      5      US'   gUS   US'   g)zjinitializer : brace_open initializer_list_opt brace_close
| brace_open initializer_list COMMA brace_close
r   Nr   r   )r   InitListr   r   s     r@   p_initializer_2CParser.p_initializer_2r  s;     Q4<>>"d&7&71&=>AaDQ4AaDrC   c                 `   [        U5      S:X  aQ  US   c  US   O[        R                  " US   US   5      n[        R                  " U/US   R                  5      US'   gUS   c  US   O[        R                  " US   US   5      nUS   R
                  R                  U5        US   US'   g)zginitializer_list    : designation_opt initializer
| initializer_list COMMA designation_opt initializer
r   r   Nr   r   r  )rR   r   NamedInitializerr#  r]   exprsrM   )r7   r   r   s      r@   p_initializer_listCParser.p_initializer_list{  s     q6Q;Q4<1Q4U-C-CAaD!A$-OD>>4&!A$**5AaDQ4<1Q4U-C-CAaD!A$-ODaDJJd#Q4AaDrC   c                     US   US'   g)z-designation : designator_list EQUALS
        r   r   Nr   r   s     r@   p_designationCParser.p_designation  r   rC   c                 L    [        U5      S:X  a  US   /OUS   US   /-   US'   g)z:designator_list : designator
| designator_list designator
r   r   r   Nr  r   s     r@   p_designator_listCParser.p_designator_list  r  rC   c                     US   US'   g)zHdesignator  : LBRACKET constant_expression RBRACKET
| PERIOD identifier
r   r   Nr   r   s     r@   p_designatorCParser.p_designator  r   rC   c                     [         R                  " SUS   S   SS SUS   =(       d    [         R                  " SSSS5      U R                  US5      S9nU R	                  X!S   S   5      US'   g)	zGtype_name   : specifier_qualifier_list abstract_declarator_opt
        r   r   r   Nr   r  r{   r   )r   r  r}   r   r   )r7   r   r   s      r@   p_type_nameCParser.p_type_name  sp     >>A$v,q/1?dD$?##Aq)+ ''A$v,?!rC   c                 b    [         R                  " SSSS5      nU R                  UUS   S9US'   g)z*abstract_declarator     : pointer
        Nr   r  r   )r   r}   r   )r7   r   	dummytypes      r@   p_abstract_declarator_1CParser.p_abstract_declarator_1  s;     NN4tT:	%%qT & !rC   c                 :    U R                  US   US   5      US'   g)zEabstract_declarator     : pointer direct_abstract_declarator
        r   r   r   Nr  r   s     r@   p_abstract_declarator_2CParser.p_abstract_declarator_2  s"     %%adAaD1!rC   c                     US   US'   g)z=abstract_declarator     : direct_abstract_declarator
        r   r   Nr   r   s     r@   p_abstract_declarator_3CParser.p_abstract_declarator_3  r   rC   c                     US   US'   g)z@direct_abstract_declarator  : LPAREN abstract_declarator RPAREN r   r   Nr   r   s     r@   p_direct_abstract_declarator_1&CParser.p_direct_abstract_declarator_1      t!rC   c                 ~    [         R                  " SUS   / US   R                  S9nU R                  US   US9US'   g)zmdirect_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        Nr   r   r  r  r   )r   r  r]   r   r  s      r@   p_direct_abstract_declarator_2&CParser.p_direct_abstract_declarator_2  sI     oo!A$**	 %%1Q4#%>!rC   c           	          [        U5      S:  a  US   O/ =(       d    / n[        R                  " [        R                  " SSSS5      [        U5      S:  a  US   OUS   UU R	                  US5      S9US'   g)zjdirect_abstract_declarator  : LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        r  r   Nr   r   r  r   )rR   r   r  r}   r   )r7   r   r   s      r@   p_direct_abstract_declarator_3&CParser.p_direct_abstract_declarator_3  sl     Q!12dD$7A
!!##Aq)	+!rC   c           
          [         R                  " S[         R                  " US   U R                  US5      5      / US   R                  S9nU R                  US   US9US'   g)zYdirect_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        Nr   r   r  r  r   r  r  s      r@   p_direct_abstract_declarator_4&CParser.p_direct_abstract_declarator_4  sa     oo1t00A67A$**	 %%1Q4#%>!rC   c           
          [         R                  " [         R                  " SSSS5      [         R                  " US   U R	                  US5      5      / U R	                  US5      S9US'   g)z>direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        Nr   r   r  r   )r   r  r}   r  r   r   s     r@   p_direct_abstract_declarator_5&CParser.p_direct_abstract_declarator_5  sZ     dD$71t00A67##Aq)	+!rC   c                 |    [         R                  " US   SUS   R                  S9nU R                  US   US9US'   g)zgdirect_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        r   Nr   r  r  r   )r   r   r]   r   )r7   r   r  s      r@   p_direct_abstract_declarator_6&CParser.p_direct_abstract_declarator_6  sF     ~~1A$**
 %%1Q4$%?!rC   c           	          [         R                  " US   [         R                  " SSSS5      U R                  US5      S9US'   g)zLdirect_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        r   Nr   r  r   )r   r   r}   r   r   s     r@   p_direct_abstract_declarator_7&CParser.p_direct_abstract_declarator_7  s?     ~~1dD$7##Aq)+!rC   c                 P    [        US   [        5      (       a  US   OUS   /US'   g)z&block_item  : declaration
| statement
r   r   N)r|   r  r   s     r@   p_block_itemCParser.p_block_item   s)     "!A$--qtAaD6!rC   c                 \    [        U5      S:X  d
  US   S/:X  a  US   O
US   US   -   US'   g)z:block_item_list : block_item
| block_item_list block_item
r   Nr   r   r  r   s     r@   p_block_item_listCParser.p_block_item_list  s5    
 A!qtv~qtAaD1Q4K!rC   c                 Z    [         R                  " US   U R                  US5      S9US'   g)z@compound_statement : brace_open block_item_list_opt brace_close r   r   r  r   N)r   r  r   r   s     r@   p_compound_statement_1CParser.p_compound_statement_1  s+    ~~!##Aq)+!rC   c                 f    [         R                  " US   US   U R                  US5      5      US'   g)z5labeled_statement : ID COLON pragmacomp_or_statement r   r   r   N)r   Labelr   r   s     r@   p_labeled_statement_1CParser.p_labeled_statement_1  -    {{1Q41t'8'8A'>?!rC   c                 h    [         R                  " US   US   /U R                  US5      5      US'   g)zKlabeled_statement : CASE constant_expression COLON pragmacomp_or_statement r   r  r   r   N)r   Caser   r   s     r@   p_labeled_statement_2CParser.p_labeled_statement_2  s/    zz!A$1(9(9!Q(?@!rC   c                 `    [         R                  " US   /U R                  US5      5      US'   g)z:labeled_statement : DEFAULT COLON pragmacomp_or_statement r   r   r   N)r   Defaultr   r   s     r@   p_labeled_statement_3CParser.p_labeled_statement_3  s)    }}adVT%6%6q!%<=!rC   c           	      h    [         R                  " US   US   SU R                  US5      5      US'   g)zJselection_statement : IF LPAREN expression RPAREN pragmacomp_or_statement r   r   Nr   r   r   Ifr   r   s     r@   p_selection_statement_1CParser.p_selection_statement_1!  s/    xx!adD$*;*;Aq*AB!rC   c           	      n    [         R                  " US   US   US   U R                  US5      5      US'   g)zYselection_statement : IF LPAREN expression RPAREN statement ELSE pragmacomp_or_statement r   r      r   r   Nrn  r   s     r@   p_selection_statement_2CParser.p_selection_statement_2%  s3    xx!adAaD$*;*;Aq*AB!rC   c           
      x    [        [        R                  " US   US   U R                  US5      5      5      US'   g)zNselection_statement : SWITCH LPAREN expression RPAREN pragmacomp_or_statement r   r   r   r   N)r
   r   Switchr   r   s     r@   p_selection_statement_3CParser.p_selection_statement_3)  s6    QqT1Q4):):1a)@AC!rC   c                 f    [         R                  " US   US   U R                  US5      5      US'   g)zMiteration_statement : WHILE LPAREN expression RPAREN pragmacomp_or_statement r   r   r   r   N)r   Whiler   r   s     r@   p_iteration_statement_1CParser.p_iteration_statement_1.  rd  rC   c                 f    [         R                  " US   US   U R                  US5      5      US'   g)zUiteration_statement : DO pragmacomp_or_statement WHILE LPAREN expression RPAREN SEMI r   r   r   r   N)r   DoWhiler   r   s     r@   p_iteration_statement_2CParser.p_iteration_statement_22  s-    }}QqT1Q4):):1a)@A!rC   c           
      v    [         R                  " US   US   US   US   U R                  US5      5      US'   g)zwiteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement r   r   rs  	   r   r   N)r   Forr   r   s     r@   p_iteration_statement_3CParser.p_iteration_statement_36  s9    yy1qtQqT1Q41B1B1a1HI!rC   c           
          [         R                  " [         R                  " US   U R                  US5      5      US   US   US   U R                  US5      5      US'   g)zoiteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement r   r   r        r   N)r   r  DeclListr   r   s     r@   p_iteration_statement_4CParser.p_iteration_statement_4:  sU    yy!d.?.?1.EF1qtQqT4+<+<Q+BD!rC   c                 ^    [         R                  " US   U R                  US5      5      US'   g)zjump_statement  : GOTO ID SEMI r   r   r   N)r   Gotor   r   s     r@   p_jump_statement_1CParser.p_jump_statement_1?  s'    zz!A$ 1 1!Q 78!rC   c                 V    [         R                  " U R                  US5      5      US'   g)zjump_statement  : BREAK SEMI r   r   N)r   Breakr   r   s     r@   p_jump_statement_2CParser.p_jump_statement_2C  s!    {{4,,Q23!rC   c                 V    [         R                  " U R                  US5      5      US'   g)z jump_statement  : CONTINUE SEMI r   r   N)r   Continuer   r   s     r@   p_jump_statement_3CParser.p_jump_statement_3G  s!    ~~d//156!rC   c                     [         R                  " [        U5      S:X  a  US   OSU R                  US5      5      US'   g)z7jump_statement  : RETURN expression SEMI
| RETURN SEMI
r  r   Nr   r   )r   ReturnrR   r   r   s     r@   p_jump_statement_4CParser.p_jump_statement_4K  s6     ||CFaKAaDT4;L;LQPQ;RS!rC   c                 t    US   c*  [         R                  " U R                  US5      5      US'   gUS   US'   g)z+expression_statement : expression_opt SEMI r   Nr   r   )r   EmptyStatementr   r   s     r@   p_expression_statementCParser.p_expression_statementQ  s9    Q4<''(9(9!Q(?@AaDQ4AaDrC   c                     [        U5      S:X  a	  US   US'   g[        US   [        R                  5      (       d+  [        R                  " US   /US   R                  5      US'   US   R
                  R                  US   5        US   US'   g)zMexpression  : assignment_expression
| expression COMMA assignment_expression
r   r   r   r   N)rR   r|   r   ExprListr]   r(  rM   r   s     r@   p_expressionCParser.p_expressionX  sz     q6Q;Q4AaDadENN33~~qtfadjj9!aDJJad#Q4AaDrC   c                     US   US'   g)z9assignment_expression : LPAREN compound_statement RPAREN r   r   Nr   r   s     r@   #p_parenthesized_compound_expression+CParser.p_parenthesized_compound_expressione  rD  rC   c                 \    [         R                  " US   /U R                  US5      S9US'   g)ztypedef_name : TYPEID r   r   r   Nr\  r   s     r@   p_typedef_nameCParser.p_typedef_namei  s+    ##QqTF$2C2CAq2IJ!rC   c                     [        U5      S:X  a	  US   US'   g[        R                  " US   US   US   US   R                  5      US'   g)znassignment_expression   : conditional_expression
| unary_expression assignment_operator assignment_expression
r   r   r   r   N)rR   r   
Assignmentr]   r   s     r@   p_assignment_expressionCParser.p_assignment_expressionm  sJ     q6Q;Q4AaD##AaD!A$!adjjAAaDrC   c                     US   US'   g)zassignment_operator : EQUALS
| XOREQUAL
| TIMESEQUAL
| DIVEQUAL
| MODEQUAL
| PLUSEQUAL
| MINUSEQUAL
| LSHIFTEQUAL
| RSHIFTEQUAL
| ANDEQUAL
| OREQUAL
r   r   Nr   r   s     r@   p_assignment_operatorCParser.p_assignment_operator{  s     t!rC   c                     US   US'   g)z-constant_expression : conditional_expression r   r   Nr   r   s     r@   p_constant_expressionCParser.p_constant_expression  rD  rC   c                     [        U5      S:X  a	  US   US'   g[        R                  " US   US   US   US   R                  5      US'   g)zoconditional_expression  : binary_expression
| binary_expression CONDOP expression COLON conditional_expression
r   r   r   r   r   N)rR   r   	TernaryOpr]   r   s     r@   p_conditional_expression CParser.p_conditional_expression  sH     q6Q;Q4AaD??1Q41qtQqTZZ@AaDrC   c                     [        U5      S:X  a	  US   US'   g[        R                  " US   US   US   US   R                  5      US'   g)a"  binary_expression   : cast_expression
| binary_expression TIMES binary_expression
| binary_expression DIVIDE binary_expression
| binary_expression MOD binary_expression
| binary_expression PLUS binary_expression
| binary_expression MINUS binary_expression
| binary_expression RSHIFT binary_expression
| binary_expression LSHIFT binary_expression
| binary_expression LT binary_expression
| binary_expression LE binary_expression
| binary_expression GE binary_expression
| binary_expression GT binary_expression
| binary_expression EQ binary_expression
| binary_expression NE binary_expression
| binary_expression AND binary_expression
| binary_expression OR binary_expression
| binary_expression XOR binary_expression
| binary_expression LAND binary_expression
| binary_expression LOR binary_expression
r   r   r   r   N)rR   r   BinaryOpr]   r   s     r@   p_binary_expressionCParser.p_binary_expression  sH    * q6Q;Q4AaD>>!A$!adAaDJJ?AaDrC   c                     US   US'   g)z#cast_expression : unary_expression r   r   Nr   r   s     r@   p_cast_expression_1CParser.p_cast_expression_1  rD  rC   c                 f    [         R                  " US   US   U R                  US5      5      US'   g)z:cast_expression : LPAREN type_name RPAREN cast_expression r   r  r   r   N)r   Castr   r   s     r@   p_cast_expression_2CParser.p_cast_expression_2  s-    zz!A$!d&7&71&=>!rC   c                     US   US'   g)z)unary_expression    : postfix_expression r   r   Nr   r   s     r@   p_unary_expression_1CParser.p_unary_expression_1  rD  rC   c                 `    [         R                  " US   US   US   R                  5      US'   g)zounary_expression    : PLUSPLUS unary_expression
| MINUSMINUS unary_expression
| unary_operator cast_expression
r   r   r   Nr   UnaryOpr]   r   s     r@   p_unary_expression_2CParser.p_unary_expression_2  s*    
 }}QqT1Q414!rC   c                     [         R                  " US   [        U5      S:X  a  US   OUS   U R                  US5      5      US'   g)zrunary_expression    : SIZEOF unary_expression
| SIZEOF LPAREN type_name RPAREN
| _ALIGNOF LPAREN type_name RPAREN
r   r   r   r   N)r   r  rR   r   r   s     r@   p_unary_expression_3CParser.p_unary_expression_3  sD    
 }}aDFaKAaDQqTa#%!rC   c                     US   US'   g)z:unary_operator  : AND
| TIMES
| PLUS
| MINUS
| NOT
| LNOT
r   r   Nr   r   s     r@   p_unary_operatorCParser.p_unary_operator  rW  rC   c                     US   US'   g)z)postfix_expression  : primary_expression r   r   Nr   r   s     r@   p_postfix_expression_1CParser.p_postfix_expression_1  rD  rC   c                 `    [         R                  " US   US   US   R                  5      US'   g)zFpostfix_expression  : postfix_expression LBRACKET expression RBRACKET r   r   r   N)r   ArrayRefr]   r   s     r@   p_postfix_expression_2CParser.p_postfix_expression_2  s(    ~~adAaD!A$**5!rC   c                     [         R                  " US   [        U5      S:X  a  US   OSUS   R                  5      US'   g)zspostfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
| postfix_expression LPAREN RPAREN
r   r   r   Nr   )r   FuncCallrR   r]   r   s     r@   p_postfix_expression_3CParser.p_postfix_expression_3  s6     ~~adCFaKAaDT1Q4::N!rC   c                     [         R                  " US   U R                  US5      5      n[         R                  " US   US   X!S   R                  5      US'   g)zpostfix_expression  : postfix_expression PERIOD ID
| postfix_expression PERIOD TYPEID
| postfix_expression ARROW ID
| postfix_expression ARROW TYPEID
r   r   r   r   N)r   r  r   	StructRefr]   )r7   r   fields      r@   p_postfix_expression_4CParser.p_postfix_expression_4  sK     1t00A67qtQqT5A$**=!rC   c                 f    [         R                  " SUS   -   US   US   R                  5      US'   g)zRpostfix_expression  : postfix_expression PLUSPLUS
| postfix_expression MINUSMINUS
r   r   r   r   Nr  r   s     r@   p_postfix_expression_5CParser.p_postfix_expression_5  s.     }}S1Q4Z1qtzz:!rC   c                 D    [         R                  " US   US   5      US'   g)zpostfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
| LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
r   r   r   N)r   CompoundLiteralr   s     r@   p_postfix_expression_6CParser.p_postfix_expression_6  s"     $$QqT1Q40!rC   c                     US   US'   g)z!primary_expression  : identifier r   r   Nr   r   s     r@   p_primary_expression_1CParser.p_primary_expression_1  rD  rC   c                     US   US'   g)zprimary_expression  : constant r   r   Nr   r   s     r@   p_primary_expression_2CParser.p_primary_expression_2  rD  rC   c                     US   US'   g)zGprimary_expression  : unified_string_literal
| unified_wstring_literal
r   r   Nr   r   s     r@   p_primary_expression_3CParser.p_primary_expression_3  r   rC   c                     US   US'   g)z/primary_expression  : LPAREN expression RPAREN r   r   Nr   r   s     r@   p_primary_expression_4CParser.p_primary_expression_4	  rD  rC   c                     U R                  US5      n[        R                  " [        R                  " US   U5      [        R                  " US   US   /U5      U5      US'   g)z`primary_expression  : OFFSETOF LPAREN type_name COMMA offsetof_member_designator RPAREN
        r   r   r   r   N)r   r   r  r  r  )r7   r   r]   s      r@   p_primary_expression_5CParser.p_primary_expression_5  sV     !!!Q'~~ehhqtU3#nnadAaD\5A#%!rC   c                 `   [        U5      S:X  a	  US   US'   g[        U5      S:X  a3  [        R                  " US   US   US   US   R                  5      US'   g[        U5      S:X  a/  [        R                  " US   US   US   R                  5      US'   g[        S[        U5      -  5      e)	zoffsetof_member_designator : identifier
| offsetof_member_designator PERIOD identifier
| offsetof_member_designator LBRACKET expression RBRACKET
r   r   r   r  r   r   z$Unexpected parsing state. len(p): %uN)rR   r   r  r]   r  NotImplementedErrorr   s     r@   p_offsetof_member_designator$CParser.p_offsetof_member_designator  s    
 q6Q;Q4AaDVq[??1Q41qtQqTZZ@AaDVq[>>!A$!adjj9AaD%&LsSTv&UVVrC   c                     [        U5      S:X  a,  [        R                  " US   /US   R                  5      US'   gUS   R                  R                  US   5        US   US'   g)zkargument_expression_list    : assignment_expression
| argument_expression_list COMMA assignment_expression
r   r   r   r   N)rR   r   r  r]   r(  rM   r   s     r@   p_argument_expression_list"CParser.p_argument_expression_list#  sX     q6Q;>>1Q4&!A$**5AaDaDJJad#Q4AaDrC   c                 ^    [         R                  " US   U R                  US5      5      US'   g)zidentifier  : ID r   r   N)r   r  r   r   s     r@   p_identifierCParser.p_identifier-  s'    xx!d//156!rC   c                    SnSnUS   SS  H  nUS;   a  US-  nM  US;   d  M  US-  nM     SnUS:  a  [        S5      eUS	:  a  [        S
5      eSU-  SU-  -   n[        R                  " US-   US   U R                  US5      5      US'   g)z]constant    : INT_CONST_DEC
| INT_CONST_OCT
| INT_CONST_HEX
| INT_CONST_BIN
| INT_CONST_CHAR
r   r   NlL)uUr   z.Constant cannot have more than one u/U suffix.r   z.Constant cannot have more than two l/L suffix.z	unsigned zlong r   )
ValueErrorr   Constantr   )r7   r   uCountlCountxr   prefixs          r@   p_constant_1CParser.p_constant_11  s     1bcAJ!j!	 
 A:NOOaZNOOv%&(88~~UNAaD$"3"3Aq"9;!rC   c                     SUS   R                  5       ;   a  SnO US   S   S;   a  SnOUS   S   S;   a  SnOSn[        R                  " X!S   U R                  US5      5      US	'   g
)z,constant    : FLOAT_CONST
| HEX_FLOAT_CONST
r  r   floatrW   )fFr  zlong doubledoubler   N)lowerr   r
  r   )r7   r   r   s      r@   p_constant_2CParser.p_constant_2H  sr     !A$**,AtBx:%1bZ'!~~tT&&q!,.!rC   c                 `    [         R                  " SUS   U R                  US5      5      US'   g)zVconstant    : CHAR_CONST
| WCHAR_CONST
| U8CHAR_CONST
| U16CHAR_CONST
| U32CHAR_CONST
charr   r   N)r   r
  r   r   s     r@   p_constant_3CParser.p_constant_3Y  s.     ~~AaD$++Aq13!rC   c                     [        U5      S:X  a/  [        R                  " SUS   U R                  US5      5      US'   gUS   R                  SS US   SS -   US   l        US   US'   g)zQunified_string_literal  : STRING_LITERAL
| unified_string_literal STRING_LITERAL
r   stringr   r   NrW   )rR   r   r
  r   valuer   s     r@   p_unified_string_literal CParser.p_unified_string_literalh  sp     q6Q;>>!A$ 1 1!Q 79AaD 1CR1Q483AaDJQ4AaDrC   c                     [        U5      S:X  a/  [        R                  " SUS   U R                  US5      5      US'   gUS   R                  R                  5       SS US   SS -   US   l        US   US'   g)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
r   r  r   r   NrW   )rR   r   r
  r   r  rstripr   s     r@   p_unified_wstring_literal!CParser.p_unified_wstring_literals  sz     q6Q;>>!A$ 1 1!Q 79AaD 1**,Sb1AaDH<AaDJQ4AaDrC   c                 V    US   US'   UR                  SUR                  S5      5        g)zbrace_open  :   LBRACE
        r   r   N
set_linenolinenor   s     r@   p_brace_openCParser.p_brace_open  '     t!	Q$rC   c                 V    US   US'   UR                  SUR                  S5      5        g)zbrace_close :   RBRACE
        r   r   Nr'  r   s     r@   p_brace_closeCParser.p_brace_close  r,  rC   c                     SUS'   g)zempty : Nr   r   r   s     r@   p_emptyCParser.p_empty  s    !rC   c           	          U(       aQ  U R                  SUR                  -  U R                  UR                  U R                  R                  U5      S95        g U R                  SU R                  R                  5        g )Nz
before: %s)r)  rm   zAt end of input)rZ   r  rj   r)  r/   find_tok_columnrF   r   s     r@   p_errorCParser.p_error  si     qww&188#'99#<#<Q#?  AB
 /1C1CDrC   )r6   r5   r/   r3   r1   N)r   F)F)__name__
__module____qualname____firstlineno__r   rA   rH   rO   rT   r^   ra   rg   r+   r,   r-   r.   rx   r   r   r   r   r   r   
precedencer   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r"  r%  r(  r,  r0  r3  r6  r9  r>  rB  rE  rH  rK  rO  rR  rU  rY  r]  r`  re  rh  rk  rp  rt  rw  rz  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  r  r  r  r  r  r   r  r	  r  r  r  r  r  r   r$  r)  r,  r/  r2  r5  r9  r<  r?  rB  rF  rI  rL  rO  rR  rU  rX  r[  r^  rb  rg  rk  rp  rt  rx  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  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r   r$  r*  r.  r1  r5  __static_attributes__r   rC   r@   r   r      s~    %'m(^0) +,:$R!d*X2Wr"J('



M3
=8$	
n	(,z4C
F
GC
H
P
S
T
P
C
P
U
K 8D8DP
P
C
S
Q
H	+/$/&'$L

8/
U??
?<  <!57ST U
 <!57ST2 U2
 <!57ST+ U+ <!56 7
 <!57ST? U? <!57ST? U?* <!57ST	? U	? <!57ST@ U@8<8(
(@

8
@2
	?+	?+@+:H+@A>CCC
@BJD
947TKBA@4?5%6O>;1%W7;.."3	"%%
ErC   r   N)plyr   r   r   c_lexerr   	plyparserr   r   r   r	   ast_transformsr
   r   r   r   rC   r@   <module>rA     s:       E E C 
LEi LE 
LErC   