编译原理实验报告算术表达式递归下降分析程序设计

上传人:豆浆 文档编号:20510797 上传时间:2017-11-22 格式:DOC 页数:8 大小:251KB
返回 下载 相关 举报
编译原理实验报告算术表达式递归下降分析程序设计_第1页
第1页 / 共8页
编译原理实验报告算术表达式递归下降分析程序设计_第2页
第2页 / 共8页
编译原理实验报告算术表达式递归下降分析程序设计_第3页
第3页 / 共8页
编译原理实验报告算术表达式递归下降分析程序设计_第4页
第4页 / 共8页
编译原理实验报告算术表达式递归下降分析程序设计_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《编译原理实验报告算术表达式递归下降分析程序设计》由会员分享,可在线阅读,更多相关《编译原理实验报告算术表达式递归下降分析程序设计(8页珍藏版)》请在金锄头文库上搜索。

1、武 汉 工 程 大 学计算机科学与工程学院编译原理实验报告专业班级 实验地点学生学号 指导教师学生姓名 实验时间实验项目 实验二、算术表达式递归下降分析程序设计实验类别 操作性() 验证性() 设计性() 综合性( ) 其它实验目的及要求(1)掌握自上而下语法分析的要求与特点。(2)掌握递归下降语法分析的基本原理和方法。(3)掌握相应数据结构的设计方法。成 绩 评 定 表类 别 评 分 标 准 分值 得分 合 计上机表现 积极出勤、遵守纪律主动完成实验设计任务 30 分实验报告 及时递交、填写规范内容完整、体现收获 70 分说明: 评阅教师: 日 期: 实 验 内 容计算机科学与工程学院编译原

2、理实验报告 2一、 实验目的(1)掌握自上而下语法分析的要求与特点。(2)掌握递归下降语法分析的基本原理和方法。(3)掌握相应数据结构的设计方法。二、 实验内容编程实现给定算术表达式的递归下降分析器。算术表达式文法如下: EE+T | TTT*F | FF(E) | i 设计说明:首先改写文法为 LL(1)文法;然后为每一个非终结符,构造相应的递归函数,函数的名字表示规则左部的非终结符;函数体按规则右部符号串的顺序编写。三、 设计分析(1)消去该文法左递归,得到文法: ETE1E1+TE1|TFT1T1*FT1|F(E)| I(2)根据 LL(1)文法的判断条件,计算这个文法的每个非终结符的F

3、IRST 集和 FOLLOW 集,经验证,改后的文法已经是 LL(1)文法。(3)最后构造递归下降分析程序,每个函数名是相应的非终结符,函数体则是根据右部符号串的结构编写。a.当遇到非终结符时,如:+ 。则编写语句 if(当读来的输入符号 = +) 读下一个输入符号b.当遇到非终结符时,例如:T。则编写语句调用 T()。c.当遇到非终结符 规则时,例如:T。则编写语句 if(当前读来的输入字符不属于 FOLLOW(T) error()d.当某个非终结符的规则有很多个候选式时。按 LL(1)文法的条件能唯一的选择一个候选式进行推导。计算机科学与工程学院编译原理实验报告 3(4)递归下降分析法是确

4、定的自上而下分析法,基本思想是,对文法中的每个非终结符编写一个函数,每个函数的功能是识别由该非终结符所表示的语法成分。因此需要分别构造 E,E1,T,T1,F 函数来执行自己的识别功能,根据文法的内容顺序决定函数的识别功能。Scaner 函数用于字符串的推进,input 函数用于字符串的输入。四、 程序代码#include #include #include using namespace std;char a80; char sym;int i=0; void E();void E1();void T();void T1();void F();void input();void Scaner

5、();void Error();void input()puts(输入需要分析的字符串(以#键结尾):);cina;void Scaner()sym = ai;i+;void Error()coutErrorendl;exit (0);void main()计算机科学与工程学院编译原理实验报告 8while(1)input();Scaner();E();if (sym = #)printf(此字符串是该文法的字符串!n);elseprintf(Error!n);i=0;void E()T();E1();void E1()if (sym = +)Scaner();T();E1();else if

6、 (sym!=) & (sym!=#)Error();void T()F();T1();void T1()if (sym = *)Scaner();F();T1();计算机科学与工程学院编译原理实验报告 9else if (sym!=+ & sym!=) & sym!=#)Error();void F()if (sym = ()Scaner();E();if (sym = )Scaner();else Error();else if (sym =i)Scaner();elseError();五、 测试用例1. 输入的字符串只含有一个字符时:输入 i# a#2输入的字符串含有 + 时:输入 +#

7、计算机科学与工程学院编译原理实验报告 8输入 i+#输入 i+i#3输入的字符串含有 * 时:输入 *#输入 *i#输入 *i*#输入 i*i#i*i*#计算机科学与工程学院编译原理实验报告 83输入的字符串含有 () 时:输入 ()#(i)#4输入的字符串含有多种字符:输入 i+i*i#(i+i)*i#(i+i)*(i+i)#(i+*#计算机科学与工程学院编译原理实验报告 8计算机科学与工程学院编译原理实验报告 8实 验 总 结此次实验,使我掌握自上而下语法分析的要求与特点,也更加了解递归下降语法分析的基本原理和方法并学会相应数据结构的设计方法。递归下降分析法简单、直观,易于构造程序,但它对文法要求较高,必须是 LL(1)文法,同时递归调用较多,在编程的时候要特别注意,函数的顺序不能打乱,函数声明要位置明确,不能乱,掌握一定的规律,使程序有条理。在实验中也出现了一些错误和碰到了一些难题,不过在同学的帮助下基本上都解决了。在刚开始的设计分析思路和程序设计中,也遇到过一些问题,一般的情况是对所学的知识还没有完全掌握好,没有透彻理解,对所学知识不能够灵活运用,在课后需要多巩固。在以后的日子里,需要学习的还有很多,不能懈怠。

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号