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