欢迎来到天天文库
浏览记录
ID:37917330
大小:258.50 KB
页数:17页
时间:2019-06-02
《编译原理实验报告:实验二编写递归下降语法分析程序》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、WORD格式-专业学习资料-可编辑编译原理实验报告实验名称:实验二编写递归下降语法分析器实验类型:验证型实验指导教师:何中胜专业班级:13软件四姓名:丁越学号:13030504电子邮箱:862245792@qq.com实验地点:秋白楼B720实验成绩:--学习资料分享----WORD格式-专业学习资料-可编辑日期:2016年4月1日--学习资料分享----WORD格式-专业学习资料-可编辑一、实验目的通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语
2、法分析方法。通过本实验,应达到以下目标:1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。2、掌握词法分析的实现方法。3、上机调试编出的语法分析程序。二、实验过程1、分析对象分析算术表达式的BNF定义如下:〈算术表达式〉→〈项〉
3、〈算术表达式〉+〈项〉
4、〈算术表达式〉-〈项〉〈项〉→〈因式〉
5、〈项〉*〈因式〉
6、〈项〉/〈因式〉〈因式〉→〈变量〉│(〈算术表达式〉)〈变量〉→i--学习资料分享----WORD格式-专业学习资料-可编辑用符号表示如下:E→T
7、E+T
8、E-T--学习资料分享--
9、--WORD格式-专业学习资料-可编辑T→F
10、T*F
11、T/F--学习资料分享----WORD格式-专业学习资料-可编辑F→i│(E)递归下降分析程序实现思想简单易懂。程序结构和语法产生式有直接的对应关系。因为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号时,调用该非终结符号对应的子程序来完成。自上向下分析过程中,如果带回溯,则分析过程是穷
12、举所有可能的推导,看是否能推导出待检查的符号串。分析速度慢。而无回溯的自上向下分析技术,当选择某非终结符的产生时,可根据输入串的当前符号以及各产生式右部首符号而进行,效率高,且不易出错。无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。无左递归:既没有直接左递归,也没有间接左递归。无回溯:对于任一非终结符号U的产生式右部x1
13、x2
14、,
15、xn,其对应的字的首终结符号两两不相交。--学习资料分享----WORD格式-专业学习资料-可编辑2.递归下降语法分析流程图实验分为五个模块,分别是:E()函数,E1()函
16、数,T()函数,T1()函数,F()函数。用递归下降算法分析上述算术表达式的框图,如下图所示。ZC过程为总控程序。--学习资料分享----WORD格式-专业学习资料-可编辑图1-1ZC过程--学习资料分享----WORD格式-专业学习资料-可编辑图1-2E过程--学习资料分享----WORD格式-专业学习资料-可编辑图1-3T过程--学习资料分享----WORD格式-专业学习资料-可编辑图1-4F过程--学习资料分享----WORD格式-专业学习资料-可编辑图1-5函数过程SYM图1-6函数过程Advance三、实
17、验结果1.测试数据测试数据时输入要测试的串并以#结束数据共分为2组,分别如下:第一组数据i+i*i#第二组数据I**#2.测试结果测试结果如下图所示:--学习资料分享----WORD格式-专业学习资料-可编辑第一组数据图1-7测试结果1第二组数据--学习资料分享----WORD格式-专业学习资料-可编辑图1-8测试结果2--学习资料分享----WORD格式-专业学习资料-可编辑四、讨论与分析本次试验分为5个大步骤:ZC过程:开始,然后打印“INPUTEXPRESSION”,输入字符串ST,执行E过程,然后判断S
18、YM是否不等于#或者TZ是否等于1,如果是,打印“ERRORAGAIN”,给TZ赋值为0,跳回到开始步骤继续;如果不是则打印“RIGHTAGAIN”,回到开始步骤继续。E过程:开始,执行T过程,判断SYM是否等于“+”或“—”,如果不是,返回,如--学习资料分享----WORD格式-专业学习资料-可编辑果是,执行ADVANCE,跳回到开始步骤。--学习资料分享----WORD格式-专业学习资料-可编辑T过程:开始,执行F过程,判断SYM是否等于“*”或者“/”,如果不是,返回,如--学习资料分享----W
19、ORD格式-专业学习资料-可编辑果是,执行ADVANCE,在跳回到开始过程。--学习资料分享----WORD格式-专业学习资料-可编辑F过程:开始,判断SYM是否不等于“A”或者SYM是否小于Z,如果不是,执行ADVACE,然后执行返回,如果不是,再判断SYM是否不等于“(”,如果是,打印“ERROR”,TZ赋值--学习资料分享----WORD格式-专业学
此文档下载收益归作者所有