编译原理课程1.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文档。上传文档
查看更多
《编译原理》课程 实验报告 华东理工大学信息学院 2008年2月25日 一.实验题目 PL/0 编译程序的 C语言扩充 二.实验成员 组长:李颖洁 任务:PL/0编译程序的 C 语言源代码输入及功能扩充、测试 组员:黄文倩 任务:PL/0编译程序的 C 语言源代码输入及功能扩充、测试 三.实验目的 在分析理解 PL/0 编译程序的基础上,对其词法分析程序、语法分析程序和语义处理程序 进行部分修改扩充。 四.实验内容 本学期的编译实验内容是使用编译构造工具实现一个扩充PL0语言的编译器。 扩充PL0语言是在PL0语言的基础上增加对整型一维数组的支持、扩充IF-THEN-ELSE条件语句、增加REPEAT语句、支持带参数的过程和增加注释,如下所示: (1)整型一维数组,数组的定义格式为: VAR 数组标识名(下界:上界) 其中上界和下界可以是整数或者常量标识名。 访问数组元素的时候,数组下标是整型的表达式,包括整数、常量或者变量和它们的组合。例如,假设a是常量,b是整型变量,c是数组,这些访问方式都应该可以使用:c(1),c(a),c(b),c(b+c(1))。 (2)扩充条件语句,格式为: 条件语句::= IF 条件THEN 语句[ELSE 语句] (3)增加REPEAT语句,格式为: 重复语句 ::= REPEAT 语句 UNTIL 条件 (4) 支持带参数(传值参数)的过程,定义和调用形式如下: 过程首部::= PROCEDURE 标识符 [‘(’形式参数{, 形式参数}‘)’] ; 过程调用语句 ::= CALL 标识符[‘(’传值参数 {,传值参数 }‘)’] (5) 注释 单行注释以 { 开始,以 } 结束,注释内容不包括 {和 }. 完整的扩充PL0语言的EBNF范式见实验提供的文档所示。下文所说的PL0语言,如果不加说明,就是特指扩充PL0语言。 本实验实现的PL0语言编译器,输入是PL0源语言程序,输出是一个栈式机的汇编语言(PCODE)程序,然后解释执行。如图1所示。 PL0语言编译器的设计实现过程分两个阶段: 词法分析和语法分析,即PL0p1 语义分析和代码生成,即PL0p2。 这两部分的顺序如图2所示,具体的实验要求描述见后面。 词法分析和语法分析(PL0p1) PL0p1的输入是PL0源程序,语法分析程序在分析过程中先调用词法分析程序,然后判断是否合法的PL0程序,输出结果是接受或者拒绝。首先扫描PL0源语言程序,从而识别出标识符、保留字、整数等符号,并返回类别码信息。这一部分的重点是掌握词法分析程序生成器flex的用法。接着在词法分析的基础上进行语法分析,重点是掌握语法分析程序生成器bison的用法。主要任务是把PL0的EBNF文法写成bison可识别的格式。程序最终能识别出符合语法规则的PL0程序,并对不符合语法规则的PL0程序报错。 语义分析和代码生成(PL0p2) 功能是在语法分析程序中添加语义分析功能,审查程序是否有语义错误,并为被识别的语句生成相应的汇编代码,实验中采用的汇编代码是PCODE。 为了支持带参数的过程和一维数组,可能需要增加新的指令,但是由于对实现方法没有严格要求,需要大家自己思考并实现自己的设计。并且在实验报告中写出自己的实现方法来。 五.实验步骤 步骤 1:小组分析和讨论 PL/0 编译程序的 C 语言源代码各部分功能 步骤 2:PL/0 编译程序的 C 语言源代码输入 步骤 3:运行 PL/0 编译程序的 C 语言源代码,调试运行 PL/0 编译程序 步骤 4:PL/0 编译程序功能扩充部分的分析与设计 步骤 5:对 PL/0 编译程序进行功能扩充,即代码编写 步骤 6:进行 PL/0 编译程序功能扩充部分的运行调试 步骤 7:完成实验总结报告 六.实验设计思想 (一)增加错误分析功能 1.设计思想 在编译程序的过程中,往往我们的程序中存在着一些错误。而在编译主体的时候我们已经列出了出错编号,为了清晰的了解出错原因,因此在初始化过程后增加了出错处理,打印出错位置和错误编码。 2.实现方法 增加void error(int n)其代码为: /* *出错处理,打印出错位置和错误编码 */ void error(int n) { char space[81]; memset(space,32,81); space[cc-1]=0; //出错时当前符号已经读完,所以cc-1 printf(****%s!%d\n,space,n); switch(n) { case 1: printf(常数说明中的“=”写成“:=”\n); break;

文档评论(0)

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

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

1亿VIP精品文档

相关文档