第九章 编译原理递归下降子程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北华航天工业学院 《编译原理》课程实验报告 课程实验题目: 递归下降子程序实验 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术 作者所在班级: xxxx 作 者 学 号: xxxxx _ 作 者 姓 名 : xxxx 指导教师姓名: xxxxx 完 成 时 间 : 2011年3月28日 一、实验目的 通过本实验,了解递归下降预测分析的原理和过程以及可能存在的回溯问题,探讨解决方法,为预测分析表方法的学习奠定基础。分析递归下降子程序的优缺点。 二、实验内容及要求 针对算术表达式文法:E→TE’ E’ → +TE’|ε T→FT’ T’ →*FT’ |ε F→(E) |i 为其编写递归下降子程序,判定某个算术表达式是否正确:如j+k*m,j*k+m 输入:其输入数据应该为词法分析器输出的记号形式:i+i*i,i*i+i 输出:分析结果:算术表达式结构正确或结构错误。 三、实验程序设计说明 1.实验方案设计 各个函数之间的调用关系如下图所示: 程序源代码 源代码如下: #includestdio.h #includeiostream #includefstream #includestring char a[10]; int lookahead=0; void E1(); void T(); void T1(); void F(); void E() { printf(E-TE\n); T(); E1(); } void E1() { if(a[lookahead]==+) { printf(E-+TE\n); lookahead++; T(); E1(); } else printf(T-ε\n); } void T() { printf(T-FT\n); F(); T1(); } void T1() { if(a[lookahead]==*) { printf(T-*FT\n); lookahead++; F(); T1(); } else printf(T-ε\n); } void F() { if(a[lookahead]==i) { printf(F-i\n); lookahead++; } else if (a[lookahead]==() { lookahead++; E(); if(a[lookahead]==)){ printf(F-(E)\n); lookahead++; } else{ printf(\n括号不匹配分析失败!\n); exit (0); } } else{ printf(括号不匹配,分析失败!\n); exit(0); } } int main() { while(1) { printf(请输入算数表达式(以#键结束):); scanf(%s,a); E(); if((a[lookahead]==#)) printf(句子结构正确\n); else printf(无结束标志,分析失败\n); } return 0; } 3.程序的执行结果 程序运行结果如下所示: 四、实验中出现的问题及解决方法 错误处理:最初程序只是将所有的错误都简单的显示为句子结构错误,并没有进行具体详细的说明和解释,最后通过修改程序,细化错误类型,使用了对if语句的嵌套,将错误分为三种类型。 句子结构分析:最初程序只能分析结构比较简单的句子类型,比如输入的字符不匹配等问题,输入类似i+i*+等缺少操作数结构类型的句子则不能做出正确的判断,通过修改 F()等相关函数解决了这个问题;但此程序只能分析此类文法的句子结构,如果文法改变则需要修改程序,才能进一步分析对应的句子结构。 尽管,在实验过程中遇到的问题得到了解

文档评论(0)

0520 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档