递归下降语法分析器.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

编译原理实验报告

实验名称:_____递归下降语法分析器____

实验类型:________验证型实验_________

指导教师:_________何中胜_____________

专业班级:________09计二______________

姓名:_________周健_______________

学号:_________________

电子邮件:____________________________

实验地点:_______院士楼720_____________

实验成绩:____________________________

一、实验目的和要求

通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单

词序列进行语法检查和结构分析,掌握常用的语法分析方法。通过本实验,应达到以下目

标:

1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。

2、掌握词法分析的实现方法。

3、上机调试编出的语法分析程序。

二、实验过程

(1)1、准备:阅读课本有关章节,确定算术表达式的文法。

考虑好设计方案。

设计出模块结构、测试数据,初步编制好程序。

上机调试,发现错误,分析错误,在修改完善。、

(3)分析对象

分析算术表达式的BNF定义如下:

〈算术表达式〉→〈项〉|〈算术表达式〉+〈项〉|〈算术表达式〉-〈项〉

〈项〉→〈因式〉|〈项〉*〈因式〉|〈项〉/〈因式〉

〈因式〉→〈变量〉│(〈算术表达式〉)

〈变量〉→i

用符号表示如下:

E→T|E+T|E-T

T→F|T*F|T/

F→i│(E)

递归下降分析程序实现思想简单易懂。程序结构和语法产生式有直接的对应关系。因为每个过程表示一个非终结符号的处理,添加语义加工工作比较方便。

递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一个非终结符号。

每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号时,调用该非终结符号对应的子程序来完成。

自上向下分析过程中,如果带回溯,则分析过程是穷举所有可能的推导,看是否能推导出待检查的符号串。分析速度慢。而无回溯的自上向下分析技术,当选择某非终结符的产生时,可根据输入串的当前符号以及各产生式右部首符号而进行,效率高,且不易出错。

无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。无左递归:既没有直接左递归,也没有间接左递归。

无回溯:对于任一非终结符号U的产生式右部x1|x2|…|xn,其对应的字的首终结符号两两不相交。

三试验结果

四、讨论和分析

本次试验分为5个大步骤:

ZC过程:开始,然后打印“INPUTEXPRESSION”,输入字符串ST,执行E过程,然后判断SYM是否不等于#或者TZ是否等于1,如果是,打印“ERRORAGAIN”,给TZ赋值为0,跳回到开始步骤继续;如果不是则打印“RIGHTAGAIN”,回到开始步骤继续。

E过程:开始,执行T过程,判断SYM是否等于“+”或“—”,如果不是,返回,如果是,执行ADVANCE,跳回到开始步骤。

T过程:开始,执行F过程,判断SYM是否等于“*”或者“/”,如果不是,返回,如果是,执行ADVANCE,在跳回到开始过程。

F过程:开始,判断SYM是否不等于“A”或者SYM是否小于Z,如果不是,执行ADVACE,然后执行返回,如果不是,再判断SYM是否不等于“(”,如果是,打印“ERROR”,TZ赋值1,返回;如果不是,执行ADVANCE,在执行E过程,接着继续判断SYM是否不等于“)”,如果是,打印ERROR,TZ赋值1,如果不是,执行ADVANCE,返回。

SYM:取字符串ST的第一个字符给SYM。

ADVANCE:取字符串ST去除首字符后留下的字符串。

本次试验主要是测试性试验,了解一下递归下降语法分析器的基本构成和结构等等。

附录

#includestdio.h

#includestring.h

charsym;

inttz=0;

charst[50];

intip=0;

voidmyE();

voidmyT();

voidmyF();

voidmyAdvance();

voidinit();

voidmyE()

{

myT();

if(sym==+||sym==-)

{

myAdvance();

myE();

}

}

voidmyT()

{

myF();

while(sym==*||sym==/)

{

myAdvance();

myF();

}

}

voi

文档评论(0)

183****9774 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档