编译原理——递归下降语法分析_第1页
编译原理——递归下降语法分析_第2页
编译原理——递归下降语法分析_第3页
编译原理——递归下降语法分析_第4页
全文预览已结束

下载本文档

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

文档简介

1、编译原理课程实验报告实验名称:递归下降分析法姓名:彭国保学号:540907010130 院系:计算机与通信工程学院专业:计算机科学与技术班级:09-1班教师:韩丽 2012年4月22日一 实验目的根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。程序开始变得复杂起来,需要利用到程序设计语言的知识和大量编程技巧,递归下降分析法是一种较实用的分析法,通过这个练习可大大提高软件开发能力。通过练习,掌握函数间相互调用的方法。二 实验内容递归下降分析法是确定的自上而下分析法,它要求文法是LL(1)文法。它的基本思想是:对文法中的每个非终

2、结符编写一个函数或子程序,每个函数或子程序的功能是识别由该非终结符所表示的语法成分。2.1程序算法描述2.1.1 递归下降分析法的功能词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2.1.2 递归下降分析法的前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法,2.1.3 递归下降分析法实验设计思想及算法为G的每个非终结符号U构造一个递归过程。U的产生式的右边指出这个过程的代码结构:(1)若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现

3、。最后编写程序以实现上述功能。三 实验步骤根据上述算法描述,编写程序以实现相应的功能,该程序由C语言编写,然后在VC运行环境下进行调试,并不断完善,直到能正确的实现递归下降分析功能,判断输入的字符串是否是一个文法的句子。源程序代码如下:#includevoid S();void T();void T1();void error();void scaner();char sym;int main()scaner();S();if(sym=$) printf(是该文法的句子 );else printf(不是该文法的句子);return 0;void S()if(sym=a|sym=) scaner

4、();else if(sym=()scaner(); T();if(sym=) scaner();else error();else error();void T()S();T1();void T1()if(sym=,)scaner();S();T1();else if(sym !=)error();void scaner()scanf(%c,&sym); void error()printf(不是该文法的句子);调试程序的结果:四总结与回顾通过本次实验,我掌握了递归下降分析程序的构造过程,将一个文法编写为对应的子程序,如有左递归先消除左递归,再改写为相应的程序。每次只要输入一个符号串,程序就可以递归的记录其归约的过程,检查其合法性。这里还同时涉及到了消除左递归,求first集和求foll

温馨提示

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

最新文档

评论

0/150

提交评论