⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cparse.py

📁 linux下基于c++的处理器仿真平台。具有处理器流水线
💻 PY
📖 第 1 页 / 共 2 页
字号:
# -----------------------------------------------------------------------------# cparse.py## Simple parser for ANSI C.  Based on the grammar in K&R, 2nd Ed.# -----------------------------------------------------------------------------import yaccimport clex# Get the token maptokens = clex.tokens# translation-unit:def p_translation_unit_1(t):    'translation_unit : external_declaration'    passdef p_translation_unit_2(t):    'translation_unit : translation_unit external_declaration'    pass# external-declaration:def p_external_declaration_1(t):    'external_declaration : function_definition'    passdef p_external_declaration_2(t):    'external_declaration : declaration'    pass# function-definition:def p_function_definition_1(t):    'function_definition : declaration_specifiers declarator declaration_list compound_statement'    passdef p_function_definition_2(t):    'function_definition : declarator declaration_list compound_statement'    passdef p_function_definition_3(t):    'function_definition : declarator compound_statement'    passdef p_function_definition_4(t):    'function_definition : declaration_specifiers declarator compound_statement'    pass# declaration:def p_declaration_1(t):    'declaration : declaration_specifiers init_declarator_list SEMI'    passdef p_declaration_2(t):    'declaration : declaration_specifiers SEMI'    pass# declaration-list:def p_declaration_list_1(t):    'declaration_list : declaration'    passdef p_declaration_list_2(t):    'declaration_list : declaration_list declaration '    pass# declaration-specifiersdef p_declaration_specifiers_1(t):    'declaration_specifiers : storage_class_specifier declaration_specifiers'    passdef p_declaration_specifiers_2(t):    'declaration_specifiers : type_specifier declaration_specifiers'    passdef p_declaration_specifiers_3(t):    'declaration_specifiers : type_qualifier declaration_specifiers'    passdef p_declaration_specifiers_4(t):    'declaration_specifiers : storage_class_specifier'    passdef p_declaration_specifiers_5(t):    'declaration_specifiers : type_specifier'    passdef p_declaration_specifiers_6(t):    'declaration_specifiers : type_qualifier'    pass# storage-class-specifierdef p_storage_class_specifier(t):    '''storage_class_specifier : AUTO                               | REGISTER                               | STATIC                               | EXTERN                               | TYPEDEF                               '''    pass# type-specifier:def p_type_specifier(t):    '''type_specifier : VOID                      | CHAR                      | SHORT                      | INT                      | LONG                      | FLOAT                      | DOUBLE                      | SIGNED                      | UNSIGNED                      | struct_or_union_specifier                      | enum_specifier                      | TYPEID                      '''    pass# type-qualifier:def p_type_qualifier(t):    '''type_qualifier : CONST                      | VOLATILE'''    pass# struct-or-union-specifierdef p_struct_or_union_specifier_1(t):    'struct_or_union_specifier : struct_or_union ID LBRACE struct_declaration_list RBRACE'    passdef p_struct_or_union_specifier_2(t):    'struct_or_union_specifier : struct_or_union LBRACE struct_declaration_list RBRACE'    passdef p_struct_or_union_specifier_3(t):    'struct_or_union_specifier : struct_or_union ID'    pass# struct-or-union:def p_struct_or_union(t):    '''struct_or_union : STRUCT                       | UNION                       '''    pass# struct-declaration-list:def p_struct_declaration_list_1(t):    'struct_declaration_list : struct_declaration'    passdef p_struct_declaration_list_2(t):    'struct_declaration_list : struct_declarator_list struct_declaration'    pass# init-declarator-list:def p_init_declarator_list_1(t):    'init_declarator_list : init_declarator'    passdef p_init_declarator_list_2(t):    'init_declarator_list : init_declarator_list COMMA init_declarator'    pass# init-declaratordef p_init_declarator_1(t):    'init_declarator : declarator'    passdef p_init_declarator_2(t):    'init_declarator : declarator EQUALS initializer'    pass# struct-declaration:def p_struct_declaration(t):    'struct_declaration : specifier_qualifier_list struct_declarator_list SEMI'    pass# specifier-qualifier-list:def p_specifier_qualifier_list_1(t):    'specifier_qualifier_list : type_specifier specifier_qualifier_list'    passdef p_specifier_qualifier_list_2(t):    'specifier_qualifier_list : type_specifier'    passdef p_specifier_qualifier_list_3(t):    'specifier_qualifier_list : type_qualifier specifier_qualifier_list'    passdef p_specifier_qualifier_list_4(t):    'specifier_qualifier_list : type_qualifier'    pass# struct-declarator-list:def p_struct_declarator_list_1(t):    'struct_declarator_list : struct_declarator'    passdef p_struct_declarator_list_2(t):    'struct_declarator_list : struct_declarator_list COMMA struct_declarator'    pass# struct-declarator:def p_struct_declarator_1(t):    'struct_declarator : declarator'    passdef p_struct_declarator_2(t):    'struct_declarator : declarator COLON constant_expression'    passdef p_struct_declarator_3(t):    'struct_declarator : COLON constant_expression'    pass# enum-specifier:def p_enum_specifier_1(t):    'enum_specifier : ENUM ID LBRACE enumerator_list RBRACE'    passdef p_enum_specifier_2(t):    'enum_specifier : ENUM LBRACE enumerator_list RBRACE'    passdef p_enum_specifier_3(t):    'enum_specifier : ENUM ID'    pass# enumerator_list:def p_enumerator_list_1(t):    'enumerator_list : enumerator'    passdef p_enumerator_list_2(t):    'enumerator_list : enumerator_list COMMA enumerator'    pass# enumerator:def p_enumerator_1(t):    'enumerator : ID'    passdef p_enumerator_2(t):    'enumerator : ID EQUALS constant_expression'    pass# declarator:def p_declarator_1(t):    'declarator : pointer direct_declarator'    passdef p_declarator_2(t):    'declarator : direct_declarator'    pass# direct-declarator:def p_direct_declarator_1(t):    'direct_declarator : ID'    passdef p_direct_declarator_2(t):    'direct_declarator : LPAREN declarator RPAREN'    passdef p_direct_declarator_3(t):    'direct_declarator : direct_declarator LBRACKET constant_expression_opt RBRACKET'    passdef p_direct_declarator_4(t):    'direct_declarator : direct_declarator LPAREN parameter_type_list RPAREN '    passdef p_direct_declarator_5(t):    'direct_declarator : direct_declarator LPAREN identifier_list RPAREN '    passdef p_direct_declarator_6(t):    'direct_declarator : direct_declarator LPAREN RPAREN '    pass# pointer:def p_pointer_1(t):    'pointer : TIMES type_qualifier_list'    passdef p_pointer_2(t):    'pointer : TIMES'    passdef p_pointer_3(t):    'pointer : TIMES type_qualifier_list pointer'    passdef p_pointer_4(t):    'pointer : TIMES pointer'    pass# type-qualifier-list:def p_type_qualifier_list_1(t):    'type_qualifier_list : type_qualifier'    passdef p_type_qualifier_list_2(t):    'type_qualifier_list : type_qualifier_list type_qualifier'    pass# parameter-type-list:def p_parameter_type_list_1(t):    'parameter_type_list : parameter_list'    passdef p_parameter_type_list_2(t):    'parameter_type_list : parameter_list COMMA ELLIPSIS'    pass# parameter-list:def p_parameter_list_1(t):    'parameter_list : parameter_declaration'    passdef p_parameter_list_2(t):    'parameter_list : parameter_list COMMA parameter_declaration'    pass# parameter-declaration:def p_parameter_declaration_1(t):    'parameter_declaration : declaration_specifiers declarator'    passdef p_parameter_declaration_2(t):    'parameter_declaration : declaration_specifiers abstract_declarator_opt'    pass# identifier-list:def p_identifier_list_1(t):    'identifier_list : ID'    passdef p_identifier_list_2(t):    'identifier_list : identifier_list COMMA ID'    pass# initializer:def p_initializer_1(t):    'initializer : assignment_expression'    passdef p_initializer_2(t):    '''initializer : LBRACE initializer_list RBRACE                   | LBRACE initializer_list COMMA RBRACE'''    pass# initializer-list:def p_initializer_list_1(t):    'initializer_list : initializer'    passdef p_initializer_list_2(t):    'initializer_list : initializer_list COMMA initializer'    pass# type-name:def p_type_name(t):    'type_name : specifier_qualifier_list abstract_declarator_opt'    passdef p_abstract_declarator_opt_1(t):    'abstract_declarator_opt : empty'    passdef p_abstract_declarator_opt_2(t):    'abstract_declarator_opt : abstract_declarator'    pass# abstract-declarator:def p_abstract_declarator_1(t):    'abstract_declarator : pointer '    passdef p_abstract_declarator_2(t):    'abstract_declarator : pointer direct_abstract_declarator'    passdef p_abstract_declarator_3(t):    'abstract_declarator : direct_abstract_declarator'    pass# direct-abstract-declarator:def p_direct_abstract_declarator_1(t):    'direct_abstract_declarator : LPAREN abstract_declarator RPAREN'    passdef p_direct_abstract_declarator_2(t):    'direct_abstract_declarator : direct_abstract_declarator LBRACKET constant_expression_opt RBRACKET'    passdef p_direct_abstract_declarator_3(t):    'direct_abstract_declarator : LBRACKET constant_expression_opt RBRACKET'    passdef p_direct_abstract_declarator_4(t):    'direct_abstract_declarator : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN'    passdef p_direct_abstract_declarator_5(t):    'direct_abstract_declarator : LPAREN parameter_type_list_opt RPAREN'    pass

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -