广工编译原理实验报告

上传人:枫** 文档编号:470500086 上传时间:2024-02-23 格式:DOC 页数:12 大小:89KB
返回 下载 相关 举报
广工编译原理实验报告_第1页
第1页 / 共12页
广工编译原理实验报告_第2页
第2页 / 共12页
广工编译原理实验报告_第3页
第3页 / 共12页
广工编译原理实验报告_第4页
第4页 / 共12页
广工编译原理实验报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《广工编译原理实验报告》由会员分享,可在线阅读,更多相关《广工编译原理实验报告(12页珍藏版)》请在金锄头文库上搜索。

1、-课实验报告工程名称 PL/0编译器 学 院_ 计算机学院_专 业_ _年级班别_学 号 _学生_ _辅导教师_成 绩_ _目录一、课实验的容-4二、实验修改局部-4三、概述-11四、构造设计说明-11五、各功能模块描述-14六、主要成份描述-14七、测试用例-16八、开发过程和完成情况-21一、课实验的容对PL/0作以下修改扩大:1增加单词:保存字 ELSE,FOR,STEP,RETURN运算符 +=,-=,+,-,&,|,2修改单词:不等号# 改为 3增加条件语句的ELSE子句二、实验修改局部:1、增加四个保存字和七个运算符,共十一个单词。修改局部:#define symnum 43 /保

2、存字从32增加到43个2、增加五个保存字:ELSE,FOR,STEP,RETURN头文件pl0.henum symbol 新增加单词: elsesym, forsym, stepsym,returnsym, pluseq/* += */,plusone/* + */,plus/* + */,minuseq/* -= */,minusone/* - */,minus/* - */,and,or,not头文件pl0.h#define norw 24 /关键字从13增加到24个PL0.cppinit();新增加:增加后数组的容要再次根据字母顺序重新排列strcpy(&(word00),begin);

3、strcpy(&(word10),call);strcpy(&(word20),const);strcpy(&(word30),do);strcpy(&(word40),else); /*增加单词:保存字else*/ strcpy(&(word50),end); strcpy(&(word60),for); /*增加单词:保存字 for*/strcpy(&(word70),if); strcpy(&(word80),odd);strcpy(&(word90),procedure);strcpy(&(word100),read); strcpy(&(word110),return);/*增加单词

4、:保存字 return*/strcpy(&(word120),step); /*增加单词:保存字step*/strcpy(&(word130),then);strcpy(&(word140),while); strcpy(&(word150),write);wsym0=beginsym;wsym1=callsym;wsym2=constsym;wsym3=dosym;wsym4=elsesym; /*else*/wsym5=endsym; wsym6=forsym; /*for*/wsym7=ifsym; wsym8=oddsym;wsym9=procsym;wsym10=readsym;ws

5、ym11=returnsym; /*return*/wsym12=stepsym; /*step*/wsym13=thensym;wsym14=whilesym;wsym15=writesym;3、增加四个运算符 :+=,-=,+,-,l PL0.cppgetsym();增加对+,-,+,-,+=,-=的识别;Statement(); 增加对+,-,+,-,-=的语句的处理;Init中改动:ssym&=and;ssym|=or;ssym=not;facbegsysplusone=true; / 添加前自加运算facbegsysminusone=true;/ 添加前自减运算Getsym增加的容:

6、. z.-int getsym()int i,j,k;while( ch= |ch=10|ch=9)getchdo;if(ch=a&ch=z) k=0;doif(k=a&ch=0&ch=9);ak=0;strcpy(id,a);i=0;j=norw-1;dok=(i+j)/2;if(strcmp(id,wordk)=0)i=k+1;while(ij)sym=wsymk;elsesym=ident;elseif(ch=0&ch=0&chnmax)error(30);elseif(ch=:) /*检测赋值符号*/getchdo;if(ch=)sym=bees;getchdo;elsesym=nul

7、; /*不能识别的符号*/elseif(ch=) /*检测大于或大于等于符号*/ getchdo;if(ch=)sym=geq;getchdo;elsesym=gtr;/*这里之间为添加的容*/else if(ch=+)/*检测+,+=,+符号*/getchdo;if(ch=) sym=pluseq;getchdo;else if(ch=+) sym=plusone; getchdo;else sym=plus;else if(ch=-)/*检测-,-=,-符号*/getchdo;if(ch=)sym=minuseq;getchdo;else if(ch=-)sym=minusone;getc

8、hdo;else sym=minus;/*这里之间为添加的容*/elsesym=ssymch;/* 当符号不满足上述条件时,全部按照单字符号处理*/getchdo;/richardif(sym!=period)getchdo;/end richardreturn 0;. z.-Statement()增加的容:(将本来if(sym=bees)局部的容修改为处理+,+=,-,-=),并在Statement()中定义变量int sym2;. z.-if(sym=bees|sym=pluseq|sym=minuseq|sym=plusone|sym=minusone) sym2=sym; getsymdo;gendo(lod,lev-tablei.level,tablei.adr); else error(13); if(sym2=plusone|sym2=minusone)/* 准备按照a+、a-语句处理,与read类似*/ if(i!=0) if(sym2=plusone) gendo(lit,0,1); gendo(opr,0,2);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号