广工编译原理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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() {