• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: 编译原理  yacc  

资源简介

不知道怎么一次性上传两个文件 lex代码 在另一个下载地址http://download.csdn.net/detail/leecoding/9534587 下载后修改文件后缀为.y 编译后 运行时需要使用 < 文件名.txt 来导入文件流 (具体的文件流知识可以去搜索,如果不明白)

资源截图

代码片段和文件信息

%{
#include 
#include 
#include 
#include 
%}
%token IDENTIFIER NUM CONST VAR PROCEDURE B END ODD IF THEN CALL WHILE DO READ WRITE EQ BE SE
%left ‘+‘ ‘-‘
%left ‘*‘ ‘/‘
%%
program:part_program ‘.‘ {printf(“program -> part_program\n“);}
;

part_program:constant_illstruction var_instruction process_instruction statment{printf(“part_program -> constant_illstruction+var_instruction+process_instruction\n“);}
  |constant_illstruction var_instruction statment{printf(“part_program -> constant_illstruction+var_instruction\n“);}
  |constant_illstruction statment{printf(“part_program -> constant_illstruction\n“);}
  |constant_illstruction process_instruction statment{printf(“part_program -> constant_illstruction+process_instruction\n“);}
  |var_instruction process_instruction statment{printf(“part_program -> var_instruction+process_instruction\n“);}
  |var_instruction statment{printf(“part_program -> var_instruction\n“);}
  |process_instruction statment{printf(“part_program -> process_instruction\n“);}
  |statment{printf(“part_program -> statment\n“);}
  ;

constant_illstruction: CONST const_define ‘;‘ {printf(“constant_illstruction -> const_define\n“);}
   |constant_illstruction ‘‘ const_define{printf(“constant_illstruction -> constant_illstruction\n“);}
   ;
const_define:IDENTIFIER ‘=‘ NUM {printf(“const_define -> IDENTIFIER\n“);}
;
var_instruction:VAR var_mid ‘;‘{printf(“var_instruction -> IDENTIFIER\n“);}
      ;
var_mid:IDENTIFIER{printf(“var_mid -> IDENTIFIER\n“);}
|IDENTIFIER ‘‘ var_mid{printf(“var_mid -> var_mid \n“);}
;
process_instruction:process_head part_program ‘;‘{printf(“process_instruction -> process_head\n“);}
   |process_head part_program ‘;‘ process_instruction ‘;‘ {printf(“process_instruction -> process_head + process_instruction“);}
   ; 
process_head:PROCEDURE IDENTIFIER ‘;‘{printf(“process_head -> PROCEDURE\n“);}
;
statment:assignment {printf(“statment -> assignment\n“);}
 |condition  {printf(“statment -> condition\n“);}
 |circle {printf(“statment -> circle\n“);}
 |process_transfer {printf(“statment -> process_transfer\n“);}
 |read_statment {printf(“statment -> read_statment\n“);}
 |write_statment {printf(“

评论

共有 条评论