编译原理递归下降子程序1_第1页
编译原理递归下降子程序1_第2页
编译原理递归下降子程序1_第3页
编译原理递归下降子程序1_第4页
编译原理递归下降子程序1_第5页
全文预览已结束

下载本文档

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

文档简介

1、编译原理课程实验报告课程实验题目: 递归下降子程序实验 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术 作者所在班级: xxxx 作 者 学 号: xxxxx _作 者 姓 名 : xxxx 指导教师姓名: xxxxx 完 成 时 间 : 2011年3月28日 一、实验目的通过本实验,了解递归下降预测分析的原理和过程以及可能存在的回溯问题,探讨解决方法,为预测分析表方法的学习奠定基础。分析递归下降子程序的优缺点。二、实验内容及要求1 针对算术表达式文法:ETE E +TE| TFT T *FT | F(E) |i为其编写递归下降子程序,判定某个算术表达式是否正确:如j+k

2、*m,j*k+m输入:其输入数据应该为词法分析器输出的记号形式:i+i*i,i*i+i输出:分析结果:算术表达式结构正确或结构错误。三、实验程序设计说明1实验方案设计 各个函数之间的调用关系如下图所示:2 程序源代码源代码如下:#include<stdio.h>#include<iostream>#include<fstream>#include<string>char a10;int lookahead=0;void E1();void T();void T1();void F();void E() printf("E->TE&

3、#39;n"); T(); E1();void E1()if(alookahead='+') printf("E'->+TE'n"); lookahead+;T();E1(); else printf("T'->n");void T() printf("T->FT'n");F();T1();void T1()if(alookahead='*')printf("T'->*FT'n"); lookahead

4、+;F();T1();else printf("T'->n");void F()if(alookahead='i') printf("F->in"); lookahead+; else if (alookahead='(') lookahead+; E();if(alookahead=')') printf("F->(E)n"); lookahead+; elseprintf("n括号不匹配分析失败!n"); exit (0); else p

5、rintf("括号不匹配,分析失败!n"); exit(0); int main()while(1)printf("请输入算数表达式(以#键结束):"); scanf("%s",a);E();if(alookahead='#') printf("句子结构正确n"); else printf("无结束标志,分析失败n");return 0;3程序的执行结果程序运行结果如下所示: 四、实验中出现的问题及解决方法1. 错误处理:最初程序只是将所有的错误都简单的显示为句子结构错误,并没有

6、进行具体详细的说明和解释,最后通过修改程序,细化错误类型,使用了对if语句的嵌套,将错误分为三种类型。2. 句子结构分析:最初程序只能分析结构比较简单的句子类型,比如输入的字符不匹配等问题,输入类似i+i*+等缺少操作数结构类型的句子则不能做出正确的判断,通过修改F()等相关函数解决了这个问题;但此程序只能分析此类文法的句子结构,如果文法改变则需要修改程序,才能进一步分析对应的句子结构。 尽管,在实验过程中遇到的问题得到了解决,但是仍然有很多缺陷。尤其是在进行错误处理时只有三种,并不完善,并没有对错误进行详细的分析和说明的功能。五、体会、意见或建议 通过本次实验基本掌握了语法分析的原理和递归下降子程序分析方法,通过编写程序进一步复习巩固了c语言的相关知识,由于对c语言

温馨提示

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

评论

0/150

提交评论