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

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

ID:56951365

大小:251.50 KB

页数:31页

时间:2020-07-28

编译原理实验报告算术表达式递归下降分析程序设计.doc_第1页
编译原理实验报告算术表达式递归下降分析程序设计.doc_第2页
编译原理实验报告算术表达式递归下降分析程序设计.doc_第3页
编译原理实验报告算术表达式递归下降分析程序设计.doc_第4页
编译原理实验报告算术表达式递归下降分析程序设计.doc_第5页
资源描述:

《编译原理实验报告算术表达式递归下降分析程序设计.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、计算机科学与工程学院实验内容一、实验目的(1)掌握自上而下语法分析的要求与特点。(2)掌握递归下降语法分析的基本原理和方法。(3)掌握相应数据结构的设计方法。二、实验内容编程实现给定算术表达式的递归下降分析器。算术表达式文法如下:EàE+T

3、TTàT*F

4、FFà(E)

5、i设计说明:首先改写文法为LL(1)文法;然后为每一个非终结符,构造相应的递归函数,函数的名字表示规则左部的非终结符;函数体按规则右部符号串的顺序编写。三、设计分析(1)消去该文法左递归,得到文法:EàTE1E1à+TE1

6、εTàFT1T1à*FT1

7、εFà(E

8、)

9、I(2)根据LL(1)文法的判断条件,计算这个文法的每个非终结符的FIRST集和FOLLOW集,经验证,改后的文法已经是LL(1)文法。(3)最后构造递归下降分析程序,每个函数名是相应的非终结符,函数体则是根据右部符号串的结构编写。a.当遇到非终结符时,如:+。则编写语句if(当读来的输入符号==+)读下一个输入符号b.当遇到非终结符时,例如:T。则编写语句调用T()。c.当遇到非终结符àε规则时,例如:Tàε。则编写语句if(当前读来的输入字符不属于FOLLOW(T))error()d.当某个非终结符的规则有很多个候选式

10、时。按LL(1)文法的条件能唯一的选择一个候选式进行推导。(4)递归下降分析法是确定的自上而下分析法,基本思想是,对文法中的每个非终结符编写一个函数,每个函数的功能是识别由该非终结符所表示的语法成分。因此需要分别构造E,E1,T,T1,F函数来执行自己的识别功能,根据文法的内容顺序决定函数的识别功能。Scaner函数用于字符串的推进,input函数用于字符串的输入。8《编译原理》实验报告计算机科学与工程学院一、程序代码#include#include#includeus

11、ingnamespacestd;chara[80];charsym;inti=0;voidE();voidE1();voidT();voidT1();voidF();voidinput();voidScaner();voidError();voidinput(){puts("输入需要分析的字符串(以#键结尾):");cin>>a;}voidScaner(){sym=a[i];i++;}voidError(){cout<<"Error"<

12、ner();E();if(sym=='#')8《编译原理》实验报告计算机科学与工程学院printf("此字符串是该文法的字符串!");elseprintf("Error!");i=0;}}voidE(){T();E1();}voidE1(){if(sym=='+'){Scaner();T();E1();}elseif((sym!=')')&&(sym!='#'))Error();}voidT(){F();T1();}voidT1(){if(sym=='*'){Scaner();F();T1();}elseif((sym

13、!='+'&&sym!=')')&&sym!='#')Error();}voidF(){8《编译原理》实验报告计算机科学与工程学院if(sym=='('){Scaner();E();if(sym==')')Scaner();elseError();}elseif(sym=='i')Scaner();elseError();}一、测试用例1.输入的字符串只含有一个字符时:输入i#a#2.输入的字符串含有+时:输入++#输入i++#8《编译原理》实验报告计算机科学与工程学院输入i+i#3.输入的字符串含有*时:输入**#输入**i

14、#输入*i*#输入i*i#i*i*#3.输入的字符串含有()时:8《编译原理》实验报告计算机科学与工程学院输入()#(i)#4.输入的字符串含有多种字符:输入i+i*i#(i+i)*i#(i+i)*(i+i)#(i+*#8《编译原理》实验报告计算机科学与工程学院实验总结此次实

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

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

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