编译原理实验报告实验二编写递归下降语法分析程序.doc

上传人:叶*** 文档编号:36162673 上传时间:2022-08-25 格式:DOC 页数:7 大小:33.50KB
返回 下载 相关 举报
编译原理实验报告实验二编写递归下降语法分析程序.doc_第1页
第1页 / 共7页
编译原理实验报告实验二编写递归下降语法分析程序.doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《编译原理实验报告实验二编写递归下降语法分析程序.doc》由会员分享,可在线阅读,更多相关《编译原理实验报告实验二编写递归下降语法分析程序.doc(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、编译原理实验报告实验名称:实验二编写递归下降语法分析器实验类型:验证型实验指导教师:何 中 胜专业班级:13软件四姓 名:丁越学 号:电子邮箱:实验地点:秋白楼B720实验成绩: 日期:2019年 4 月 1 日一、实验目的通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分析方法。通过本实验,应达到以下目标:1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。2、掌握词法分析的实现方法。3、上机调试编出的语法分析程序。二、实验过程1、分析对象 分析算术表达式的 BNF 定义如下:算术表达式项|算术表达式

2、项|算术表达式项项因式|项*因式|项因式因式变量(算术表达式)变量i用符号表示如下: ET|ET|E-T TF|T*F|TF Fi(E)递归下降分析程序实现思想简单易懂。程序结构和语法产生式有直接的对应关系。因 为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一 个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号 时,调用该非终结符号对应的子程序来完成。自上向下分析过程中,如果带回溯,则分析过程是穷举所有可能的推导,看是否能推 导出待检查的符号串。分析速度慢。而无回溯的自

3、上向下分析技术,当选择某非终结符的 产生时,可根据输入串的当前符号以及各产生式右部首符号而进行,效率高,且不易出错。无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。 无左递归:既没有直接左递归,也没有间接左递归。无回溯:对于任一非终结符号 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

4、函数过程SYM图1-6 函数过程Advance三、 实验结果1. 测试数据测试数据时输入要测试的串并以#结束数据共分为2组,分别如下:第一组数据i+i*i#第二组数据I*#2. 测试结果测试结果如下图所示:第一组数据图1-7 测试结果1第二组数据图1-8 测试结果2四、 讨论与分析本次试验分为5个大步骤:ZC过程:开始,然后打印“INPUT EXPRESSION”,输入字符串ST,执行E过程,然后判断SYM是否不等于#或者TZ是否等于1,如果是,打印“ERROR AGAIN”,给TZ赋值为0,跳回到开始步骤继续;如果不是则打印“RIGHT AGAIN”,回到开始步骤继续。E过程:开始,执行T过

5、程,判断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的第一个字符给SY

6、M。ADVANCE:取字符串ST去除首字符后留下的字符串。五、 附录:关键代码部分如下:(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(

7、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

8、);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

9、-(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;六、实验者自评通过本次实验,我对递归下降词法分析器的结构,过程有了更进一步的了解,通过学习书本和试验原理书上的内容,对它的工作原理,具体实行步骤有了进一步的掌握。这次实验让我了解到如何设计、编制并调试递归下降语法分析程序,加深对递归下降语法分析原理的理解;熟悉了构造递归下降语法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如C语言)直接编写此法分析程序。由于本次试验是测试性试验,所以要求输出的结果是成功与否,输入一个句型,进过分析,判断它是否合法,主要内容在于其判断过程中。本次试验不光提高了自己的编程能力,同时提高了对递归下降的了解。第 7 页

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

当前位置:首页 > 应用文书 > 公文通知

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com