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