- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
编译原理实验指导书
实验2语法分析
实验目的
巩固对语法分析的基本功能和原理的认识。
通过对语法分析表的自动生成加深语法分析表的认识。
理解并处理语法分析中的异常和错误。
实验内容
在词法分析器的基础上设计实现类高级语言的语法分析器,基本功能如下:
能识别以下几类语句:
声明语句(包括变量声明、数组声明、记录声明和过程声明)
表达式及赋值语句(包括数组元素的引用和赋值)
分支语句:if_then_else
循环语句:do_while
过程调用语句
(2)如果语法分析器采用的是自顶向下的分析技术,要求编写程序自动计算FIRST集和FOLLOW集,并自动生成预测分析表。如果采用的是自底向上的分析技术,要求编写自动计算CLOSURE(I)和GOTO函数的程序,并自动生成LR分析表。
(3)具备语法错误处理能力,能准确给出错误所在位置,并采用可行的错误恢复策略。输出的错误提示信息格式如下:
ErroratLine[行号]:[说明文字]
(4)系统的输入形式:要求可以通过文件导入文法和测试用例,可以通过用户界面显示并编辑测试用例。测试用例要涵盖“实验内容”第(1)条中列出的各种类型的语句,并设置一些语法错误。
(5)系统的输出分为两部分:一部分是打印输出语法分析器的FIRST集、FOLLOW集和LL(1)分析表(或LR分析表)。另一部分是打印输出语法分析结果,格式如下:将构造好的语法分析树按照先序遍历的方式打印每一个结点的信息,这些信息包括结点的名称以及结点对应的成分在输入文件中的行号(行号被括号所包围,并且与结点名称之间有一个空格)。所谓某个成分在输入文件中的行号是指该成分产生的所有词素中的第一个在输入文件中出现的行号。对于叶结点,如果其token的属性值不为空,则将其属性值也打印出来。属性值与结点名称之间以一个冒号和空格隔开。每一个结点独占一行,而每个子结点的信息相对于其父结点的信息来说,在行首都要求缩进2个空格。具体输出格式参见下例(该例
输入:
1 procinc;
2 inti;
3 i=i+1;
输出:
P(1)
D(1)
proc(1)
id :inc(1)
;(1)
D(2)
T(2)
X(2)
integer(2)
id :i(2)
;(2)
S(3)
id :i(3)
=(3)
E(3)
E(3)
id :I(3)
+(3)
E(3)
digit :1(3)
;(3)
除此之外,可以实现一些额外功能,如输出分析结果的树状图。
实验要求
(1)可以自己定义文法,也可以参考教材中给出的文法(参见本指导书附录)
(2)要求实验之前完成实验报告中的预习部分(即需求分析、文法设计和系统设计三个板块)。未按时完成预习报告者将扣除相应分数。
(3)要求当堂完成实验内容,并进行现场验收。未当堂完成验收者将扣除相应分数。
(4)要求实验结束后一周内提交实验报告及源程序。未按时提交者将影响成绩评定。
实验评分标准
一、课堂表现(10分)
1.出勤情况(迟到,早退,缺席)
2.是否遵守课堂纪律
二、操作表现(50分)
1.当堂按时完成(10分)
2.功能齐全,结果正确无误(30分)
3.界面美观、人性化,具有良好演示效果(10分)
三、实验报告(40分)
1.需求分析(10分)
2.设计(20分)
3.系统实现及结果分析(10分)
附录:参考文法
P?D //参见教材p229
P?S //参见教材p241
S?SS //参见教材p241
/*声明*/
D?DD|procid;DS|Tid; //参见讲义第7章
T→XC|recordD //参见教材p227
X→integer|real //参见教材p227
C→[num]C|ε //参见教材p227
/*赋值语句*/
S?id=E;|L=E; //参见教材p234
E?E+E|E*E|-E|(E)|id|digit|L //参见教材p234
L?id[E]|L[E] //参见教材p234
/*控制流语句*/
S?ifBthenS1 //参见教材p241
|ifBthenS1elseS2 //参见教材p241
|whileBdoS1 //参见教材p241
B→BorB //参见教材p243
|Ba
文档评论(0)