1. pl/0语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的存储管理。
pl/0 语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。(数组 code 存放的只读目标程序,它在运行时不改变。)运行时的数据区 s 是由解释程序定义的一维整型数组,解释执行时对数据空间 s 的管理遵循后进先出规则,当每个过程包括主程序被调用时,才分配数据空间,退出过程时,则所分配的数据空间被释放。
应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题。
2. 若pl/0编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题,试写出下列程序执行到赋值语句b:=10时运行栈的布局示意图。
var x,y;
procedure p;
var a;
procedure q;
var b;
begin (q)
b∶=10;
end (q);
procedure s;
var c,d;
procedure r;
var e,f;
begin (r)
call q;
end (r);
begin (s)
call r;
end (s);
begin (p)
call s;
end (p);
begin (main)
call p;
end (main).
3. 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内容。
4. 指出栈顶指针 t,最新活动记录基地址指针 b,动态链指针 dl,静态链指针 sl 与返
回地址 ra 的用途。
t: 栈顶寄存器 t 指出了当前栈中最新分配的单元(t 也是数组 s 的下标)。
b:基址寄存器,指向每个过程被调用时,在数据区 s 中给它分配的数据段起始地址,
也称基地址。
sl: 静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址,
用以引用非局部(包围它的过程)变量时,寻找该变量的地址。
dl: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释
放数据空间时,恢复调用该过程前运行栈的状态。
ra: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的
地址,用以过程执行结束后返**用过程时的下一条指令继续执行。
在每个过程被调用时在栈顶分配 3 个联系单元,用以存放 sl,dl, ra。
5. pl/0 编译程序所产生的目标**是一种假想栈式计算机的汇编语言,请说明该汇编语
言中下列指令各自的功能和所完成的操作。
1) int 0 a
2) opr 0 0
3) cal l a
int 0 a
在过程目标程序的入口处,开辟 a 个单元的数据段。a 为局部变量的个数+3。
opr 0 0
在过程目标程序的出口处,释放数据段(退栈),恢复调用该过程前正在运行的过程的
数据段基址寄存器 b 和栈顶寄存器 t 的值,并将返回地址送到指令地址寄存器 p 中,以使调用前的程序从断点开始继续执行。
cal l a
调用过程,完成填写静态链、动态链、返回地址,给出被调用过程的基地址值,送入基址寄存器 b 中,目标程序的入口地址 a 的值送指令地址寄存器 p 中,使指令从a开始执行。
6.给出对 pl/0 语言作如下功能扩充时的语法图和 ebnf 的语法描述。
1) 扩充条件语句的功能使其为:
if〈条件〉then〈语句〉[else〈语句〉]
2) 扩充 repeat 语句为:
repeat〈语句〉until〈条件〉
1) 扩充条件语句的语法图为:
ebnf 的语法描述为: 〈条件语句〉::if〈条件〉then〈语句〉[else〈语句〉]
2) 扩充 repeat 语句的语法图为:
ebnf 的语法描述为: 〈重复语句〉::repeat〈语句〉until〈条件〉
编译原理作业集 第二章
1.程序语言的定义 2.高级程序语言一般结构和主要共同特征 3.正确理解上下文无关文法基本概念,包括 文法的定义 推导 句型 句子 语言 语法树 二义性等 4.chomsky文法分类 掌握和理解程序语言的定义 高级语言的一般特征及程序语言的语法描述。1.语法,词法规则与语法规则 2.语义和语义规则 ...
编译原理答案第二章
第二章词法分析 2.1 完成下列选择题 1 词法分析器的输出结果是 c a.单词的种别编码 b.单词在符号表中的位置。c.单词的种别编码和自身值 d.单词自身值。2 正规式m1和m2等价是指 c a.m1和m2的状态数相等 b.m1和m2的有向边条数相等。c.m1和m2所识别的语言集相等 d.m1和...
编译原理第二章习题
第2章习题。1 文法g s 为 s ac ab a ab b bc 写出l g s 的全部元素。答案 s ac abc 或s ab abc 所以l g s 2 令文法g为 n d nd d 0 1 2 3 4 5 6 7 8 9 1 g的语言l g 是什么?2 给出句子0568的最左推导和最右推导。...