编译原理修改后的PL0报告.docVIP

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

一、上机实践要求 “编译原理与技术”的上机实验要求你对PL/0语言及其编译器进行扩充和修改。每个扩充或修改方式可得到不同的分数,满分为100分。 完成上机作业后,必须提交下列文档: 修改后的PL/0语言文本。包含词法分析(正规式),语法分析(BNF)。 有关修改后的PL/0编译/解释器的说明。详细说明你的编译器是如何编译新的PL/0语言程序的。指出你的程序中最精彩的部分,以及你为什么这样做,你是如何控制和恢复语义错误的。 给出你所改动后的编译器源程序清单,并标记出你所修改的部分。比较你的编译器和原来的编译器之间的差别。 说明你的编译器中可能存在的错误。 总结经验与教训,如果重做一遍,你会有哪些新的改进? 对现存的PL/0编译程序可做如下修改或扩充,其中(1)、(2)、(11)和(12)必须完成,剩余的均可任意选择,但总分必须超过70分。 注释(5分) 注释由(*和*)包含,不允许嵌套。 布尔类型的数据(10分) 布尔类型的BNF为: var_option → ε| var var_decl_list var_decl_list → var_decl | var_decl_list var_decl var_decl → ident_list : data_type data_type → integer | boolean 这种修改包括: 区别整型与布尔型变量、常量和表达式。 增加按严格计算的布尔类型运算符and、ornot。这些算符以及己有的运算符的优先级与Pascal语言相同。 能够使用布尔常量true和false。 把PL/0语言中的“条件”概念一般化为Pascal语言那样。 布尔表达式可以比较大小:false true 布尔表达式的短路计算(5分) 增加布尔类型(见(2),除(2)的(ii)外),但对and和or采取短路计算。 数组(10分) 增加由任何数据类型构造的一维数组。数组的下标限于纯量类型。 注意:数组可以由其它的数组来构造,因而必须考虑多维数组的情况。数组的上下界可为任意的纯量常数。 数组的定义如下: data_type → integer | boolean | array [const..const] of data_type const → ident | number 语言中允许有数组说明,对数组元素赋值,在表达式中引用数组元素。为了便于解释执行,可能要增加新的PL/0机器操作指令。 参数(10分) 语法同Pascal,采用值-结果方式传递(不用var声明)。 函数(10分)语法同Pascal。 else子句和repeat语句(5分) for语句,语法参照Pascal或C语言(5分) exit语句(退出当前执行过程)和break语句(跳出包含它的最内层循环),(5分) 记录(结构),语法同Pascal语言(10分)。 更有力的语法错误恢复机制(20分) 分离解释和编译器(5分) 注意:上面的这些要求有时会互相影响:例如实现布尔类型数据,则数组和参数就应该能处理其相互组合的情况,如布尔型数组(包括多维数组)、布尔型作为下标的数组、布尔型作为参数传递。甚至能够实现数组作为参数传递等。 另外,为了实现以上功能,你可任意增加PL/0处理机的指令。但要注意指令的简单与合理。 选做题:此题不计入总分,仅做为学生在有余力的情况下的进一步练习。 实现PL/0语言的输入、输出语句。其语法、语义定义和Pascal语言相同。可以仅仅实现一次输入或输出一个值的语句——语句参数固定;也可以实现完全和Pascal语言一样,能够接受任意个数参数的输入或输出语句。 二、实验原理: 就像一个翻译要把汉语翻译成英语,必须对汉语和英语的单词、语法结构都很精通,才有可能翻译得准确无误。另外,编译程序既然是为了完成这种功能的一个程序,就存在用什么语言来编写这个程序的问题。这些问题在本节将逐步介绍。   现对PL/0语言编译程序的功能用“T”型图表示,并用图形概括描述PL/0编译程序的结构框架。 用语法图描述语法规则的优点是直观、易读。在图.1的语法图中用椭圆和圆圈中的英文字表示终结符,用长方形内的中文字表示非终结符。所谓终结符,是构成语言文法的单词,是语法成分的最小单位,而每个非终结符也是一个语法成分。   但非终结符可由其它文法符号定义,终结符不能由其它文法符号定义。例如,程序是由非终结符分程序和终结符.组成的串定义的。由于对某些非终结符可以递归定义,如图.1(b)、2.1 (c)、2.1 (e)中:分程序、表达式和语句。第一个非终结符 程序为文法的开始符号。 1.1(a) 1.1(c) 条件 1.1(e) 分程序 1.1(b) 语句 1.1(d) 表达式 1.1(f) 项 1.1(g) 因子 1.1(h) 如:{*}表示*重

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档