编译原理第十章习题
一、 问答题
问答第1题
下面的程序执行时输出的a分别是什么?若
(1) 参数的传递办法为"传值";
(2) 参数的传递办法为"传地址"。
program main (input,output);
procedure p(x,y,z);
begin
y∶=y+1;
z∶=z+x;
end;
begin
a∶=2;
b∶=3;
p(a+b,a,a);
print a
end.
问答第2题
过程参数的传递方式有几种?简述"传地址"和"传值"的实现原理。
问答第3题
下面是一个Pascal程序
program PP(input,output)
var K:integer;
function F(N:integer):integer
begin
if N< =0 then F:=1
else F:=N * F(N-1);
end;
begin
K:=F(10);
...
end;
当第二次(递归地)进入F后,DISPLAY的内容是什么?当时整个运行栈的内容是什么?
问答第4题
对如下的Pascal程序,画出程序执行到(1)和(2)点时的运行栈。
program Tr(input,output);
var i:integer; d:integer;
procedure A(k:real);
var p:char;
procedure B;
var c:char;
begin
...(1)...
end; {B}
procedure C;
var t:real;
begin
...(2)...
end;{C}
begin
.....
B;
C;
.....
end;{A}
begin{main}
...
A(d);
...
end.
问答第5题
有如下示意的Pascal源程序
program main;
var a,b,c:integer;
procedure X(i,j:integer);
var d,e:real;
procedure Y;
var f,g:real;
begin
...
end;{Y}
procedure Z(k:integer);
var h,i,j:real;
begin
...
end;{Z}
begin
.....
10:Y;
.....
11:Z;
.....
end;{X}
begin
.....
X(a,b);
.....
end.{main}
并已知在运行时刻,以过程为单位对程序中的变量进行动态存储分配。当运行主程序而调用过程语句X时,试分别给出以下时刻的运行栈的内容和DISPLAY的内容。
(1)已开始而尚未执行完毕的标号为10的语句。
(2)已开始而尚未执行完毕的标号为11的语句。