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

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

ID:47024598

大小:371.50 KB

页数:11页

时间:2019-06-28

编译原理实验报告材料实验二编写递归下降语法分析报告程序_第1页
编译原理实验报告材料实验二编写递归下降语法分析报告程序_第2页
编译原理实验报告材料实验二编写递归下降语法分析报告程序_第3页
编译原理实验报告材料实验二编写递归下降语法分析报告程序_第4页
编译原理实验报告材料实验二编写递归下降语法分析报告程序_第5页
资源描述:

《编译原理实验报告材料实验二编写递归下降语法分析报告程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

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

2、词法分析的实现方法。3、上机调试编出的语法分析程序。二、实验过程1、分析对象分析算术表达式的BNF定义如下:〈算术表达式〉→〈项〉

3、〈算术表达式〉+〈项〉

4、〈算术表达式〉-〈项〉〈项〉→〈因式〉

5、〈项〉*〈因式〉

6、〈项〉/〈因式〉〈因式〉→〈变量〉│(〈算术表达式〉)〈变量〉→i用符号表示如下:E→T

7、E+T

8、E-TT→F

9、T*F

10、T/FF→i│(E)递归下降分析程序实现思想简单易懂。程序结构和语法产生式有直接的对应关系。因为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。递归下降分析程序的实现思想

11、是:识别程序由一组子程序组成。每个子程序对应于一个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号时,调用该非终结符号对应的子程序来完成。自上向下分析过程中,如果带回溯,则分析过程是穷举所有可能的推导,看是否能推导出待检查的符号串。分析速度慢。而无回溯的自上向下分析技术,当选择某非终结符的产生时,可根据输入串的当前符号以及各产生式右部首符号而进行,效率高,且不易出错。无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。无左递归:既没有直接左递归,也没有间接左递归。无

12、回溯:对于任一非终结符号U的产生式右部x1

13、x2

14、…

15、xn,其对应的字的首终结符号两两不相交。2.递归下降语法分析流程图实验分为五个模块,分别是:E()函数,E1()函数,T()函数,T1()函数,F()函数。用递归下降算法分析上述算术表达式的框图,如下图所示。ZC过程为总控程序。实用文案标准文档图1-1ZC过程图1-2E过程实用文案标准文档图1-3T过程图1-4F过程实用文案标准文档图1-5函数过程SYM图1-6函数过程Advance三、实验结果1.测试数据测试数据时输入要测试的串并以#结束数据共分为2组,分

16、别如下:第一组数据i+i*i#第二组数据I**#2.测试结果测试结果如下图所示:实用文案标准文档第一组数据图1-7测试结果1第二组数据图1-8测试结果2四、讨论与分析本次试验分为5个大步骤:ZC过程:开始,然后打印“INPUTEXPRESSION”,输入字符串ST,执行E过程,然后判断SYM是否不等于#或者TZ是否等于1,如果是,打印“ERRORAGAIN”,给TZ赋值为0,跳回到开始步骤继续;如果不是则打印“RIGHTAGAIN”,回到开始步骤继续。E过程:开始,执行T过程,判断SYM是否等于“+”或“—”,

17、如果不是,返回,如果是,执行ADVANCE,跳回到开始步骤。T过程:开始,执行F过程,判断SYM是否等于“*”或者“/”,如果不是,返回,如果是,执行ADVANCE,在跳回到开始过程。F过程:开始,判断SYM是否不等于“A”或者SYM是否小于Z,如果不是,执行ADVACE,然后执行返回,如果不是,再判断SYM是否不等于“(”,如果是,打印“ERROR”,TZ赋值1,返回;如果不是,执行ADVANCE,在执行E过程,接着继续判断SYM是否不等于“)”,如果是,打印"ERROR",TZ赋值1,如果不是,执行ADVA

18、NCE,返回。SYM:取字符串ST的第一个字符给SYM。ADVANCE:取字符串ST去除首字符后留下的字符串。实用文案标准文档五、附录:关键代码部分如下:(E()函数和E1()函数构成E过程,T()函数和T1()函数构成T过程,F()函数构成F过程)/*E()函数*/voidE(){if(x==0){output1(i);printf("E->TE1");output(i+1);T();E1();}}/*E1()函数*/voidE1(){if(x==0){if(s[i]=='+'){output1(i);pri

19、ntf("E1->+TE1");output(i+1);advance();T();E1();}elseif(s[i]=='-'){output1(i);printf("E1->-TE1");实用文案标准文档output(i+1);advance();T();E1();}elseif(s[i]=='#'){output1(i-1);printf("E1->ε");output(i);}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。