- 35
- 0
- 约3.89千字
- 约 9页
- 2021-06-08 发布于山东
- 举报
.
PL/0 语言编译器剖析实验报告
一、实验目的
通过阅读与解析一个实际编译器( PL/0 语言编译器)的源代码, 加深对编
译阶段(包括词法剖析、语法剖析、语义剖析、中间代 码生成等)和编译系统软件结构的理解,并达到提高学生学习兴趣的目的。
二、实验要求
(1) 要求掌握基本的程序设计技巧( C 语言)和阅读较大规模程序 源代码的能力;
理解并掌握编译过程的逻辑阶段及各逻辑阶段的功能;
(3) 要求能把握整个系统( PL/0 语言编译器)的体系结构,各功能 模块的
功能,各模块之间的接口;
要求能总结出实现编译过程各逻辑阶段功能采用的详细算法与技术。
三、实验步骤
根据 PL/0 语言的语法图,理解 PL/0 语言各级语法单位的结构,掌握
PL/0 语言合法程序的结构;
从总体上剖析整个系统的体系结构、各功能模块的功能、各模块之间的调用关系、各模块之间的接口;
详尽剖析各子程序和函数的代码结构、程序流程、采用的主要算法及实现的功能;
撰写剖析报告,主要容包括系统结构框图、模块接口、主要算法、各模块程序流程图等。
四、报告容
pl/0 语言是 pascal 语言的一个子集,我们这里剖析的 pl/0 的编译程序包括了
对 pl/0 语言源程序进行剖析办理、 编译生成类 pcode 代码,并在虚构机上解释运行生成的类 pcode 代码的功能。
pl/0 语言编译程序采用以语法剖析为中心、 一遍扫描的编译方法。 词法剖析
和代码生成作为独立的子程序供语法剖析程序调用。 语法剖析的同时, 提供了出
错报告和出错恢复的功能。 在源程序没有错误编译通过的情况下, 调用类 pcode
word 专业资料
.
解释程序解释执行生成的类 pcode 代码。
PL/0 语言文法的 EBNF 表示
EBNF 表示的符号说明。
〈 〉
用左右尖括号括起来的中文字表示语法结构成分,或称语法单
位,为非终结符。
∷=
该符号的左部由右部定义,可读作“定义为”。
|
表示“或”,为左部可由多个右部定义。
{ }
花括号表示其的语法成分能够重复。在不加上下界时可重复0
到任意次数,有上下界时为可重复次数的限制。
PL/0 编译程序过程与函数定义层次结构图
word 专业资料
.
PL/0 的解释执行结构
PL/0 语言目标程序 PL/0 语言解释执行程序
输入数据 输出数据
PL/0 编译程序结构
word 专业资料
.
PL/0 源程序
词法剖析程序
序 表
序 出
格
错
管
语法语义剖析程
处
理
理
程
程
代码生成程序
目标程序
编译程序总体流程图
启 动
置 初 值
调 用 GETSYM取 单 词
调 用 BLOCK过 程
当
前
单
词
N
是否为源程序结束符
出 错
.
?
Y
源
程
序
中
Y
打
印 错
误
是
否
有
错
误
?
N
调用解释过程INTERPRET
解 释
执
行
目
标
程
序
结 束
PL/0 编译程序的语法剖析
PL/0 编译程序语法、语义剖析是整个编译程序设计与实现的中心部分 ,要求
学员努力学习掌握实现技术和方法。 现分别说明语法剖析实现的主要思想方法和
语义剖析的实现。
word 专业资料
.
语法剖析的任务是辨别由词法剖析给出的单词符号序列在结构上是否切合
给定的文法规则。 PL/0 语言的文法规则已在 2.1 节中给出。本节将以语法图描
述的语法形式为依据,给出语法剖析过程的直观思想。
PL/0 编译程序的语法剖析采用了自顶向下的递归子程序法。
可用下面简单的 PL/0 程序为例结构其语法剖析树
语法调用关系图
word 专业资料
.
PL/0 编译程序语法剖析的设计与实现
〈表达式〉的递归子程序实现
procedure expr;
begin
if sym in [ plus, minus ] then
begin getsym; term;
end
else term;
while sym in [plus, minus] do
begin
getsym; term;
end
end;
〈因子〉∷ = 〈表记符〉 | 〈无符号整数〉 |‘(’〈表达式〉‘)’
〈因子〉的递归子程序实现
procedure factor;
begin
if sym ident then
begin
if sym number then
begin
if sym = ‘ ( ‘ then
begin
getsym;
expr;
if sym = ‘ ) ’ then
getsym
else error
end
else error
end
else getsym
end
else getsym
end;
说明部分的剖析与办理
word 专业资料
.
对每个过程(含
原创力文档

文档评论(0)