编译原理课程实验指导书-PL0语言及其编译器

2019-03-04 16:05

《编译原理》课程实验指导书

(Compiler Principle)

目录

序言................................................................................................................................ 1 一、实验安排 ............................................................................................................... 2 第一阶段:编译器的词法分析 ................................................................................ 2 第二阶段:编译器的语法分析 ................................................................................ 2 第三阶段:编译器的代码生成 ................................................................................ 3 二、考核方式及评定标准 ........................................................................................... 4 三、参考资料与编译器分析 ....................................................................................... 4 第一部分 PL语言及其编译器 ................................................................................ 4 1. PL语言介绍 ..................................................................................................... 4

1.1 PL语言的语法图 .................................................................................... 5 2. PL语言编译器 ................................................................................................. 8

2.1 词法分析 ................................................................................................. 9 2.2 语法分析.................................................................................................. 9 2.3 语义分析................................................................................................ 11 2.4 代码生成................................................................................................ 11 2.5 代码执行................................................................................................ 13 2.6 错误诊断处理........................................................................................ 15 2.7 符号表管理............................................................................................ 17 2.8 其他 ....................................................................................................... 18 第二部分 上机实验要求 ........................................................................................ 19 第三部分 PL语言编译器源程序与示例 .............................................................. 21 1.示例与结果表示 ........................................................................................... 21

1.1 PL语言源程序 ..................................................................................... 21 1.2 生成的代码(片段) .......................................................................... 28 2. PL语言编译器源程序 .................................................................................... 28

1

序言

本《编译原理》实验,其目的是让大家动手设计和实现一个规模适中的语言的编译器,该编译器不仅涉及编译程序的各个阶段,而且也强调了编译的总体设计、各个阶段的接口安排等等。

通过上机实践,来设计这个相对完整的编译器,一方面可以使同学们增加对编译程序的整体认识和了解——巩固《编译原理》课程所学知识,另一方面,通过上机练习,学生也可以学到很多程序调试技巧和设计大型程序一般的原则,如模块接口的协调,数据结构的合理选择等等。

为了使学生能尽早动手实践,我们建议把实践分成三部分,首先阅读本教程第一部分,在这部分就PL语言的语法及其编译程序的各个阶段作了简单介绍,以便对PL编译程序有个初步的印象。其次要认真阅读理解第三部分所给出的PL编译器源程序及示例,使上一阶段的初步印象得以加深、具体化。最后按照第二部分的实验要求扩充PL语言的功能并加以实现。

具体操作时分成三个阶段:词法分析、语法分析及代码生成。最后再统一组装成一个完整的PL编译器,并适当进行改进、补充。

1

一、实验安排

第一阶段:编译器的词法分析

学时:2

(一)、实验目的:通过阅读PL的语法图,设计、编制并调试一个PL词法分析程序,加深对词法分析原理的理解。 (二)、实验内容:

PL的词法分析器将要完成以下工作:

(1) 跳过分隔符(如空格,回车,制表符);

(2) 识别诸如begin,end,if,while等保留字;

(3) 识别非保留字的一般标识符,此标识符值(字符序列)赋给全局量id,而全局量

sym赋值为SYM_IDENTIFIER。

(4) 识别数字序列,当前值赋给全局量NUM,sym则置为SYM_NUMBER;

(5) 识别:=,<=,>=之类的特殊符号,全局量sym则分别被赋值为SYM_BECOMES,

SYM_LEQ,SYM_GEQ等。

相关过程(函数)有getsym(),getch(),其中getch()为获取单个字符的过程,除此之外,它还完成:

(1) 识别且跳过行结束符;

(2) 将输入源文件复写到输出文件;

(3) 产生一份程序列表,输出相应行号或指令计数器的值。

第二阶段:编译器的语法分析

学时:4

(一)、实验目的:掌握PL语言编译器的语法分析程序设计与LL(1)文法应用的实现方法。 (二)、实验内容:

采用递归下降的方法来设计PL/0编译器,证明PL/0语言属于LL(1)文法。然后结合语法图编写(递归下降)语法分析程序的一般方法,具体方面有:

(1) 用合适的替换将语法约化成尽可能少的单个图;

(2) 将每一个图按下面的规则(3)-(7)翻译成一个过程说明; (3) 顺序图对应复合语句: (4) 选择: (5) 循环

(6) 表示另一个图A的图: (7) 表示终结符的单元图: 相关过程有:

block(), constdeclaration(), vardeclaration(), statement(), condition(), expression(), term(), factor()等。

并画出它们之间依赖关系图,并在此基础上实现程序的编制。 并适当进行语义分析的相关检查:

2

(1) 是否存在标识符先引用未声明的情况; (2) 是否存在己声明的标识符的错误引用; (3) 是否存在一般标识符的多重声明。

第三阶段:编译器的代码生成

学时:2

(一)、实验目的:掌握PL语言编译器的中间代码生成的程序分析与实现方法,并能对错误进行分析与处理。 (二)、实验内容:

为了使我们的编译程序保持适当简单的水平,不致陷入与本课程无关的实际机器的特有性质的考虑中去,我们假想有台适合PL程序运行的计算机,我们称之为PL处理机。PL处理机顺序解释生成的目标代码。

PL处理机的指令集根据PL语言的要求而设计,它包括以下的指令: (1)LIT /* 将常数置于栈顶 */ (2)LOD /* 将变量值置于栈顶 */ (3)STO /* 将栈顶的值赋与某变量 */ (4)CAL /* 用于过程调用的指令 */

(5)INT /* 在数据栈中分配存贮空间 */

(6)JMP, JPC /* 用于if, while语句的条件或无条件控制转移指令 */ (7)OPR /* 一组算术或逻辑运算指令 */

上述指令的格式由三部分组成:

F L A 其中,f, l, a的含义见下表:

F INT LIT LOD STO CAL JMP JPC OPR

L ——— ——— 层次差 层次差 层次差 ——— ——— ——— 表1 PL 处理机指令

a 常 量 常 量 数据地址 数据地址 程序地址 程序地址 程序地址 运算类别 PL的编译程序为每一条PL源程序的可执行语句生成后缀式目标代码。

另一方面,发现错误,并给出合适的诊断信息且继续编译下去从而发现更多的错误,对于编译程序而言是完全必要的。结合关键字规则、镇定规则,采用策略:先用一些明显的关键符号给它赋初值,然后随着分析子目标的层次深入,逐步补充别的合法符号。并编写子程序去验证之。

3


编译原理课程实验指导书-PL0语言及其编译器.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:精品课程教学网站毕业论文-《软件工程》精品课程教学网站的设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: