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

上传人:scccc 文档编号:14068382 上传时间:2022-02-01 格式:DOCX 页数:11 大小:122.37KB
返回 下载 相关 举报
编译原理实验报告算术表达式递归下降分析程序设计.docx_第1页
第1页 / 共11页
编译原理实验报告算术表达式递归下降分析程序设计.docx_第2页
第2页 / 共11页
编译原理实验报告算术表达式递归下降分析程序设计.docx_第3页
第3页 / 共11页
编译原理实验报告算术表达式递归下降分析程序设计.docx_第4页
第4页 / 共11页
编译原理实验报告算术表达式递归下降分析程序设计.docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

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

2、本原理和方法。(3)掌握相应数据结构的设计方法。二、实验内容编程实现给定算术表达式的递归下降分析器。算术表达式文法如下: E E+T | TT T*F | F F (E) | i设计说明:首先改写文法为 LL(1)文法;然后为每一个非终结符,构造相应 的递归函数, 函数的名字表示规则左部的非终结符; 函数体按规则右部符号串的 顺序编写。三、设计分析(1)消去该文法左递归,得到文法:E TE1E1 +TE1|T FT1T1 *FT1| F (E)| I(2)根据 LL( 1)文法的判断条件,计算这个文法的每个非终结符的 FIRST 集和 FOLLOW集,经验证,改后的文法已经是 LL(1)文法。

3、(3) 最后构造递归下降分析程序,每个函数名是相应的非终结符,函数体 则是根据右部符号串的结构编写。a. 当遇到非终结符时,如: +。则编写语句 if(当读来的输入符号 = +) 读下一个输入符号b. 当遇到非终结符时,例如: T。则编写语句调用 T()。c. 当遇到非终结符 规则时,例如: T 。则编写语句 if( 当前读来的输入字符不属于 FOLLOW(T) error()d. 当某个非终结符的规则有很多个候选式时。按 LL(1)文法的条件能唯一的选择一个候选式进行推导。(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();void Error();void input()puts(输入需要分析的字符串

5、(以 #键结尾) :); cina;void Scaner()sym = ai;i+;void Error()coutErrorendl;exit (0);void main()while(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 (sym!=) & (sym!=#)Error();void T()F();T1();void T1()

6、if (sym = *)Scaner();F();T1();else if (sym!=+ & sym!=) & sym!=#) Error();void F()if (sym = ()Scaner();E();if (sym = )Scaner();elseError();else if (sym =i)Scaner();elseError();五、测试用例1. 输入的字符串只含有一个字符时:输入 i#a#2输入的字符串含有 + 时: 输入 +#输入 i+#输入 i+i#3输入的字符串含有 * 时:输入 *#输入 *i#输入 *i*#输入 i*i#i*i*#3输入的字符串含有() 时:输入

7、() #(i)#4输入的字符串含有多种字符:输入 i+i*i#(i+i)*i#(i+i)*(i+i)#(i+*#FfxMtBADebugVenxiqi.exe*宀Wf的符I 文的 曰莠昔S刀串要辺串要1串要 过符需)*符需)*符需 1*男2T+i艮E) 结 键 # 串以 符 S 的符 I 文的 昊刀结 键 ? tt 串以尾 结 键# 串以符f 的符 法字 文的trq刖i比厶刖6比厶刖SIEk* 1*01*Press any key to continue实验总结此次实验, 使我掌握自上而下语法分析的要求与特点, 也更加了解递归下降语法分析的 基本原理和方法并学会相应数据结构的设计方法。 递归下降分析法简单、 直观, 易于构造程 序,但它对文法要求较高,必须是 LL(1)文法,同时递归调用较多,在编程的时候要特别 注意,函数的顺序不能打乱,函数声明要位置明确,不能乱,掌握一定的规律,使程序有条 理。在实验中也出现了一些错误和碰到了一些难题,不过在同学的帮助下基本上都解决了。 在刚开始的设计分析思路和程序设计中, 也遇到过一些问题, 一般的情况是对所学的知识还 没有完全掌握好,没有透彻理解,对所学知识不能够灵活运用,在课后需要多巩固。在以后 的日子里,需要学习的还有很多,不能懈怠。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1