




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理实验报告实验名称:实验二编写递归下降语法分析器实验类型:验证型实验指导教师:何 中 胜专业班级:13软件四姓 名:丁越学 号:13030504电子邮箱:862245792实验地点:秋白楼B720实验成绩: 日期:2016年 4 月 1 日一、实验目的通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分析方法。通过本实验,应达到以下目标:1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。2、掌握词法分析的实现方法。3、上机调试编出的语法分析程序。二、实验过程1、分析对象 分析算术表达式的 BNF 定义如下:算术表达式项|算术表达式项|算术表达式项项因式|项*因式|项因式因式变量(算术表达式)变量i用符号表示如下: ET|ET|E-T TF|T*F|TF Fi(E)递归下降分析程序实现思想简单易懂。程序结构和语法产生式有直接的对应关系。因 为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一 个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号 时,调用该非终结符号对应的子程序来完成。自上向下分析过程中,如果带回溯,则分析过程是穷举所有可能的推导,看是否能推 导出待检查的符号串。分析速度慢。而无回溯的自上向下分析技术,当选择某非终结符的 产生时,可根据输入串的当前符号以及各产生式右部首符号而进行,效率高,且不易出错。无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。 无左递归:既没有直接左递归,也没有间接左递归。无回溯:对于任一非终结符号 U 的产生式右部 x1|x2|xn,其对应的字的首终结符号 两两不相交。2. 递归下降语法分析流程图实验分为五个模块,分别是:E( )函数,E1( )函数,T( )函数,T1( )函数,F( )函数。用递归下降算法分析上述算术表达式的框图,如下图所示。ZC过程为总控程序。图1-1 ZC过程图1-2 E过程图1-3 T过程图1-4 F过程图1-5 函数过程SYM图1-6 函数过程Advance3、 实验结果1. 测试数据测试数据时输入要测试的串并以#结束数据共分为2组,分别如下:第一组数据i+i*i#第二组数据I*#2. 测试结果测试结果如下图所示:第一组数据图1-7 测试结果1第二组数据图1-8 测试结果24、 讨论与分析本次试验分为5个大步骤:ZC过程:开始,然后打印“INPUT EXPRESSION”,输入字符串ST,执行E过程,然后判断SYM是否不等于#或者TZ是否等于1,如果是,打印“ERROR AGAIN”,给TZ赋值为0,跳回到开始步骤继续;如果不是则打印“RIGHT AGAIN”,回到开始步骤继续。E过程:开始,执行T过程,判断SYM是否等于“+”或“”,如果不是,返回,如果是,执行ADVANCE,跳回到开始步骤。T过程:开始,执行F过程,判断SYM是否等于“*”或者“/”,如果不是,返回,如果是,执行ADVANCE,在跳回到开始过程。F过程:开始,判断SYM是否不等于“A”或者SYM是否小于Z,如果不是,执行ADVACE,然后执行返回,如果不是,再判断SYM是否不等于“(”,如果是,打印“ERROR”,TZ赋值1,返回;如果不是,执行ADVANCE,在执行E过程,接着继续判断SYM是否不等于“)”,如果是,打印ERROR,TZ赋值1,如果不是,执行ADVANCE,返回。SYM:取字符串ST的第一个字符给SYM。ADVANCE:取字符串ST去除首字符后留下的字符串。5、 附录:关键代码部分如下:(E()函数和E1()函数构成E过程,T()函数和T1()函数构成T过程,F()函数构成F过程)/*E()函数*/void E()if(x=0)output1(i);printf(E-TE1);output(i+1);T();E1();/*E1()函数*/void E1()if(x=0)if(si=+)output1(i);printf(E1-+TE1);output(i+1);advance();T();E1();else if(si=-)output1(i);printf(E1-TE1);output(i+1);advance();T();E1();else if(si=#)output1(i-1);printf(E1-);output(i);elseoutput1(i);printf(E1-);output(i+1);/*T()函数*/void T() if(x=0)if(si!=#)output1(i);printf(T-FT1);output(i+1);F();T1();elseoutput1(i-1);printf(T-FT1);output(i);F();T1();/*T1()函数*/void T1()if(x=0)if(si=*)output1(i);printf(T1-*FT1);output(i+1);advance();F();T1();else if(si=/)output1(i);printf(T1-/FT1);output(i+1);advance();T1();F();else if(si=#)output1(i-1);printf(T1-);output(i);elseoutput1(i);printf(T1-);output(i+1);/*F()函数*/void F()if(x=0)if(si=i)output1(i);printf(F-i);output(i+1);advance();else if(si=()output1(i);printf(F-(E);output(i+1);advance();E();if(x!=1)if(si=)output1(i);printf(F-(E);output(i+1);advance();elsex=1; else if(si=#)x=1; else if(si=) x=1;六、实验者自评通过本次实验,我对递归下降词法分析器的结构,过程有了更进一步的了解,通过学习书本和试验原理书上的内容,对它的工作原理,具体实行步骤有了进一步的掌握。这次实验让我了解到如何设计、编制并调试递归下降语法分析程序,加深对递归下降语法分析原理的理解;熟悉了构造递归下降语法分析程序的手
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中继泵站运行工节假日前安全考核试卷含答案
- 生物柴油装置操作工中秋节后复工安全考核试卷含答案
- 冷却筛分工国庆节后复工安全考核试卷含答案
- 民族弹拨乐器制作工中秋节后复工安全考核试卷含答案
- 初中英语听力提高训练教案
- 企业年度劳动保护工作计划
- 心理健康工作者岗位职责与标准
- 信息技术在英语教学中的应用
- 医疗器械合规备案及风险防控指导
- 小学乘法结合律教学活动方案
- 村干部饮水安全培训总结课件
- 安全生产治本攻坚三年行动半年工作总结
- 单招备考科学方案
- 海船船员适任 评估规范(2024)轮机专业
- DB50-T 1463.2-2023 牛羊布鲁氏菌病防控技术规范 第2部分:人员防护
- NoSQL数据库应用与实践 课件 第1-6章 认识NoSQL - 增删改查
- 《工程勘察设计收费标准》(2002年修订本)
- 掌骨骨折查房课件
- 大学食堂装饰装修方案
- 工资结清证明(模板)
- 矿山档案(台帐) 表格参照模板参考范本
评论
0/150
提交评论