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

📄 gram.y

📁 編譯器的虛擬yacc工具
💻 Y
字号:
%{#include <stdio.h>extern int lineno; %}  %token IDENTIFIER CONSTANT STRING_LITERAL SIZEOF%token PTR_OP INC_OP DEC_OP LEFT_OP RIGHT_OP LE_OP GE_OP EQ_OP NE_OP%token AND_OP OR_OP MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN%token SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN%token XOR_ASSIGN OR_ASSIGN TYPE_NAME%token TYPEDEF EXTERN STATIC AUTO REGISTER%token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID%token STRUCT UNION ENUM ELIPSIS RANGE UNDEF_PARAMS%token CASE DEFAULT IFR ELSER SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN%% new_start        : file        ; file        : external_definition        | file external_definition        ; primary_expr        : identifier        | CONSTANT        | STRING_LITERAL        | '(' expr ')'        ; postfix_expr        : primary_expr        | postfix_expr '[' expr ']'        | postfix_expr '(' ')'        | postfix_expr '(' argument_expr_list ')'        | postfix_expr '.' identifier        | postfix_expr PTR_OP identifier        | postfix_expr INC_OP        | postfix_expr DEC_OP        ; argument_expr_list        : assignment_expr        | argument_expr_list ',' assignment_expr        ; unary_expr        : postfix_expr        | INC_OP unary_expr        | DEC_OP unary_expr        | unary_operator cast_expr        | SIZEOF unary_expr        | SIZEOF '(' type_name ')'        ; unary_operator        : '&'        | '*'        | '+'        | '-'        | '~'        | '!'        ; cast_expr        : unary_expr        | '(' type_name ')' cast_expr        ; multiplicative_expr        : cast_expr        | multiplicative_expr '*' cast_expr        | multiplicative_expr '/' cast_expr        | multiplicative_expr '%' cast_expr        ; additive_expr        : multiplicative_expr        | additive_expr '+' multiplicative_expr        | additive_expr '-' multiplicative_expr        ; shift_expr        : additive_expr        | shift_expr LEFT_OP additive_expr        | shift_expr RIGHT_OP additive_expr        ; relational_expr        : shift_expr        | relational_expr '<' shift_expr        | relational_expr '>' shift_expr        | relational_expr LE_OP shift_expr        | relational_expr GE_OP shift_expr        ; equality_expr        : relational_expr        | equality_expr EQ_OP relational_expr        | equality_expr NE_OP relational_expr        ; and_expr        : equality_expr        | and_expr '&' equality_expr        ; exclusive_or_expr        : and_expr        | exclusive_or_expr '^' and_expr        ; inclusive_or_expr        : exclusive_or_expr        | inclusive_or_expr '|' exclusive_or_expr        ; logical_and_expr        : inclusive_or_expr        | logical_and_expr AND_OP inclusive_or_expr        ; logical_or_expr        : logical_and_expr        | logical_or_expr OR_OP logical_and_expr        ; conditional_expr        : logical_or_expr        | logical_or_expr '?' logical_or_expr ':' conditional_expr        ; assignment_expr        : conditional_expr        | unary_expr assignment_operator assignment_expr        ; assignment_operator        : '='        | MUL_ASSIGN        | DIV_ASSIGN        | MOD_ASSIGN        | ADD_ASSIGN        | SUB_ASSIGN        | LEFT_ASSIGN        | RIGHT_ASSIGN        | AND_ASSIGN        | XOR_ASSIGN        | OR_ASSIGN        ; expr        : assignment_expr        | expr ',' assignment_expr        ; constant_expr        : conditional_expr        ; declaration        : declaration_specifiers ';'        | declaration_specifiers init_declarator_list ';'        ; declaration_specifiers        : storage_class_specifier        | storage_class_specifier declaration_specifiers        | type_specifier        | type_specifier declaration_specifiers        ; init_declarator_list        : init_declarator        | init_declarator_list ',' init_declarator        ; init_declarator        : declarator        | declarator         '=' initializer        ; storage_class_specifier        : TYPEDEF         | EXTERN        | STATIC        | AUTO        | REGISTER        ; type_specifier        : CHAR        | SHORT        | INT        | LONG        | SIGNED        | UNSIGNED        | FLOAT        | DOUBLE        | CONST        | VOLATILE        | VOID        | struct_or_union_specifier        | enum_specifier        | TYPE_NAME        ; struct_or_union_specifier        : struct_or_union identifier '{' struct_declaration_list '}'        | struct_or_union '{' struct_declaration_list '}'        | struct_or_union identifier        ; struct_or_union        : STRUCT        | UNION        ; struct_declaration_list        : struct_declaration        | struct_declaration_list struct_declaration        ; struct_declaration        : type_specifier_list struct_declarator_list ';'        ; struct_declarator_list        : struct_declarator        | struct_declarator_list ',' struct_declarator        ; struct_declarator        : declarator        | ':' constant_expr        | declarator ':' constant_expr        ; enum_specifier        : ENUM '{' enumerator_list '}'        | ENUM identifier '{' enumerator_list '}'        | ENUM identifier        ; enumerator_list        : enumerator        | enumerator_list ',' enumerator        ; enumerator        : identifier        | identifier '=' constant_expr        ; declarator        : declarator2        | pointer declarator2        ; declarator2        : identifier        | '(' declarator ')'        | declarator2 '[' ']'        | declarator2 '[' constant_expr ']'        | declarator2 '(' ')'        | declarator2 '(' parameter_type_list ')'        | declarator2 '(' parameter_identifier_list ')'        ; pointer        : '*'        | '*' type_specifier_list        | '*' pointer        | '*' type_specifier_list pointer        ; type_specifier_list        : type_specifier        | type_specifier_list type_specifier        ; parameter_identifier_list        : identifier_list        | identifier_list ',' ELIPSIS        ; identifier_list        : identifier        | identifier_list ',' identifier        ; parameter_type_list        : parameter_list        | parameter_list ',' ELIPSIS        ; parameter_list        : parameter_declaration        | parameter_list ',' parameter_declaration        ; parameter_declaration        : type_specifier_list declarator        | type_name        ; type_name        : type_specifier_list        | type_specifier_list abstract_declarator        ; abstract_declarator        : pointer        | abstract_declarator2        | pointer abstract_declarator2        ; abstract_declarator2        : '(' abstract_declarator ')'        | '[' ']'        | '[' constant_expr ']'        | abstract_declarator2 '[' ']'        | abstract_declarator2 '[' constant_expr ']'        | '(' ')'        | '(' parameter_type_list ')'        | abstract_declarator2 '(' ')'        | abstract_declarator2 '(' parameter_type_list ')'        ; initializer        : assignment_expr        | '{' initializer_list '}'        | '{' initializer_list ',' '}'        ; initializer_list        : initializer        | initializer_list ',' initializer        ; statement        : labeled_statement        | compound_statement        | expression_statement        | selection_statement        | iteration_statement        | jump_statement        ; labeled_statement        : identifier ':' statement        | CASE constant_expr ':' statement        | DEFAULT ':' statement        ; compound_statement        : '{' '}'        | '{' statement_list '}'        | '{' declaration_list '}'        | '{' declaration_list statement_list '}'        ; declaration_list        : declaration        | declaration_list declaration        ; statement_list        : statement        | statement_list statement        ; expression_statement        : ';'        | expr ';'        ; selection_statement        : IFR '(' expr ')' statement        | IFR '(' expr ')' statement ELSER statement        | SWITCH '(' expr ')' statement        ; iteration_statement        : WHILE '(' expr ')' statement        | DO statement WHILE '(' expr ')' ';'        | FOR '(' ';' ';' ')' statement        | FOR '(' ';' ';' expr ')' statement        | FOR '(' ';' expr ';' ')' statement        | FOR '(' ';' expr ';' expr ')' statement        | FOR '(' expr ';' ';' ')' statement        | FOR '(' expr ';' ';' expr ')' statement        | FOR '(' expr ';' expr ';' ')' statement        | FOR '(' expr ';' expr ';' expr ')' statement        ; jump_statement        : GOTO identifier ';'        | CONTINUE ';'        | BREAK ';'        | RETURN ';'        | RETURN expr ';'        ; external_definition        : function_definition        | declaration        ; function_definition        : declarator function_body        | declaration_specifiers declarator function_body        ; function_body        : compound_statement        | declaration_list compound_statement        ; identifier        : IDENTIFIER        ;%% yyerror(s)char *s;{        fflush(stdout);        printf("yytextfound at line %d\n", lineno+1);}   

⌨️ 快捷键说明

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