




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、递归下降分析程序实验报告1.实验内容编程实现给定算术表达式的递归下降分析器。算术表达式文法如下:EàE+T | T TàT*F | F Fà(E) | i 2.实验分析(1 ) 对所给表达式进行分析,如果是左递归则对算术表达式进行改写消除其左递归。改写的算术表达式如下:ETE E+TE| TFT T*FT | F(E) | i( 2) 写出上面表达式的FIRST集和FOLLOW集,然后对有多个规则的FIRST集求并集,看是否等于空集;对规则右部出现空串的FIRST集与FOLLOW集求并集,看是否等于空集。 对E:FIRST(+TE) FOLLOW(E)=+, #,
2、 )=对T:FIRST(*FT) FOLLOW(T)=* , +,#, )=对F: FIRST(i) FIRST( (E) )=i ( =故由上面可知此改写后的文法是LL(1)文法。(3)对上述LL(1)文法编程。编程规则如下:当遇到终结符a时,则编写语句If(当前读来的输入符号=a)读下一个输入符号当前遇到非终结符A时,则编写语句调用A()。当前遇到A规则时,则编写语句If(当前读来的输入符号不属于FOLLOW(A) error()当某个非终结符的规则有多个候选式时,按LL(1)文法的条件能惟一地选择一个侯选式进行推导。3.源程序代码#include<iostream>using
3、 namespace std; #include<string> #define n 100 char chn; int k=0; void scaner(); void E(); void E1(); void T(); void T1(); void F();void Error();void scaner()k+;void E()T();E1();void E1()if (chk='+') scaner();T();E1(); else if(chk!=')'&&chk!='#') Error();void T(
4、)F();T1();void T1() if(chk='*') scaner();F();T1();else if(chk='+'&&chk!=')'&&chk='#')Error();void F()if(chk='(') scaner(); E(); if(chk=')') scaner();else Error();else if(chk='i')scaner();else Error();void Error() cout<<&qu
5、ot;语法错误 !"<<endl;cout<<"分析失败"<<endl; exit(0); void main() k=0; cout<<"请输入表达式:"cin>>ch; E(); if (chk='#')cout<<"分析成功!"<<endl; elsecout<<"分析失败"<<endl;4.测试用例1图1:输入i时成功图1 输入i匹配成功2图2:输入i+i*i时成功图2 输入
6、i+i*i匹配成功3图3:输入(i)时成功图 3 输入(i)匹配成功4图4:输入(i+(i*i)时成功图 4 输入(i+(i*I)匹配成功5图5:输入i+i时成功图 5 输入i+i匹配成功6图6:输入i*i时成功图6 输入i*i匹配成功7图7:输入(i*i)时成功图 7 输入(i*i)时匹配成功8图8:输入(i+i)时成功图8 输入(i+i)时匹配成功9图9:输入i+i+i+i+i+i时成功图9 输入i+i+i+i+i+i时匹配成功10图10:输入i*i*i*i*i*i*i*i时成功图 10 输入i*i*i*i*i*i*i时匹配成功11图11:输入+i时失败图11 输入+i时匹配失败12图12
7、:输入ii时失败图12 输入ii时匹配失败13图13:输入()时失败图 13 输入()匹配失败5.实验总结本次实验主要是根据一个算术表达式文法构造一个识别该文法句子的递归下降分析程序。它的主要功能是当输入一个算术表达式时,判断该表达式是否能从文法开始符号出发推导出来。若能,则说明语法分析成功,否则失败。实验主要使用了C+和Visual Studio 2005,定义了几个函数然后调用函数,程序比较简单。本次实验的最终运行结果与预期结果是完全一致的。同时在程序由于不能把全部的错误与正确的用例都包含进去,所以不能验证程序的正确性。在实验开始写程序前要做好充分的准备。例如判断文法是否含有文法左递归、是不是LL(1)文法,并想好测试用例,用例的选择非常重要,因为若某一方面没有考虑到就会导致程序错误。我在写程序时并未
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46263-2025消费品质量分级家用电器熨烫器具
- 2025湖南怀化市会同县招聘事业单位工作人员7人模拟试卷及答案详解(名校卷)
- 2025年福建省福清市中医院招聘18人模拟试卷及答案详解(全优)
- 2025年福建省泉州文旅集团招聘3人考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025江西中小学教师招聘考试南昌考区模拟试卷及一套答案详解
- 2025年临沂兰陵县教育系统部分事业单位公开招聘教师(5人)模拟试卷带答案详解
- 2025年河南中医药大学招聘高层次人才83人+考前自测高频考点模拟试题及完整答案详解
- 2025广西贵港市公安局港北分局招聘警务辅助人员62人考前自测高频考点模拟试题及参考答案详解
- 2025河南新乡事业单位招录203人考前自测高频考点模拟试题及1套完整答案详解
- 2025内蒙古土地资源收储投资(集团)有限公司常态化招聘急需紧缺专业人员50人模拟试卷及答案详解(考点梳理)
- DB50T 1023-2020 优 质地方鸡林下养殖技术规程
- 江苏省南京市秦淮区2024-2025学年八年级上学期期中考试数学试卷
- 高端酒店养生自助餐方案
- 14 圆明园的毁灭课件
- 北师大版七年级数学上册《第二章有理数及其运算》单元测试卷(带答案)
- 完整版人教版六年级英语上册第二单元知识点归纳总结及作文范文
- 2021译林版高中英语选择性必修三课文翻译
- DZ∕T 0338.1-2020 固体矿产资源量估算规程 第1部分 通则(正式版)
- 2024届唐山市高三高考一模(第一次模拟演练)语文试卷(含标准答案)
- 空调维保投标方案(技术方案)
- 光伏电站全面巡视标准化作业指导书
评论
0/150
提交评论