12632Sstever@eecs.umich.edu# -----------------------------------------------------------------------------
22632Sstever@eecs.umich.edu# cparse.py
32632Sstever@eecs.umich.edu#
42632Sstever@eecs.umich.edu# Simple parser for ANSI C.  Based on the grammar in K&R, 2nd Ed.
52632Sstever@eecs.umich.edu# -----------------------------------------------------------------------------
62632Sstever@eecs.umich.edu
74479Sbinkertn@umich.eduimport sys
82632Sstever@eecs.umich.eduimport clex
94479Sbinkertn@umich.eduimport ply.yacc as yacc
102632Sstever@eecs.umich.edu
112632Sstever@eecs.umich.edu# Get the token map
122632Sstever@eecs.umich.edutokens = clex.tokens
132632Sstever@eecs.umich.edu
142632Sstever@eecs.umich.edu# translation-unit:
152632Sstever@eecs.umich.edu
162632Sstever@eecs.umich.edudef p_translation_unit_1(t):
172632Sstever@eecs.umich.edu    'translation_unit : external_declaration'
182632Sstever@eecs.umich.edu    pass
192632Sstever@eecs.umich.edu
202632Sstever@eecs.umich.edudef p_translation_unit_2(t):
212632Sstever@eecs.umich.edu    'translation_unit : translation_unit external_declaration'
222632Sstever@eecs.umich.edu    pass
232632Sstever@eecs.umich.edu
242632Sstever@eecs.umich.edu# external-declaration:
252632Sstever@eecs.umich.edu
262632Sstever@eecs.umich.edudef p_external_declaration_1(t):
272632Sstever@eecs.umich.edu    'external_declaration : function_definition'
282632Sstever@eecs.umich.edu    pass
292632Sstever@eecs.umich.edu
302632Sstever@eecs.umich.edudef p_external_declaration_2(t):
312632Sstever@eecs.umich.edu    'external_declaration : declaration'
322632Sstever@eecs.umich.edu    pass
332632Sstever@eecs.umich.edu
342632Sstever@eecs.umich.edu# function-definition:
352632Sstever@eecs.umich.edu
362632Sstever@eecs.umich.edudef p_function_definition_1(t):
372632Sstever@eecs.umich.edu    'function_definition : declaration_specifiers declarator declaration_list compound_statement'
382632Sstever@eecs.umich.edu    pass
392632Sstever@eecs.umich.edu
402632Sstever@eecs.umich.edudef p_function_definition_2(t):
412632Sstever@eecs.umich.edu    'function_definition : declarator declaration_list compound_statement'
422632Sstever@eecs.umich.edu    pass
432632Sstever@eecs.umich.edu
442632Sstever@eecs.umich.edudef p_function_definition_3(t):
452632Sstever@eecs.umich.edu    'function_definition : declarator compound_statement'
462632Sstever@eecs.umich.edu    pass
472632Sstever@eecs.umich.edu
482632Sstever@eecs.umich.edudef p_function_definition_4(t):
492632Sstever@eecs.umich.edu    'function_definition : declaration_specifiers declarator compound_statement'
502632Sstever@eecs.umich.edu    pass
512632Sstever@eecs.umich.edu
522632Sstever@eecs.umich.edu# declaration:
532632Sstever@eecs.umich.edu
542632Sstever@eecs.umich.edudef p_declaration_1(t):
552632Sstever@eecs.umich.edu    'declaration : declaration_specifiers init_declarator_list SEMI'
562632Sstever@eecs.umich.edu    pass
572632Sstever@eecs.umich.edu
582632Sstever@eecs.umich.edudef p_declaration_2(t):
592632Sstever@eecs.umich.edu    'declaration : declaration_specifiers SEMI'
602632Sstever@eecs.umich.edu    pass
612632Sstever@eecs.umich.edu
622632Sstever@eecs.umich.edu# declaration-list:
632632Sstever@eecs.umich.edu
642632Sstever@eecs.umich.edudef p_declaration_list_1(t):
652632Sstever@eecs.umich.edu    'declaration_list : declaration'
662632Sstever@eecs.umich.edu    pass
672632Sstever@eecs.umich.edu
682632Sstever@eecs.umich.edudef p_declaration_list_2(t):
692632Sstever@eecs.umich.edu    'declaration_list : declaration_list declaration '
702632Sstever@eecs.umich.edu    pass
712632Sstever@eecs.umich.edu
722632Sstever@eecs.umich.edu# declaration-specifiers
732632Sstever@eecs.umich.edudef p_declaration_specifiers_1(t):
742632Sstever@eecs.umich.edu    'declaration_specifiers : storage_class_specifier declaration_specifiers'
752632Sstever@eecs.umich.edu    pass
762632Sstever@eecs.umich.edu
772632Sstever@eecs.umich.edudef p_declaration_specifiers_2(t):
782632Sstever@eecs.umich.edu    'declaration_specifiers : type_specifier declaration_specifiers'
792632Sstever@eecs.umich.edu    pass
802632Sstever@eecs.umich.edu
812632Sstever@eecs.umich.edudef p_declaration_specifiers_3(t):
822632Sstever@eecs.umich.edu    'declaration_specifiers : type_qualifier declaration_specifiers'
832632Sstever@eecs.umich.edu    pass
842632Sstever@eecs.umich.edu
852632Sstever@eecs.umich.edudef p_declaration_specifiers_4(t):
862632Sstever@eecs.umich.edu    'declaration_specifiers : storage_class_specifier'
872632Sstever@eecs.umich.edu    pass
882632Sstever@eecs.umich.edu
892632Sstever@eecs.umich.edudef p_declaration_specifiers_5(t):
902632Sstever@eecs.umich.edu    'declaration_specifiers : type_specifier'
912632Sstever@eecs.umich.edu    pass
922632Sstever@eecs.umich.edu
932632Sstever@eecs.umich.edudef p_declaration_specifiers_6(t):
942632Sstever@eecs.umich.edu    'declaration_specifiers : type_qualifier'
952632Sstever@eecs.umich.edu    pass
962632Sstever@eecs.umich.edu
972632Sstever@eecs.umich.edu# storage-class-specifier
982632Sstever@eecs.umich.edudef p_storage_class_specifier(t):
992632Sstever@eecs.umich.edu    '''storage_class_specifier : AUTO
1002632Sstever@eecs.umich.edu                               | REGISTER
1012632Sstever@eecs.umich.edu                               | STATIC
1022632Sstever@eecs.umich.edu                               | EXTERN
1032632Sstever@eecs.umich.edu                               | TYPEDEF
1042632Sstever@eecs.umich.edu                               '''
1052632Sstever@eecs.umich.edu    pass
1062632Sstever@eecs.umich.edu
1072632Sstever@eecs.umich.edu# type-specifier:
1082632Sstever@eecs.umich.edudef p_type_specifier(t):
1092632Sstever@eecs.umich.edu    '''type_specifier : VOID
1102632Sstever@eecs.umich.edu                      | CHAR
1112632Sstever@eecs.umich.edu                      | SHORT
1122632Sstever@eecs.umich.edu                      | INT
1132632Sstever@eecs.umich.edu                      | LONG
1142632Sstever@eecs.umich.edu                      | FLOAT
1152632Sstever@eecs.umich.edu                      | DOUBLE
1162632Sstever@eecs.umich.edu                      | SIGNED
1172632Sstever@eecs.umich.edu                      | UNSIGNED
1182632Sstever@eecs.umich.edu                      | struct_or_union_specifier
1192632Sstever@eecs.umich.edu                      | enum_specifier
1202632Sstever@eecs.umich.edu                      | TYPEID
1212632Sstever@eecs.umich.edu                      '''
1222632Sstever@eecs.umich.edu    pass
1232632Sstever@eecs.umich.edu
1242632Sstever@eecs.umich.edu# type-qualifier:
1252632Sstever@eecs.umich.edudef p_type_qualifier(t):
1262632Sstever@eecs.umich.edu    '''type_qualifier : CONST
1272632Sstever@eecs.umich.edu                      | VOLATILE'''
1282632Sstever@eecs.umich.edu    pass
1292632Sstever@eecs.umich.edu
1302632Sstever@eecs.umich.edu# struct-or-union-specifier
1312632Sstever@eecs.umich.edu
1322632Sstever@eecs.umich.edudef p_struct_or_union_specifier_1(t):
1332632Sstever@eecs.umich.edu    'struct_or_union_specifier : struct_or_union ID LBRACE struct_declaration_list RBRACE'
1342632Sstever@eecs.umich.edu    pass
1352632Sstever@eecs.umich.edu
1362632Sstever@eecs.umich.edudef p_struct_or_union_specifier_2(t):
1372632Sstever@eecs.umich.edu    'struct_or_union_specifier : struct_or_union LBRACE struct_declaration_list RBRACE'
1382632Sstever@eecs.umich.edu    pass
1392632Sstever@eecs.umich.edu
1402632Sstever@eecs.umich.edudef p_struct_or_union_specifier_3(t):
1412632Sstever@eecs.umich.edu    'struct_or_union_specifier : struct_or_union ID'
1422632Sstever@eecs.umich.edu    pass
1432632Sstever@eecs.umich.edu
1442632Sstever@eecs.umich.edu# struct-or-union:
1452632Sstever@eecs.umich.edudef p_struct_or_union(t):
1462632Sstever@eecs.umich.edu    '''struct_or_union : STRUCT
1472632Sstever@eecs.umich.edu                       | UNION
1482632Sstever@eecs.umich.edu                       '''
1492632Sstever@eecs.umich.edu    pass
1502632Sstever@eecs.umich.edu
1512632Sstever@eecs.umich.edu# struct-declaration-list:
1522632Sstever@eecs.umich.edu
1532632Sstever@eecs.umich.edudef p_struct_declaration_list_1(t):
1542632Sstever@eecs.umich.edu    'struct_declaration_list : struct_declaration'
1552632Sstever@eecs.umich.edu    pass
1562632Sstever@eecs.umich.edu
1572632Sstever@eecs.umich.edudef p_struct_declaration_list_2(t):
1586498Snate@binkert.org    'struct_declaration_list : struct_declaration_list struct_declaration'
1592632Sstever@eecs.umich.edu    pass
1602632Sstever@eecs.umich.edu
1612632Sstever@eecs.umich.edu# init-declarator-list:
1622632Sstever@eecs.umich.edu
1632632Sstever@eecs.umich.edudef p_init_declarator_list_1(t):
1642632Sstever@eecs.umich.edu    'init_declarator_list : init_declarator'
1652632Sstever@eecs.umich.edu    pass
1662632Sstever@eecs.umich.edu
1672632Sstever@eecs.umich.edudef p_init_declarator_list_2(t):
1682632Sstever@eecs.umich.edu    'init_declarator_list : init_declarator_list COMMA init_declarator'
1692632Sstever@eecs.umich.edu    pass
1702632Sstever@eecs.umich.edu
1712632Sstever@eecs.umich.edu# init-declarator
1722632Sstever@eecs.umich.edu
1732632Sstever@eecs.umich.edudef p_init_declarator_1(t):
1742632Sstever@eecs.umich.edu    'init_declarator : declarator'
1752632Sstever@eecs.umich.edu    pass
1762632Sstever@eecs.umich.edu
1772632Sstever@eecs.umich.edudef p_init_declarator_2(t):
1782632Sstever@eecs.umich.edu    'init_declarator : declarator EQUALS initializer'
1792632Sstever@eecs.umich.edu    pass
1802632Sstever@eecs.umich.edu
1812632Sstever@eecs.umich.edu# struct-declaration:
1822632Sstever@eecs.umich.edu
1832632Sstever@eecs.umich.edudef p_struct_declaration(t):
1842632Sstever@eecs.umich.edu    'struct_declaration : specifier_qualifier_list struct_declarator_list SEMI'
1852632Sstever@eecs.umich.edu    pass
1862632Sstever@eecs.umich.edu
1872632Sstever@eecs.umich.edu# specifier-qualifier-list:
1882632Sstever@eecs.umich.edu
1892632Sstever@eecs.umich.edudef p_specifier_qualifier_list_1(t):
1902632Sstever@eecs.umich.edu    'specifier_qualifier_list : type_specifier specifier_qualifier_list'
1912632Sstever@eecs.umich.edu    pass
1922632Sstever@eecs.umich.edu
1932632Sstever@eecs.umich.edudef p_specifier_qualifier_list_2(t):
1942632Sstever@eecs.umich.edu    'specifier_qualifier_list : type_specifier'
1952632Sstever@eecs.umich.edu    pass
1962632Sstever@eecs.umich.edu
1972632Sstever@eecs.umich.edudef p_specifier_qualifier_list_3(t):
1982632Sstever@eecs.umich.edu    'specifier_qualifier_list : type_qualifier specifier_qualifier_list'
1992632Sstever@eecs.umich.edu    pass
2002632Sstever@eecs.umich.edu
2012632Sstever@eecs.umich.edudef p_specifier_qualifier_list_4(t):
2022632Sstever@eecs.umich.edu    'specifier_qualifier_list : type_qualifier'
2032632Sstever@eecs.umich.edu    pass
2042632Sstever@eecs.umich.edu
2052632Sstever@eecs.umich.edu# struct-declarator-list:
2062632Sstever@eecs.umich.edu
2072632Sstever@eecs.umich.edudef p_struct_declarator_list_1(t):
2082632Sstever@eecs.umich.edu    'struct_declarator_list : struct_declarator'
2092632Sstever@eecs.umich.edu    pass
2102632Sstever@eecs.umich.edu
2112632Sstever@eecs.umich.edudef p_struct_declarator_list_2(t):
2122632Sstever@eecs.umich.edu    'struct_declarator_list : struct_declarator_list COMMA struct_declarator'
2132632Sstever@eecs.umich.edu    pass
2142632Sstever@eecs.umich.edu
2152632Sstever@eecs.umich.edu# struct-declarator:
2162632Sstever@eecs.umich.edu
2172632Sstever@eecs.umich.edudef p_struct_declarator_1(t):
2182632Sstever@eecs.umich.edu    'struct_declarator : declarator'
2192632Sstever@eecs.umich.edu    pass
2202632Sstever@eecs.umich.edu
2212632Sstever@eecs.umich.edudef p_struct_declarator_2(t):
2222632Sstever@eecs.umich.edu    'struct_declarator : declarator COLON constant_expression'
2232632Sstever@eecs.umich.edu    pass
2242632Sstever@eecs.umich.edu
2252632Sstever@eecs.umich.edudef p_struct_declarator_3(t):
2262632Sstever@eecs.umich.edu    'struct_declarator : COLON constant_expression'
2272632Sstever@eecs.umich.edu    pass
2282632Sstever@eecs.umich.edu
2292632Sstever@eecs.umich.edu# enum-specifier:
2302632Sstever@eecs.umich.edu
2312632Sstever@eecs.umich.edudef p_enum_specifier_1(t):
2322632Sstever@eecs.umich.edu    'enum_specifier : ENUM ID LBRACE enumerator_list RBRACE'
2332632Sstever@eecs.umich.edu    pass
2342632Sstever@eecs.umich.edu
2352632Sstever@eecs.umich.edudef p_enum_specifier_2(t):
2362632Sstever@eecs.umich.edu    'enum_specifier : ENUM LBRACE enumerator_list RBRACE'
2372632Sstever@eecs.umich.edu    pass
2382632Sstever@eecs.umich.edu
2392632Sstever@eecs.umich.edudef p_enum_specifier_3(t):
2402632Sstever@eecs.umich.edu    'enum_specifier : ENUM ID'
2412632Sstever@eecs.umich.edu    pass
2422632Sstever@eecs.umich.edu
2432632Sstever@eecs.umich.edu# enumerator_list:
2442632Sstever@eecs.umich.edudef p_enumerator_list_1(t):
2452632Sstever@eecs.umich.edu    'enumerator_list : enumerator'
2462632Sstever@eecs.umich.edu    pass
2472632Sstever@eecs.umich.edu
2482632Sstever@eecs.umich.edudef p_enumerator_list_2(t):
2492632Sstever@eecs.umich.edu    'enumerator_list : enumerator_list COMMA enumerator'
2502632Sstever@eecs.umich.edu    pass
2512632Sstever@eecs.umich.edu
2522632Sstever@eecs.umich.edu# enumerator:
2532632Sstever@eecs.umich.edudef p_enumerator_1(t):
2542632Sstever@eecs.umich.edu    'enumerator : ID'
2552632Sstever@eecs.umich.edu    pass
2562632Sstever@eecs.umich.edu
2572632Sstever@eecs.umich.edudef p_enumerator_2(t):
2582632Sstever@eecs.umich.edu    'enumerator : ID EQUALS constant_expression'
2592632Sstever@eecs.umich.edu    pass
2602632Sstever@eecs.umich.edu
2612632Sstever@eecs.umich.edu# declarator:
2622632Sstever@eecs.umich.edu
2632632Sstever@eecs.umich.edudef p_declarator_1(t):
2642632Sstever@eecs.umich.edu    'declarator : pointer direct_declarator'
2652632Sstever@eecs.umich.edu    pass
2662632Sstever@eecs.umich.edu
2672632Sstever@eecs.umich.edudef p_declarator_2(t):
2682632Sstever@eecs.umich.edu    'declarator : direct_declarator'
2692632Sstever@eecs.umich.edu    pass
2702632Sstever@eecs.umich.edu
2712632Sstever@eecs.umich.edu# direct-declarator:
2722632Sstever@eecs.umich.edu
2732632Sstever@eecs.umich.edudef p_direct_declarator_1(t):
2742632Sstever@eecs.umich.edu    'direct_declarator : ID'
2752632Sstever@eecs.umich.edu    pass
2762632Sstever@eecs.umich.edu
2772632Sstever@eecs.umich.edudef p_direct_declarator_2(t):
2782632Sstever@eecs.umich.edu    'direct_declarator : LPAREN declarator RPAREN'
2792632Sstever@eecs.umich.edu    pass
2802632Sstever@eecs.umich.edu
2812632Sstever@eecs.umich.edudef p_direct_declarator_3(t):
2822632Sstever@eecs.umich.edu    'direct_declarator : direct_declarator LBRACKET constant_expression_opt RBRACKET'
2832632Sstever@eecs.umich.edu    pass
2842632Sstever@eecs.umich.edu
2852632Sstever@eecs.umich.edudef p_direct_declarator_4(t):
2862632Sstever@eecs.umich.edu    'direct_declarator : direct_declarator LPAREN parameter_type_list RPAREN '
2872632Sstever@eecs.umich.edu    pass
2882632Sstever@eecs.umich.edu
2892632Sstever@eecs.umich.edudef p_direct_declarator_5(t):
2902632Sstever@eecs.umich.edu    'direct_declarator : direct_declarator LPAREN identifier_list RPAREN '
2912632Sstever@eecs.umich.edu    pass
2922632Sstever@eecs.umich.edu
2932632Sstever@eecs.umich.edudef p_direct_declarator_6(t):
2942632Sstever@eecs.umich.edu    'direct_declarator : direct_declarator LPAREN RPAREN '
2952632Sstever@eecs.umich.edu    pass
2962632Sstever@eecs.umich.edu
2972632Sstever@eecs.umich.edu# pointer:
2982632Sstever@eecs.umich.edudef p_pointer_1(t):
2992632Sstever@eecs.umich.edu    'pointer : TIMES type_qualifier_list'
3002632Sstever@eecs.umich.edu    pass
3012632Sstever@eecs.umich.edu
3022632Sstever@eecs.umich.edudef p_pointer_2(t):
3032632Sstever@eecs.umich.edu    'pointer : TIMES'
3042632Sstever@eecs.umich.edu    pass
3052632Sstever@eecs.umich.edu
3062632Sstever@eecs.umich.edudef p_pointer_3(t):
3072632Sstever@eecs.umich.edu    'pointer : TIMES type_qualifier_list pointer'
3082632Sstever@eecs.umich.edu    pass
3092632Sstever@eecs.umich.edu
3102632Sstever@eecs.umich.edudef p_pointer_4(t):
3112632Sstever@eecs.umich.edu    'pointer : TIMES pointer'
3122632Sstever@eecs.umich.edu    pass
3132632Sstever@eecs.umich.edu
3142632Sstever@eecs.umich.edu# type-qualifier-list:
3152632Sstever@eecs.umich.edu
3162632Sstever@eecs.umich.edudef p_type_qualifier_list_1(t):
3172632Sstever@eecs.umich.edu    'type_qualifier_list : type_qualifier'
3182632Sstever@eecs.umich.edu    pass
3192632Sstever@eecs.umich.edu
3202632Sstever@eecs.umich.edudef p_type_qualifier_list_2(t):
3212632Sstever@eecs.umich.edu    'type_qualifier_list : type_qualifier_list type_qualifier'
3222632Sstever@eecs.umich.edu    pass
3232632Sstever@eecs.umich.edu
3242632Sstever@eecs.umich.edu# parameter-type-list:
3252632Sstever@eecs.umich.edu
3262632Sstever@eecs.umich.edudef p_parameter_type_list_1(t):
3272632Sstever@eecs.umich.edu    'parameter_type_list : parameter_list'
3282632Sstever@eecs.umich.edu    pass
3292632Sstever@eecs.umich.edu
3302632Sstever@eecs.umich.edudef p_parameter_type_list_2(t):
3312632Sstever@eecs.umich.edu    'parameter_type_list : parameter_list COMMA ELLIPSIS'
3322632Sstever@eecs.umich.edu    pass
3332632Sstever@eecs.umich.edu
3342632Sstever@eecs.umich.edu# parameter-list:
3352632Sstever@eecs.umich.edu
3362632Sstever@eecs.umich.edudef p_parameter_list_1(t):
3372632Sstever@eecs.umich.edu    'parameter_list : parameter_declaration'
3382632Sstever@eecs.umich.edu    pass
3392632Sstever@eecs.umich.edu
3402632Sstever@eecs.umich.edudef p_parameter_list_2(t):
3412632Sstever@eecs.umich.edu    'parameter_list : parameter_list COMMA parameter_declaration'
3422632Sstever@eecs.umich.edu    pass
3432632Sstever@eecs.umich.edu
3442632Sstever@eecs.umich.edu# parameter-declaration:
3452632Sstever@eecs.umich.edudef p_parameter_declaration_1(t):
3462632Sstever@eecs.umich.edu    'parameter_declaration : declaration_specifiers declarator'
3472632Sstever@eecs.umich.edu    pass
3482632Sstever@eecs.umich.edu
3492632Sstever@eecs.umich.edudef p_parameter_declaration_2(t):
3502632Sstever@eecs.umich.edu    'parameter_declaration : declaration_specifiers abstract_declarator_opt'
3512632Sstever@eecs.umich.edu    pass
3522632Sstever@eecs.umich.edu
3532632Sstever@eecs.umich.edu# identifier-list:
3542632Sstever@eecs.umich.edudef p_identifier_list_1(t):
3552632Sstever@eecs.umich.edu    'identifier_list : ID'
3562632Sstever@eecs.umich.edu    pass
3572632Sstever@eecs.umich.edu
3582632Sstever@eecs.umich.edudef p_identifier_list_2(t):
3592632Sstever@eecs.umich.edu    'identifier_list : identifier_list COMMA ID'
3602632Sstever@eecs.umich.edu    pass
3612632Sstever@eecs.umich.edu
3622632Sstever@eecs.umich.edu# initializer:
3632632Sstever@eecs.umich.edu
3642632Sstever@eecs.umich.edudef p_initializer_1(t):
3652632Sstever@eecs.umich.edu    'initializer : assignment_expression'
3662632Sstever@eecs.umich.edu    pass
3672632Sstever@eecs.umich.edu
3682632Sstever@eecs.umich.edudef p_initializer_2(t):
3692632Sstever@eecs.umich.edu    '''initializer : LBRACE initializer_list RBRACE
3702632Sstever@eecs.umich.edu                   | LBRACE initializer_list COMMA RBRACE'''
3712632Sstever@eecs.umich.edu    pass
3722632Sstever@eecs.umich.edu
3732632Sstever@eecs.umich.edu# initializer-list:
3742632Sstever@eecs.umich.edu
3752632Sstever@eecs.umich.edudef p_initializer_list_1(t):
3762632Sstever@eecs.umich.edu    'initializer_list : initializer'
3772632Sstever@eecs.umich.edu    pass
3782632Sstever@eecs.umich.edu
3792632Sstever@eecs.umich.edudef p_initializer_list_2(t):
3802632Sstever@eecs.umich.edu    'initializer_list : initializer_list COMMA initializer'
3812632Sstever@eecs.umich.edu    pass
3822632Sstever@eecs.umich.edu
3832632Sstever@eecs.umich.edu# type-name:
3842632Sstever@eecs.umich.edu
3852632Sstever@eecs.umich.edudef p_type_name(t):
3862632Sstever@eecs.umich.edu    'type_name : specifier_qualifier_list abstract_declarator_opt'
3872632Sstever@eecs.umich.edu    pass
3882632Sstever@eecs.umich.edu
3892632Sstever@eecs.umich.edudef p_abstract_declarator_opt_1(t):
3902632Sstever@eecs.umich.edu    'abstract_declarator_opt : empty'
3912632Sstever@eecs.umich.edu    pass
3922632Sstever@eecs.umich.edu
3932632Sstever@eecs.umich.edudef p_abstract_declarator_opt_2(t):
3942632Sstever@eecs.umich.edu    'abstract_declarator_opt : abstract_declarator'
3952632Sstever@eecs.umich.edu    pass
3962632Sstever@eecs.umich.edu
3972632Sstever@eecs.umich.edu# abstract-declarator:
3982632Sstever@eecs.umich.edu
3992632Sstever@eecs.umich.edudef p_abstract_declarator_1(t):
4002632Sstever@eecs.umich.edu    'abstract_declarator : pointer '
4012632Sstever@eecs.umich.edu    pass
4022632Sstever@eecs.umich.edu
4032632Sstever@eecs.umich.edudef p_abstract_declarator_2(t):
4042632Sstever@eecs.umich.edu    'abstract_declarator : pointer direct_abstract_declarator'
4052632Sstever@eecs.umich.edu    pass
4062632Sstever@eecs.umich.edu
4072632Sstever@eecs.umich.edudef p_abstract_declarator_3(t):
4082632Sstever@eecs.umich.edu    'abstract_declarator : direct_abstract_declarator'
4092632Sstever@eecs.umich.edu    pass
4102632Sstever@eecs.umich.edu
4112632Sstever@eecs.umich.edu# direct-abstract-declarator:
4122632Sstever@eecs.umich.edu
4132632Sstever@eecs.umich.edudef p_direct_abstract_declarator_1(t):
4142632Sstever@eecs.umich.edu    'direct_abstract_declarator : LPAREN abstract_declarator RPAREN'
4152632Sstever@eecs.umich.edu    pass
4162632Sstever@eecs.umich.edu
4172632Sstever@eecs.umich.edudef p_direct_abstract_declarator_2(t):
4182632Sstever@eecs.umich.edu    'direct_abstract_declarator : direct_abstract_declarator LBRACKET constant_expression_opt RBRACKET'
4192632Sstever@eecs.umich.edu    pass
4202632Sstever@eecs.umich.edu
4212632Sstever@eecs.umich.edudef p_direct_abstract_declarator_3(t):
4222632Sstever@eecs.umich.edu    'direct_abstract_declarator : LBRACKET constant_expression_opt RBRACKET'
4232632Sstever@eecs.umich.edu    pass
4242632Sstever@eecs.umich.edu
4252632Sstever@eecs.umich.edudef p_direct_abstract_declarator_4(t):
4262632Sstever@eecs.umich.edu    'direct_abstract_declarator : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN'
4272632Sstever@eecs.umich.edu    pass
4282632Sstever@eecs.umich.edu
4292632Sstever@eecs.umich.edudef p_direct_abstract_declarator_5(t):
4302632Sstever@eecs.umich.edu    'direct_abstract_declarator : LPAREN parameter_type_list_opt RPAREN'
4312632Sstever@eecs.umich.edu    pass
4322632Sstever@eecs.umich.edu
4332632Sstever@eecs.umich.edu# Optional fields in abstract declarators
4342632Sstever@eecs.umich.edu
4352632Sstever@eecs.umich.edudef p_constant_expression_opt_1(t):
4362632Sstever@eecs.umich.edu    'constant_expression_opt : empty'
4372632Sstever@eecs.umich.edu    pass
4382632Sstever@eecs.umich.edu
4392632Sstever@eecs.umich.edudef p_constant_expression_opt_2(t):
4402632Sstever@eecs.umich.edu    'constant_expression_opt : constant_expression'
4412632Sstever@eecs.umich.edu    pass
4422632Sstever@eecs.umich.edu
4432632Sstever@eecs.umich.edudef p_parameter_type_list_opt_1(t):
4442632Sstever@eecs.umich.edu    'parameter_type_list_opt : empty'
4452632Sstever@eecs.umich.edu    pass
4462632Sstever@eecs.umich.edu
4472632Sstever@eecs.umich.edudef p_parameter_type_list_opt_2(t):
4482632Sstever@eecs.umich.edu    'parameter_type_list_opt : parameter_type_list'
4492632Sstever@eecs.umich.edu    pass
4502632Sstever@eecs.umich.edu
4512632Sstever@eecs.umich.edu# statement:
4522632Sstever@eecs.umich.edu
4532632Sstever@eecs.umich.edudef p_statement(t):
4542632Sstever@eecs.umich.edu    '''
4552632Sstever@eecs.umich.edu    statement : labeled_statement
4562632Sstever@eecs.umich.edu              | expression_statement
4572632Sstever@eecs.umich.edu              | compound_statement
4582632Sstever@eecs.umich.edu              | selection_statement
4592632Sstever@eecs.umich.edu              | iteration_statement
4602632Sstever@eecs.umich.edu              | jump_statement
4612632Sstever@eecs.umich.edu              '''
4622632Sstever@eecs.umich.edu    pass
4632632Sstever@eecs.umich.edu
4642632Sstever@eecs.umich.edu# labeled-statement:
4652632Sstever@eecs.umich.edu
4662632Sstever@eecs.umich.edudef p_labeled_statement_1(t):
4672632Sstever@eecs.umich.edu    'labeled_statement : ID COLON statement'
4682632Sstever@eecs.umich.edu    pass
4692632Sstever@eecs.umich.edu
4702632Sstever@eecs.umich.edudef p_labeled_statement_2(t):
4712632Sstever@eecs.umich.edu    'labeled_statement : CASE constant_expression COLON statement'
4722632Sstever@eecs.umich.edu    pass
4732632Sstever@eecs.umich.edu
4742632Sstever@eecs.umich.edudef p_labeled_statement_3(t):
4752632Sstever@eecs.umich.edu    'labeled_statement : DEFAULT COLON statement'
4762632Sstever@eecs.umich.edu    pass
4772632Sstever@eecs.umich.edu
4782632Sstever@eecs.umich.edu# expression-statement:
4792632Sstever@eecs.umich.edudef p_expression_statement(t):
4802632Sstever@eecs.umich.edu    'expression_statement : expression_opt SEMI'
4812632Sstever@eecs.umich.edu    pass
4822632Sstever@eecs.umich.edu
4832632Sstever@eecs.umich.edu# compound-statement:
4842632Sstever@eecs.umich.edu
4852632Sstever@eecs.umich.edudef p_compound_statement_1(t):
4862632Sstever@eecs.umich.edu    'compound_statement : LBRACE declaration_list statement_list RBRACE'
4872632Sstever@eecs.umich.edu    pass
4882632Sstever@eecs.umich.edu
4892632Sstever@eecs.umich.edudef p_compound_statement_2(t):
4902632Sstever@eecs.umich.edu    'compound_statement : LBRACE statement_list RBRACE'
4912632Sstever@eecs.umich.edu    pass
4922632Sstever@eecs.umich.edu
4932632Sstever@eecs.umich.edudef p_compound_statement_3(t):
4942632Sstever@eecs.umich.edu    'compound_statement : LBRACE declaration_list RBRACE'
4952632Sstever@eecs.umich.edu    pass
4962632Sstever@eecs.umich.edu
4972632Sstever@eecs.umich.edudef p_compound_statement_4(t):
4982632Sstever@eecs.umich.edu    'compound_statement : LBRACE RBRACE'
4992632Sstever@eecs.umich.edu    pass
5002632Sstever@eecs.umich.edu
5012632Sstever@eecs.umich.edu# statement-list:
5022632Sstever@eecs.umich.edu
5032632Sstever@eecs.umich.edudef p_statement_list_1(t):
5042632Sstever@eecs.umich.edu    'statement_list : statement'
5052632Sstever@eecs.umich.edu    pass
5062632Sstever@eecs.umich.edu
5072632Sstever@eecs.umich.edudef p_statement_list_2(t):
5082632Sstever@eecs.umich.edu    'statement_list : statement_list statement'
5092632Sstever@eecs.umich.edu    pass
5102632Sstever@eecs.umich.edu
5112632Sstever@eecs.umich.edu# selection-statement
5122632Sstever@eecs.umich.edu
5132632Sstever@eecs.umich.edudef p_selection_statement_1(t):
5142632Sstever@eecs.umich.edu    'selection_statement : IF LPAREN expression RPAREN statement'
5152632Sstever@eecs.umich.edu    pass
5162632Sstever@eecs.umich.edu
5172632Sstever@eecs.umich.edudef p_selection_statement_2(t):
5182632Sstever@eecs.umich.edu    'selection_statement : IF LPAREN expression RPAREN statement ELSE statement '
5192632Sstever@eecs.umich.edu    pass
5202632Sstever@eecs.umich.edu
5212632Sstever@eecs.umich.edudef p_selection_statement_3(t):
5222632Sstever@eecs.umich.edu    'selection_statement : SWITCH LPAREN expression RPAREN statement '
5232632Sstever@eecs.umich.edu    pass
5242632Sstever@eecs.umich.edu
5252632Sstever@eecs.umich.edu# iteration_statement:
5262632Sstever@eecs.umich.edu
5272632Sstever@eecs.umich.edudef p_iteration_statement_1(t):
5282632Sstever@eecs.umich.edu    'iteration_statement : WHILE LPAREN expression RPAREN statement'
5292632Sstever@eecs.umich.edu    pass
5302632Sstever@eecs.umich.edu
5312632Sstever@eecs.umich.edudef p_iteration_statement_2(t):
5322632Sstever@eecs.umich.edu    'iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement '
5332632Sstever@eecs.umich.edu    pass
5342632Sstever@eecs.umich.edu
5352632Sstever@eecs.umich.edudef p_iteration_statement_3(t):
5362632Sstever@eecs.umich.edu    'iteration_statement : DO statement WHILE LPAREN expression RPAREN SEMI'
5372632Sstever@eecs.umich.edu    pass
5382632Sstever@eecs.umich.edu
5392632Sstever@eecs.umich.edu# jump_statement:
5402632Sstever@eecs.umich.edu
5412632Sstever@eecs.umich.edudef p_jump_statement_1(t):
5422632Sstever@eecs.umich.edu    'jump_statement : GOTO ID SEMI'
5432632Sstever@eecs.umich.edu    pass
5442632Sstever@eecs.umich.edu
5452632Sstever@eecs.umich.edudef p_jump_statement_2(t):
5462632Sstever@eecs.umich.edu    'jump_statement : CONTINUE SEMI'
5472632Sstever@eecs.umich.edu    pass
5482632Sstever@eecs.umich.edu
5492632Sstever@eecs.umich.edudef p_jump_statement_3(t):
5502632Sstever@eecs.umich.edu    'jump_statement : BREAK SEMI'
5512632Sstever@eecs.umich.edu    pass
5522632Sstever@eecs.umich.edu
5532632Sstever@eecs.umich.edudef p_jump_statement_4(t):
5542632Sstever@eecs.umich.edu    'jump_statement : RETURN expression_opt SEMI'
5552632Sstever@eecs.umich.edu    pass
5562632Sstever@eecs.umich.edu
5572632Sstever@eecs.umich.edudef p_expression_opt_1(t):
5582632Sstever@eecs.umich.edu    'expression_opt : empty'
5592632Sstever@eecs.umich.edu    pass
5602632Sstever@eecs.umich.edu
5612632Sstever@eecs.umich.edudef p_expression_opt_2(t):
5622632Sstever@eecs.umich.edu    'expression_opt : expression'
5632632Sstever@eecs.umich.edu    pass
5642632Sstever@eecs.umich.edu
5652632Sstever@eecs.umich.edu# expression:
5662632Sstever@eecs.umich.edudef p_expression_1(t):
5672632Sstever@eecs.umich.edu    'expression : assignment_expression'
5682632Sstever@eecs.umich.edu    pass
5692632Sstever@eecs.umich.edu
5702632Sstever@eecs.umich.edudef p_expression_2(t):
5712632Sstever@eecs.umich.edu    'expression : expression COMMA assignment_expression'
5722632Sstever@eecs.umich.edu    pass
5732632Sstever@eecs.umich.edu
5742632Sstever@eecs.umich.edu# assigment_expression:
5752632Sstever@eecs.umich.edudef p_assignment_expression_1(t):
5762632Sstever@eecs.umich.edu    'assignment_expression : conditional_expression'
5772632Sstever@eecs.umich.edu    pass
5782632Sstever@eecs.umich.edu
5792632Sstever@eecs.umich.edudef p_assignment_expression_2(t):
5802632Sstever@eecs.umich.edu    'assignment_expression : unary_expression assignment_operator assignment_expression'
5812632Sstever@eecs.umich.edu    pass
5822632Sstever@eecs.umich.edu
5832632Sstever@eecs.umich.edu# assignment_operator:
5842632Sstever@eecs.umich.edudef p_assignment_operator(t):
5852632Sstever@eecs.umich.edu    '''
5862632Sstever@eecs.umich.edu    assignment_operator : EQUALS
5872632Sstever@eecs.umich.edu                        | TIMESEQUAL
5882632Sstever@eecs.umich.edu                        | DIVEQUAL
5892632Sstever@eecs.umich.edu                        | MODEQUAL
5902632Sstever@eecs.umich.edu                        | PLUSEQUAL
5912632Sstever@eecs.umich.edu                        | MINUSEQUAL
5922632Sstever@eecs.umich.edu                        | LSHIFTEQUAL
5932632Sstever@eecs.umich.edu                        | RSHIFTEQUAL
5942632Sstever@eecs.umich.edu                        | ANDEQUAL
5952632Sstever@eecs.umich.edu                        | OREQUAL
5962632Sstever@eecs.umich.edu                        | XOREQUAL
5972632Sstever@eecs.umich.edu                        '''
5982632Sstever@eecs.umich.edu    pass
5992632Sstever@eecs.umich.edu
6002632Sstever@eecs.umich.edu# conditional-expression
6012632Sstever@eecs.umich.edudef p_conditional_expression_1(t):
6022632Sstever@eecs.umich.edu    'conditional_expression : logical_or_expression'
6032632Sstever@eecs.umich.edu    pass
6042632Sstever@eecs.umich.edu
6052632Sstever@eecs.umich.edudef p_conditional_expression_2(t):
6062632Sstever@eecs.umich.edu    'conditional_expression : logical_or_expression CONDOP expression COLON conditional_expression '
6072632Sstever@eecs.umich.edu    pass
6082632Sstever@eecs.umich.edu
6092632Sstever@eecs.umich.edu# constant-expression
6102632Sstever@eecs.umich.edu
6112632Sstever@eecs.umich.edudef p_constant_expression(t):
6122632Sstever@eecs.umich.edu    'constant_expression : conditional_expression'
6132632Sstever@eecs.umich.edu    pass
6142632Sstever@eecs.umich.edu
6152632Sstever@eecs.umich.edu# logical-or-expression
6162632Sstever@eecs.umich.edu
6172632Sstever@eecs.umich.edudef p_logical_or_expression_1(t):
6182632Sstever@eecs.umich.edu    'logical_or_expression : logical_and_expression'
6192632Sstever@eecs.umich.edu    pass
6202632Sstever@eecs.umich.edu
6212632Sstever@eecs.umich.edudef p_logical_or_expression_2(t):
6222632Sstever@eecs.umich.edu    'logical_or_expression : logical_or_expression LOR logical_and_expression'
6232632Sstever@eecs.umich.edu    pass
6242632Sstever@eecs.umich.edu
6252632Sstever@eecs.umich.edu# logical-and-expression
6262632Sstever@eecs.umich.edu
6272632Sstever@eecs.umich.edudef p_logical_and_expression_1(t):
6282632Sstever@eecs.umich.edu    'logical_and_expression : inclusive_or_expression'
6292632Sstever@eecs.umich.edu    pass
6302632Sstever@eecs.umich.edu
6312632Sstever@eecs.umich.edudef p_logical_and_expression_2(t):
6322632Sstever@eecs.umich.edu    'logical_and_expression : logical_and_expression LAND inclusive_or_expression'
6332632Sstever@eecs.umich.edu    pass
6342632Sstever@eecs.umich.edu
6352632Sstever@eecs.umich.edu# inclusive-or-expression:
6362632Sstever@eecs.umich.edu
6372632Sstever@eecs.umich.edudef p_inclusive_or_expression_1(t):
6382632Sstever@eecs.umich.edu    'inclusive_or_expression : exclusive_or_expression'
6392632Sstever@eecs.umich.edu    pass
6402632Sstever@eecs.umich.edu
6412632Sstever@eecs.umich.edudef p_inclusive_or_expression_2(t):
6422632Sstever@eecs.umich.edu    'inclusive_or_expression : inclusive_or_expression OR exclusive_or_expression'
6432632Sstever@eecs.umich.edu    pass
6442632Sstever@eecs.umich.edu
6452632Sstever@eecs.umich.edu# exclusive-or-expression:
6462632Sstever@eecs.umich.edu
6472632Sstever@eecs.umich.edudef p_exclusive_or_expression_1(t):
6482632Sstever@eecs.umich.edu    'exclusive_or_expression :  and_expression'
6492632Sstever@eecs.umich.edu    pass
6502632Sstever@eecs.umich.edu
6512632Sstever@eecs.umich.edudef p_exclusive_or_expression_2(t):
6522632Sstever@eecs.umich.edu    'exclusive_or_expression :  exclusive_or_expression XOR and_expression'
6532632Sstever@eecs.umich.edu    pass
6542632Sstever@eecs.umich.edu
6552632Sstever@eecs.umich.edu# AND-expression
6562632Sstever@eecs.umich.edu
6572632Sstever@eecs.umich.edudef p_and_expression_1(t):
6582632Sstever@eecs.umich.edu    'and_expression : equality_expression'
6592632Sstever@eecs.umich.edu    pass
6602632Sstever@eecs.umich.edu
6612632Sstever@eecs.umich.edudef p_and_expression_2(t):
6622632Sstever@eecs.umich.edu    'and_expression : and_expression AND equality_expression'
6632632Sstever@eecs.umich.edu    pass
6642632Sstever@eecs.umich.edu
6652632Sstever@eecs.umich.edu
6662632Sstever@eecs.umich.edu# equality-expression:
6672632Sstever@eecs.umich.edudef p_equality_expression_1(t):
6682632Sstever@eecs.umich.edu    'equality_expression : relational_expression'
6692632Sstever@eecs.umich.edu    pass
6702632Sstever@eecs.umich.edu
6712632Sstever@eecs.umich.edudef p_equality_expression_2(t):
6722632Sstever@eecs.umich.edu    'equality_expression : equality_expression EQ relational_expression'
6732632Sstever@eecs.umich.edu    pass
6742632Sstever@eecs.umich.edu
6752632Sstever@eecs.umich.edudef p_equality_expression_3(t):
6762632Sstever@eecs.umich.edu    'equality_expression : equality_expression NE relational_expression'
6772632Sstever@eecs.umich.edu    pass
6782632Sstever@eecs.umich.edu
6792632Sstever@eecs.umich.edu
6802632Sstever@eecs.umich.edu# relational-expression:
6812632Sstever@eecs.umich.edudef p_relational_expression_1(t):
6822632Sstever@eecs.umich.edu    'relational_expression : shift_expression'
6832632Sstever@eecs.umich.edu    pass
6842632Sstever@eecs.umich.edu
6852632Sstever@eecs.umich.edudef p_relational_expression_2(t):
6862632Sstever@eecs.umich.edu    'relational_expression : relational_expression LT shift_expression'
6872632Sstever@eecs.umich.edu    pass
6882632Sstever@eecs.umich.edu
6892632Sstever@eecs.umich.edudef p_relational_expression_3(t):
6902632Sstever@eecs.umich.edu    'relational_expression : relational_expression GT shift_expression'
6912632Sstever@eecs.umich.edu    pass
6922632Sstever@eecs.umich.edu
6932632Sstever@eecs.umich.edudef p_relational_expression_4(t):
6942632Sstever@eecs.umich.edu    'relational_expression : relational_expression LE shift_expression'
6952632Sstever@eecs.umich.edu    pass
6962632Sstever@eecs.umich.edu
6972632Sstever@eecs.umich.edudef p_relational_expression_5(t):
6982632Sstever@eecs.umich.edu    'relational_expression : relational_expression GE shift_expression'
6992632Sstever@eecs.umich.edu    pass
7002632Sstever@eecs.umich.edu
7012632Sstever@eecs.umich.edu# shift-expression
7022632Sstever@eecs.umich.edu
7032632Sstever@eecs.umich.edudef p_shift_expression_1(t):
7042632Sstever@eecs.umich.edu    'shift_expression : additive_expression'
7052632Sstever@eecs.umich.edu    pass
7062632Sstever@eecs.umich.edu
7072632Sstever@eecs.umich.edudef p_shift_expression_2(t):
7082632Sstever@eecs.umich.edu    'shift_expression : shift_expression LSHIFT additive_expression'
7092632Sstever@eecs.umich.edu    pass
7102632Sstever@eecs.umich.edu
7112632Sstever@eecs.umich.edudef p_shift_expression_3(t):
7122632Sstever@eecs.umich.edu    'shift_expression : shift_expression RSHIFT additive_expression'
7132632Sstever@eecs.umich.edu    pass
7142632Sstever@eecs.umich.edu
7152632Sstever@eecs.umich.edu# additive-expression
7162632Sstever@eecs.umich.edu
7172632Sstever@eecs.umich.edudef p_additive_expression_1(t):
7182632Sstever@eecs.umich.edu    'additive_expression : multiplicative_expression'
7192632Sstever@eecs.umich.edu    pass
7202632Sstever@eecs.umich.edu
7212632Sstever@eecs.umich.edudef p_additive_expression_2(t):
7222632Sstever@eecs.umich.edu    'additive_expression : additive_expression PLUS multiplicative_expression'
7232632Sstever@eecs.umich.edu    pass
7242632Sstever@eecs.umich.edu
7252632Sstever@eecs.umich.edudef p_additive_expression_3(t):
7262632Sstever@eecs.umich.edu    'additive_expression : additive_expression MINUS multiplicative_expression'
7272632Sstever@eecs.umich.edu    pass
7282632Sstever@eecs.umich.edu
7292632Sstever@eecs.umich.edu# multiplicative-expression
7302632Sstever@eecs.umich.edu
7312632Sstever@eecs.umich.edudef p_multiplicative_expression_1(t):
7322632Sstever@eecs.umich.edu    'multiplicative_expression : cast_expression'
7332632Sstever@eecs.umich.edu    pass
7342632Sstever@eecs.umich.edu
7352632Sstever@eecs.umich.edudef p_multiplicative_expression_2(t):
7362632Sstever@eecs.umich.edu    'multiplicative_expression : multiplicative_expression TIMES cast_expression'
7372632Sstever@eecs.umich.edu    pass
7382632Sstever@eecs.umich.edu
7392632Sstever@eecs.umich.edudef p_multiplicative_expression_3(t):
7402632Sstever@eecs.umich.edu    'multiplicative_expression : multiplicative_expression DIVIDE cast_expression'
7412632Sstever@eecs.umich.edu    pass
7422632Sstever@eecs.umich.edu
7432632Sstever@eecs.umich.edudef p_multiplicative_expression_4(t):
7442632Sstever@eecs.umich.edu    'multiplicative_expression : multiplicative_expression MOD cast_expression'
7452632Sstever@eecs.umich.edu    pass
7462632Sstever@eecs.umich.edu
7472632Sstever@eecs.umich.edu# cast-expression:
7482632Sstever@eecs.umich.edu
7492632Sstever@eecs.umich.edudef p_cast_expression_1(t):
7502632Sstever@eecs.umich.edu    'cast_expression : unary_expression'
7512632Sstever@eecs.umich.edu    pass
7522632Sstever@eecs.umich.edu
7532632Sstever@eecs.umich.edudef p_cast_expression_2(t):
7542632Sstever@eecs.umich.edu    'cast_expression : LPAREN type_name RPAREN cast_expression'
7552632Sstever@eecs.umich.edu    pass
7562632Sstever@eecs.umich.edu
7572632Sstever@eecs.umich.edu# unary-expression:
7582632Sstever@eecs.umich.edudef p_unary_expression_1(t):
7592632Sstever@eecs.umich.edu    'unary_expression : postfix_expression'
7602632Sstever@eecs.umich.edu    pass
7612632Sstever@eecs.umich.edu
7622632Sstever@eecs.umich.edudef p_unary_expression_2(t):
7632632Sstever@eecs.umich.edu    'unary_expression : PLUSPLUS unary_expression'
7642632Sstever@eecs.umich.edu    pass
7652632Sstever@eecs.umich.edu
7662632Sstever@eecs.umich.edudef p_unary_expression_3(t):
7672632Sstever@eecs.umich.edu    'unary_expression : MINUSMINUS unary_expression'
7682632Sstever@eecs.umich.edu    pass
7692632Sstever@eecs.umich.edu
7702632Sstever@eecs.umich.edudef p_unary_expression_4(t):
7712632Sstever@eecs.umich.edu    'unary_expression : unary_operator cast_expression'
7722632Sstever@eecs.umich.edu    pass
7732632Sstever@eecs.umich.edu
7742632Sstever@eecs.umich.edudef p_unary_expression_5(t):
7752632Sstever@eecs.umich.edu    'unary_expression : SIZEOF unary_expression'
7762632Sstever@eecs.umich.edu    pass
7772632Sstever@eecs.umich.edu
7782632Sstever@eecs.umich.edudef p_unary_expression_6(t):
7792632Sstever@eecs.umich.edu    'unary_expression : SIZEOF LPAREN type_name RPAREN'
7802632Sstever@eecs.umich.edu    pass
7816498Snate@binkert.org
7822632Sstever@eecs.umich.edu#unary-operator
7832632Sstever@eecs.umich.edudef p_unary_operator(t):
7842632Sstever@eecs.umich.edu    '''unary_operator : AND
7852632Sstever@eecs.umich.edu                    | TIMES
7866498Snate@binkert.org                    | PLUS
7872632Sstever@eecs.umich.edu                    | MINUS
7882632Sstever@eecs.umich.edu                    | NOT
7892632Sstever@eecs.umich.edu                    | LNOT '''
7902632Sstever@eecs.umich.edu    pass
7912632Sstever@eecs.umich.edu
7922632Sstever@eecs.umich.edu# postfix-expression:
7932632Sstever@eecs.umich.edudef p_postfix_expression_1(t):
7942632Sstever@eecs.umich.edu    'postfix_expression : primary_expression'
7952632Sstever@eecs.umich.edu    pass
7962632Sstever@eecs.umich.edu
7972632Sstever@eecs.umich.edudef p_postfix_expression_2(t):
7982632Sstever@eecs.umich.edu    'postfix_expression : postfix_expression LBRACKET expression RBRACKET'
7992632Sstever@eecs.umich.edu    pass
8002632Sstever@eecs.umich.edu
8012632Sstever@eecs.umich.edudef p_postfix_expression_3(t):
8022632Sstever@eecs.umich.edu    'postfix_expression : postfix_expression LPAREN argument_expression_list RPAREN'
8032632Sstever@eecs.umich.edu    pass
8042632Sstever@eecs.umich.edu
8052632Sstever@eecs.umich.edudef p_postfix_expression_4(t):
8062632Sstever@eecs.umich.edu    'postfix_expression : postfix_expression LPAREN RPAREN'
8072632Sstever@eecs.umich.edu    pass
8082632Sstever@eecs.umich.edu
8092632Sstever@eecs.umich.edudef p_postfix_expression_5(t):
8102632Sstever@eecs.umich.edu    'postfix_expression : postfix_expression PERIOD ID'
8112632Sstever@eecs.umich.edu    pass
8122632Sstever@eecs.umich.edu
8132632Sstever@eecs.umich.edudef p_postfix_expression_6(t):
8142632Sstever@eecs.umich.edu    'postfix_expression : postfix_expression ARROW ID'
8152632Sstever@eecs.umich.edu    pass
8162632Sstever@eecs.umich.edu
8172632Sstever@eecs.umich.edudef p_postfix_expression_7(t):
8182632Sstever@eecs.umich.edu    'postfix_expression : postfix_expression PLUSPLUS'
8192632Sstever@eecs.umich.edu    pass
8202632Sstever@eecs.umich.edu
8212632Sstever@eecs.umich.edudef p_postfix_expression_8(t):
8222632Sstever@eecs.umich.edu    'postfix_expression : postfix_expression MINUSMINUS'
8232632Sstever@eecs.umich.edu    pass
8242632Sstever@eecs.umich.edu
8252632Sstever@eecs.umich.edu# primary-expression:
8262632Sstever@eecs.umich.edudef p_primary_expression(t):
8272632Sstever@eecs.umich.edu    '''primary_expression :  ID
8282632Sstever@eecs.umich.edu                        |  constant
8292632Sstever@eecs.umich.edu                        |  SCONST
8302632Sstever@eecs.umich.edu                        |  LPAREN expression RPAREN'''
8312632Sstever@eecs.umich.edu    pass
8322632Sstever@eecs.umich.edu
8332632Sstever@eecs.umich.edu# argument-expression-list:
8342632Sstever@eecs.umich.edudef p_argument_expression_list(t):
8352632Sstever@eecs.umich.edu    '''argument_expression_list :  assignment_expression
8362632Sstever@eecs.umich.edu                              |  argument_expression_list COMMA assignment_expression'''
8372632Sstever@eecs.umich.edu    pass
8382632Sstever@eecs.umich.edu
8392632Sstever@eecs.umich.edu# constant:
8406498Snate@binkert.orgdef p_constant(t):
8412632Sstever@eecs.umich.edu   '''constant : ICONST
8422632Sstever@eecs.umich.edu              | FCONST
8432632Sstever@eecs.umich.edu              | CCONST'''
8442632Sstever@eecs.umich.edu   pass
8452632Sstever@eecs.umich.edu
8462632Sstever@eecs.umich.edu
8472632Sstever@eecs.umich.edudef p_empty(t):
8482632Sstever@eecs.umich.edu    'empty : '
8492632Sstever@eecs.umich.edu    pass
8502632Sstever@eecs.umich.edu
8512632Sstever@eecs.umich.edudef p_error(t):
8526498Snate@binkert.org    print("Whoa. We're hosed")
8532632Sstever@eecs.umich.edu
8542632Sstever@eecs.umich.eduimport profile
8552632Sstever@eecs.umich.edu# Build the grammar
8562632Sstever@eecs.umich.edu
8574479Sbinkertn@umich.eduyacc.yacc(method='LALR')
8582632Sstever@eecs.umich.edu
8594479Sbinkertn@umich.edu#profile.run("yacc.yacc(method='LALR')")
8602632Sstever@eecs.umich.edu
8612632Sstever@eecs.umich.edu
8624479Sbinkertn@umich.edu
8634479Sbinkertn@umich.edu
864