- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
辅助实验说明
任务描述
本学期的主体实验(Decaf实验)中,未涉及到自顶向下语法分析的内容,辅助实验
的目的旨在对此项技术训练进行适当的弥补。
本次辅助实验基于编译原理课程早期用过的PL/0编译器框架。PL/0编译器采用单遍扫
描的结构,以语法、语义分析过程作为驱动,必要时调用词法分析和代码生成过程。本学期
课程中,该实验的主要目标是读懂并理解PL/0编译器的自顶向下语法分析程序结构。编译其
的其余部分只要能够与语法分析部分区分开来即可,不必深入理解,虽然对语义分析和代码
生成部分的理解对课程后半段的学习很有好处。
实验的具体任务是裁减PL/0编译器框架的代码,使其语法分析阶段不包含任何错误恢复
功能。只要读懂并理解框架中的递归下降分析程序代码结构(含错误处理功能),这一任务
很容易完成,工作量也很小。
实验完成后,需要提交裁减后的代码,以及较详细的实验报告。实验报告中至少应包含
下列内容:
1)说出框架代码中包含哪些语法成分的递归子程序,以及它们之间的调用关系。
2)列出裁减前后代码的差异(尽可能详尽)。
3)以框架中某种语法成分为例,说明错误恢复功能的实现方案,并构成补救集合
的BeginSym和EndSym。因对于有些语法成分并未考虑出错恢复功能,因此选择种语法
成分,需要筛选一下。若有改进方案,也请给出论述,并给出实际测例予以支持。
评分
本次辅助实验满分5分,其中裁减后的编译器代码2分,实验报告3分。
裁减后的编译器应能够编译通过裁减前可编译通过的PL/0源代码。
提交时,将结果编译器的代码文件与实验报告文件打文件名为自己的学号。
实验代码框架
在网络学堂的“课程文件”中上传了先前编译课用过的PL/0项目中的源代码,含C
和Java两个版本的编译程序源码及测试例子;此外,还包括一份PL/0编译程序源码导
读的ppt。这些材料可以作为本次试验的基础框架。根据自身的情况选用C或Java版
本。
附录APL/0语言编译系统(即实验框架)简介
PL/0语言编译系统是世界著名计算机科学家N.Wirth编写的,它由编译程序和解释程序
两部分组成。N.Wirth原本使用的编写语言是Pascal,而本课程采用了PL/0编译系统的C语言
和Java语言版本。在附录A中,所涉及PL/0编译程序的例子中均指C语言的版本。
首先介绍PL/0语言编译系统的构成,然后给出PL/0编译程序的源语言和目标语言,最后
简介PL/0编译程序的基本组成。
在完成本次辅助实验时,并不需要了解本附录中的全部内容,大家可根据自己的需要和
选择性阅读。
A.1PL/0语言编译系统构成
PL/0语言编译系统由编译程序和解释程序两部分组成,分别称为PL/0编译程序和类
P-code解释程序。PL/0语言程序被PL/0编译程序转换为等价的类P-code程序。当编译程序
正常结束时,PL/0语言编译系统会调用解释程序(也称类P-code虚拟机),解释执行所生
成的目标程序。如图1所示。
PL/0程序
PL/0编译程序
类P-code程序
输入数据类P-code解释程序输出数据
类P-code虚拟机
文档评论(0)