编译原理实验报告(增加单词修改单词增加条件语句的else子句)

上传人:自*** 文档编号:79613626 上传时间:2019-02-17 格式:DOC 页数:7 大小:300.50KB
返回 下载 相关 举报
编译原理实验报告(增加单词修改单词增加条件语句的else子句)_第1页
第1页 / 共7页
编译原理实验报告(增加单词修改单词增加条件语句的else子句)_第2页
第2页 / 共7页
编译原理实验报告(增加单词修改单词增加条件语句的else子句)_第3页
第3页 / 共7页
编译原理实验报告(增加单词修改单词增加条件语句的else子句)_第4页
第4页 / 共7页
编译原理实验报告(增加单词修改单词增加条件语句的else子句)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《编译原理实验报告(增加单词修改单词增加条件语句的else子句)》由会员分享,可在线阅读,更多相关《编译原理实验报告(增加单词修改单词增加条件语句的else子句)(7页珍藏版)》请在金锄头文库上搜索。

1、编译原理实验报告学 院 专 业 班 级 学 号 姓 名 指导教师 2011 年1 月 8 日 学院 专业 班 组、学号 姓名 协作者_ 教师评定_实验题目 增加单词 一、 实验目的与要求在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序。二、 实验内容增加单词:保留字 ELSE,FOR,TO,DOWNTO,RETURN运算符 += -= + - 三、 设计方法1、首先修改头文件“pl0.h”:enum symbol nul, ident, number,plus, minus, times, slash, oddsym,eql, neq, lss, leq, gtr, geq

2、, lparen, rparen, comma, semicolon,period, becomes, beginsym, endsym, ifsym,thensym, whilesym, writesym, readsym, dosym,callsym, constsym, varsym, procsym, elsesym, forsym, tosym, downtosym, returnsym, pluseql, minuseql, plusplus,minusminus, /*符号枚举体增加5个关键字4个运算符,用黑体字标注*/; # define norw 18 /*关键字个数数由初始

3、值13增加至18 */ #define symnum 41 /*符号数初始值由32增加至41 */ 2、接着修改源程序“PL0.cpp”:/*设置保留字名字,按照字母顺序,便于折半查找*/strcpy(&(word00),begin);strcpy(&(word10),call);strcpy(&(word20),const);strcpy(&(word30),do);strcpy(&(word40),downto); /*增加保留字DOWNTO*/strcpy(&(word50),else); /*增加保留字ELSE*/strcpy(&(word60),end);strcpy(&(word7

4、0),for); /*增加保留字FOR*/strcpy(&(word80),if);strcpy(&(word90),odd);strcpy(&(word100),procedure);strcpy(&(word110),read);strcpy(&(word120),return); /*增加保留字RETURN*/strcpy(&(word130),then);strcpy(&(word140),to); /*增加保留字TO*/strcpy(&(word150),var);strcpy(&(word160),while);strcpy(&(word170),write);/*设置保留字符号*

5、/wsym0=beginsym;wsym1=callsym;wsym2=constsym;wsym3=dosym;wsym4=downtosym; /*增加保留字符号downtosym*/wsym5=elsesym; /*增加保留字符号elsesym*/wsym6=endsym;wsym7=forsym; /*增加保留字符号forsym*/wsym8=ifsym;wsym9=oddsym;wsym10=procsym;wsym11=readsym;wsym12=returnsym; /*增加保留字符号returnsym*/wsym13=thensym;wsym14=tosym; /*增加保留字

6、符号tosym*/wsym15=varsym;wsym16=whilesym;wsym17=writesym;在语法分析函数 getsym()添加+ - += -=的符号分析:/* 增加检测+和+=符号 */ else if(ch=+) getchdo;if(ch=) sym=pluseql; /构成+=号getchdo;else if(ch=+) sym=plusplus; /构成+号getchdo;else sym=plus; /*结束*/ /* 增加检测-和-=符号 */ else if(ch=-) getchdo;if(ch=) sym=minuseql; /构成-=号getchdo;

7、else if(ch=-) sym=minusminus; /构成-号getchdo;else sym=minus; /*结束*/四、 心得体会熟悉了PL0的词法分析,了解了程序头文件和初始化函数“init()”的原理和功能,需要知道程序查找时用到了折半查找法,所以添加单词时注意按字典序的方式插入单词。 学院 专业 班 组、学号 姓名 协作者_ 教师评定_实验题目 修改单词 一、 实验目的与要求在分析理解一个教学型编译程序(如PL/0)的基础上,进一步对词法分析程序理解,扩充。二、 实验内容修改单词:不等号# 改为 三、 设计方法因为不为单字符,不能被识别,故去掉原先单字符#的设置部分: /s

8、sym#=neq; 需要在getsym()部分增加不等号语法判断:if(ch=) /*检测小于或小于等于符号*/getchdo;if(ch=) /小于号后不是跟着等号sym=leq; /构成小于等于号 ) /小于号后面跟着大于号 sym=neq; /构成不等号 getchdo;else sym=lss; /小于号 四、 心得体会进一步理解词法分析程序,了解了GetSym()是如何分析单词,仿照前面=符号写法可以实现不等号的语法分析。 学院 专业 班 组、学号 姓名 协作者_ 教师评定_实验题目 增加条件语句的ELSE子句 一、 实验目的与要求在前两个实验的基础上,实现ELSE语句的语法语义扩充

9、。二、 实验内容增加条件语句的ELSE子句三、 设计方法 修改IF THEN ELSE条件语句句法分析流程图: 在 int statement(bool* fsys,int * ptx,int lev) 函数增加else语法判断代码: if(sym=elsesym) /*than语句后面发现else*/ getsymdo;cx2=cx; codecx1.a=cx+1; /*cx为当前的指令地址,cx+1即为then语句执 行后的else语句的位置,回填地址*/gendo(jmp,0,0); statementdo(fsys,ptx,lev); codecx2.a=cx; /*经statement处理后,cx为else后语句执行完的位置,它正是前面未定的跳转地址,回填地址*/else /*than语句后面没有发现else*/codecx1.a=cx;/*经statement处理后,cx为then后语句执行 完的位置,它正是前面未定的跳转地址*/四、 测试用例PL0程序代码段“test1.pl0” :

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

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