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

📄 gram.y

📁 編譯器的虛擬yacc工具
💻 Y
字号:
%{#include <stdio.h>#define T 3extern yylineno;%}%token PROGRAM_T INTEGER_T REAL_T OF_T VAR_T ARRAY_T%token PROCEDURE_T FUNCTION_T BEGIN_T END_T ELSE_T THEN_T DO_T%token READ_T WRITE_T IF_T WHILE_T%token ASSIGN_OP DOTDOT NOT_T%token ID NUM REAL_NUM%left REL_OP%left AND_T OR_T%left NOT_T%left '+' '-'%left '*' '/' MOD_T%%program         :       PROGRAM_T ID '('  id_list ')' ';'                        declarations                        subprograms                        compound_stmt '.'                ;id_list         :       id_list ',' ID                |       ID                ;declarations    :       declarations VAR_T id_list ':' type ';'                |                       ;type            :       standard_type                |       ARRAY_T '[' NUM DOTDOT NUM ']' OF_T standard_type                ;standard_type   :       INTEGER_T                |       REAL_T                ;subprograms     :       subprograms subprogram ';'                |       {/* empty */}                ;subprogram      :       subprogram_head declarations compound_stmt                ;subprogram_head :       FUNCTION_T ID arguments ':' standard_type ';'                |       PROCEDURE_T ID arguments ';'                ;arguments       :       '(' param_list ')'                |       {/* empty */}                ;param_list      :       param_list ';' id_list ':' type                |       id_list ':' type                ;compound_stmt   :       BEGIN_T opt_stmts END_T                ;opt_stmts       :       stmt_list                |       {/* empty */}                ;stmt_list       :       stmt                |       stmt_list ';' stmt                ;stmt            :       ID ASSIGN_OP expression                |       ID '[' expression ']' ASSIGN_OP expression                |       procedure_stmt                |       compound_stmt                |       IF_T expression THEN_T stmt ELSE_T stmt                |       WHILE_T expression DO_T stmt                |       READ_T '(' variable_list ')'                |       WRITE_T '(' expression_list ')'                ;variable_list   :       variable_list ',' variable                |       variable                ;variable        :       ID                |       ID '[' expression ']'                ;procedure_stmt  :       ID                |       ID '(' expression_list ')'                ;expression_list :       expression_list ',' expression                |       expression                ;expression      :       expression REL_OP expression                |       expression '+' expression                |       expression '-' expression                |       expression '*' expression                |       expression '/' expression                |       expression MOD_T expression                |       expression AND_T expression                |       expression OR_T expression                |       NOT_T expression                |       '-' expression                |       ID                      |       ID '[' expression ']'                |       ID '(' expression_list ')'                |       NUM                |       REAL_NUM                |       '(' expression ')'                ;%%yyerror(){  printf("Syntax error line %d\n",yylineno);}

⌨️ 快捷键说明

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