已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理实验报告学 院 专 业 班 级 学 号 姓 名 指导教师 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, 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 /*关键字个数数由初始值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(&(word70),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);/*设置保留字符号*/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; /*增加保留字符号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;else if(ch=-) sym=minusminus; /构成-号getchdo;else sym=minus; /*结束*/四、 心得体会熟悉了PL0的词法分析,了解了程序头文件和初始化函数“init()”的原理和功能,需要知道程序查找时用到了折半查找法,所以添加单词时注意按字典序的方式插入单词。 学院 专业 班 组、学号 姓名 协作者_ 教师评定_实验题目 修改单词 一、 实验目的与要求在分析理解一个教学型编译程序(如PL/0)的基础上,进一步对词法分析程序理解,扩充。二、 实验内容修改单词:不等号# 改为 三、 设计方法因为不为单字符,不能被识别,故去掉原先单字符#的设置部分: /ssym#=neq; 需要在getsym()部分增加不等号语法判断:if(ch=) /*检测小于或小于等于符号*/getchdo;if(ch=) /小于号后不是跟着等号sym=leq; /构成小于等于号 ) /小于号后面跟着大于号 sym=neq; /构成不等号 getchdo;else sym=lss; /小于号 四、 心得体会进一步理解词法分析程序,了解了GetSym()是如何分析单词,仿照前面=符号写法可以实现不等号的语法分析。 学院 专业 班 组、学号 姓名 协作者_ 教师评定_实验题目 增加条件语句的ELSE子句 一、 实验目的与要求在前两个实验的基础上,实现ELSE语句的语法语义扩充。二、 实验内容增加条件语句的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*/cod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院科室运营管理与医疗质量改进方案
- 周口科技公司招聘流程及常见问题全解析
- 呼叫中心客服沟通技巧
- 广州公司内部制度及文件管理规范
- 家庭收纳技巧打造整洁舒适空间
- 教育信息化建设方案与智慧校园打造
- 2025贵州康体旅投发展有限公司项目运营部营销经理岗对外招聘1人笔试历年参考题库附带答案详解
- 2025福建三明建宁县县属国有企业招聘正式职工24人笔试历年参考题库附带答案详解
- 2025浙江绍兴越城黄酒小镇旅游开发有限公司编外人员第二次招聘总笔试历年参考题库附带答案详解
- 2025河北秦皇岛市市政设计院有限公司选聘高级专业技术人员拟聘用人员笔试历年参考题库附带答案详解
- 食品安全事故调查报告撰写
- 十大元帅朱德的小故事
- 药物的杂质检查 干燥失重测定法 (药物分析课件)
- DB37T 3866-2020健身场地防护缓冲垫通用技术要求
- 第十章 问题解决与创造性
- 表主要施工机械
- 药物外渗和渗出的预防和处理肖
- 主板规格书-薄板itx-m19ver1.1说明书
- 招标答疑回复函模板
- 中国口腔CBCT简介、CBCT应用领域及市场规模分析
- 二战英文介绍
评论
0/150
提交评论