文档介绍:第二章 PL/0编译程序的实现
本章以PL/0编译程序为实例, 使大家对编译程序的实现建立起整体概念,对编译程序的构造得到一些感性认识和初步了解。
§1 PL/0语言
§2 PL/0处理机—假想栈式机
§3 PL/0编译程序
§4 符号表的一般形式讨论
§5 栈式存储管理的再讨论
1
精选PPT课件
§1 PL/0语言
PL/0功能简单、结构清晰、可读性强,而又具备了一般高级语言的必备部分,因而其编译程序能充分体现一个高级语言编译程序的基本技术和步骤。
PL/0语言:PASCAL语言的子集,用于教学
PL/0程序示例
PL/0的语法描述图
PL/0语言的EBNF表示
2
精选PPT课件
PL/0语言是PASCAL语言的子集
过程可嵌套定义,内层可引用包围它的外层定义的标识符,可递归调用
数据类型,只有整型
数据结构 ,只有简变和常数
标识符的有效长度是10
语句种类:
begin/end、if、while、赋值、read/write、call、const、var、procedure
过程无参,最多可嵌套三层
13个保留字:if、then、while、do、read、write、call、begin、end、const、var、procedure、odd
+、-、*、/、=、<>、<、<=、>、>=、(、)
3
精选PPT课件
PL/0程序示例
CONST A=10; (* 常量说明部分 *) VAR B,C; (* 变量说明部分 *)
PROCEDURE P; (* 过程说明部分 *)
VAR D;(* P的局部变量说明部分 *)
PROCEDURE Q; (* P的局部过程说明部分 *)
VAR X; BEGIN READ(X);
D:=X;
IF X#0 DO CALL P; END; BEGIN CALL Q; WRITE(D); END; BEGIN CALL P; END.
4
精选PPT课件
递归计算 sum = 1! + 2 ! + ... + n!
var n, m, fact, sum;
{ 递规计算 fact = m! }
procedure factorial;
begin
if m > 0 then
begin
fact := fact * m;
m := m - 1;
call factorial;
end;
end;
begin
{ 读入n }
read(n);
sum := 0;
while n > 0 do
begin
m := n;
fact := 1;
call factorial;
sum := sum + fact;
n := n - 1;
end;
{ 输出n !}
write(sum);
end.
5
精选PPT课件
const
ident
number
var
ident
procedure
ident
分程序
语句
分程序
程序
分程序
.
语法图
6
精选PPT课件
ident
read
end
语句
表达式
:=
begin
语句
语句
)
(
ident
,
7
精选PPT课件
PL/0语言的EBNF表示
BNF(BACKUS-NAUR FORM)与EBNF的介绍BNF是根据美国的John Naur来命名的,它是从语法上描述程序设计语言的元语言。采用BNF就可说明哪些符号序列是对于某给定语言在语法上有效的程序。
构成EBNF的元素:非终结符,终结符,开始符,规则
EBNF的元符号:< > 用左右尖括号括起来的内容为非终结符∷=或→ 读做‘定义为’,→的左部由右部定义
| 读做‘或’ 表示右部候选内容
{ } 表示花括号内的内容可重复任意次或限定次数
[ ] 表示方括号内的内容为任选项 ( ) 表示圆括号内的内容优先
8
精选PPT课件
PL/0语言文法