编译原理递归算法实验_第1页
编译原理递归算法实验_第2页
编译原理递归算法实验_第3页
编译原理递归算法实验_第4页
全文预览已结束

下载本文档

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

文档简介

1、递归下降分析一、 实验目的根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。程序开始变得复杂起来,需要利用到程序设计语言的知识和大量编程技巧,递归下降分析法是一种较实用的分析法,通过这个练习可大大提高软件开发能力。通过练习,掌握函数间相互调用的方法。二、 实验内容递归下降分析法是确定的自上而下分析法,它要求文法是LL(1)文法。它的基本思想是:对文法中的每个非终结符编写一个函数或子程序,每个函数或子程序的功能是识别由该非终结符所表示的语法成分。(1)递归下降分析法的前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为L

2、L(1)文法,(2) 递归下降分析法实验设计思想及算法为文法G的每个非终结符号A构造一个递归过程。A的产生式的右边指出这个过程的代码结构:若是终结符号,则向前看符号对照,若匹配则向前进一个符号;否则出错。若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现。最后编写程序以实现上述功能。三、 实验步骤根据上述算法描述,编写程序以实现相应的功能,该程序由C语言编写,然后在VS运行环境下进行调试,并不断完善,直到能正确的实现递归下降分析功能,判断输入的字符串是否是一个文法的句子。编程识别由下列文法所定义的表达式的递归下降语法分析器。 EE+T | T TT*F |

3、 F F(E) | i 消除左递归之后的文法为: ETE E+TE | e TFT T*FT | e F(E) | i 输入字符串为:i+i*i。代码如下所示:#include void 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(); 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 s

温馨提示

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

评论

0/150

提交评论