递归下降分析法实验_第1页
递归下降分析法实验_第2页
递归下降分析法实验_第3页
递归下降分析法实验_第4页
递归下降分析法实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上实验二 递归下降分析法一、实验目的(1)掌握自上而下语法分析的要求与特点。(2)掌握递归下降语法分析的基本原理和方法。二、实验环境Windows 7 操作系统Microsoft Visual C+三、实验内容递归下降分析法是确定的自上而下分析法,它要求文法是LL(1)文法。它的基本思想是:对文法中的每个非终结符编写一个函数或子程序,每个函数或子程序的功能是识别由该非终结符所表示的语法成分。1.递归下降分析法的功能词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2.递归下降分析法的前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1

2、)文法,3.递归下降分析法实验设计思想及算法为G的每个非终结符号U构造一个递归过程。U的产生式的右边指出这个过程的代码结构:(1)若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现。四、实验步骤1.阅读课本有关章节;2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。4.将源代码拷贝到机上调试,发现错误,再修改完善,直到调试通过为止。5.系统流程图结束输出正确提示信息判断是否为正确表达式是否输入表达式输出错误提示信息开始6.程序代码#include using name

3、space std;char a80; / 字符串的存入char sym; / 单个的判断字符int i=0; / 字符串下标 void E(); / 功能识别函数void E2(); / 功能识别函数void E3(); / 功能识别函数void T(); / 功能识别函数void T2(); / 功能识别函数void T3(); / 功能识别函数void F(); / 功能识别函数void input(); / 输入函数void advance(); / 字符串小标进一函数void main() while(1)input();advance();E(); / 从首个推导式E开始if (s

4、ym=#)couta为合法符号串endl;else cout非法的符号串!endl;i=0; / 重新输入时,下标置0void E()T();E2();E3();void E2()if(sym=+)advance();T();E2(); else if (sym!=) & sym !=# & sym!=-)cout非法的符号串!endl;exit(0);void E3()if(sym=-)advance();T();E3();else if (sym!=) & sym!=# & sym!=+)cout非法的符号串!endl;exit(0);void T()F();T2();T3();void

5、T2()if(sym=*)advance();F();T2();else if(sym!=+&sym!=)&sym!=#&sym!=-&sym!=/)cout非法的符号串!endl;exit(0);void T3()if(sym=/)advance();F();T3();else if(sym!=+&sym!=)&sym!=#&sym!=-&sym!=*)cout非法的符号串!endl;exit(0);void F()if(sym=()advance();E();if(sym=) advance();else cout非法的符号串!endl;exit(0);else if(sym=i | sy

6、m=I)advance();else cout非法的符号串!endl;exit(0);void input()cout请输入一以#结束的符号串(包括+-*/()i#):a;void advance()sym=ai;i+;五、运行结果 1.输入正确的表达式的运行结果如下图所示:2.输入错误的运行结果如下图所示:六、实验总结在试验的过程中,遇到了一些问题,都是粗心大意而造成,并非是对文法分析和编程的熟悉问题,说明了我再以后的试验中应该更细心的编写程序的每一步,对于本次试验所出现的马虎,应该牢记,以后不再犯同样的错误。本次实验主要出现了以下两次重要错误:(1)算式匹配时候,如果输入字符串中只有“(”时,仍然是能够正确匹配;解决方案:由于没有考虑括号匹配是成对存在的问题,添加右括号匹配代码就可以解决了。(2)调用非终结符E( )执行完以后,则对于一些非法的算式还是成功输出例如i-、i*等;解决方案:在主函数main( )中需要对调用非终结符E()执行完以后的ch进行判断,如果ch为“#”则算式匹配成功,否则算式匹配失败。通过本次试验实践使我掌握了递归下降语法分析的基本原理和方法。运用递归下降分析法完成了本试验的语法分析构造,并且成功的分析出每种正确的句子和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论