广工编译原理实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

<<编译原理>>

课内实验报告

项目名称 PL/0编译器

学院____ 计算机学院_______专业_ _

年级班别________

学号 _

学生姓名_______ ___

辅导教师_______

成绩_______ _______

目录

一、课内实验的内容------------------------------------------4

二、实验修改部分--------------------------------------------4

三、概述-------------------------------------------------11

四、结构设计说明-------------------------------------------11

五、各功能模块描述-----------------------------------------14

六、主要成份描述------------------------------------------14

七、测试用例----------------------------------------------16

八、开发过程和完成情况--------------------------------------21

一、课内实验的内容

对PL/0作以下修改扩充:

(1)增加单词:保留字 ELSE,FOR, STEP,RETURN

运算符 +=,-=,++,--,&,|,~

(2)修改单词:不等号# 改为 <>

(3)增加条件语句的ELSE子句

二、实验修改部分:

1、增加四个保留字和七个运算符,共十一个单词。

修改部分:#define symnum 43 //保留字从32增加到43个

2、增加五个保留字:ELSE,FOR,STEP,RETURN

○1头文件pl0.h

enum symbol { 新增加单词: elsesym, forsym, stepsym,returnsym, pluseq/* += */,plusone/* ++ */,plus/* + */,minuseq/* -= */,minusone/* -- */,minus/* - */,and,or,not}

○2头文件pl0.h

#define norw 24 //关键字从13增加到24个

○3PL0.cpp

init();

新增加:(增加后数组的内容要再次根据字母顺序重新排列)

strcpy(&(word[0][0]),"begin");

strcpy(&(word[1][0]),"call");

strcpy(&(word[2][0]),"const");

strcpy(&(word[3][0]),"do");

strcpy(&(word[4][0]),"else"); /*增加单词:保留字else*/

strcpy(&(word[5][0]),"end");

strcpy(&(word[6][0]),"for"); /*增加单词:保留字 for*/

strcpy(&(word[7][0]),"if");

strcpy(&(word[8][0]),"odd");

strcpy(&(word[9][0]),"procedure");

strcpy(&(word[10][0]),"read");

strcpy(&(word[11][0]),"return");/*增加单词:保留字 return*/

strcpy(&(word[12][0]),"step"); /*增加单词:保留字step*/

strcpy(&(word[13][0]),"then");

strcpy(&(word[14][0]),"while");

strcpy(&(word[15][0]),"write");

wsym[0]=beginsym;

wsym[1]=callsym;

wsym[2]=constsym;

wsym[3]=dosym;

wsym[4]=elsesym; /*else*/

wsym[5]=endsym;

wsym[6]=forsym; /*for*/

wsym[7]=ifsym;

wsym[8]=oddsym;

wsym[9]=procsym;

wsym[10]=readsym;

wsym[11]=returnsym; /*return*/

wsym[12]=stepsym; /*step*/

wsym[13]=thensym;

wsym[14]=whilesym;

wsym[15]=writesym;

3、增加四个运算符:+=,-=,++,-- ,∧,∨,┓

PL0.cpp

getsym();

增加对+,-,++,--,+=,-=的识别;

Statement();

增加对+,-,++,--,-=的语句的处理;

○1Init()中改动:

ssym[‘&’]=and;

ssym[‘|’]=or;

ssym[‘~’]=not;

facbegsys[plusone]=true; // 添加前自加运算

facbegsys[minusone]=true;// 添加前自减运算

○2Getsym()增加的内容:

int getsym() {

相关文档
最新文档