编译原理课后习题答案 下载本文

第九章

1.过程活动记录包含哪些信息?各信息的作用?何时填写它们?

2.下面是一个调用递归函数的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的内容是什么?当时整个运行栈的内容是什么? 3.对于下面的程序:

procedure P(X,Y,Z); begin

Y:=Y+1; Z:=Z+X; end P; begin A:=2; B:=3;

P(A+B,A,A); print A end

当参数传递的办法分别为(1)传值;(2)传地址;(3)值-结果;(4)传名时,程序执行时输出的A分别是什么?

4.应用Pascal语言的作用域规则,说明下面程序中的名字a和b的每一次出现所应用的声明。

program a(input,output);

procedure b(u,v,x,y:integer); var a:record a,b:integer end; b:reocrd b,a:integer end; begin

with a do begin a:=u;b:=v end; with b do begin a:=x;b:=y end; writeln(a.a,a.b,b.a,b.b) end; begin

b(1,2,3,4) end.

5.为下面的C程序构造一个可能的运行时环境。

int a[10];

char *a=”hello”; int f(int i,int b[]) { int j=1; A: { int i=j;

char c=b[I]; … } }

25

void g(char *s) { char c[10]; B: { int a[5]; ... } }

main() { int x=1; x=f(x,a); g(s);

return 0; }

(1)在进入函数f中的块A之后。 (2)在进入函数g中的块B之后。

6.Display表和静态链的作用是什么?试举一个程序例子,并考察其Display表和静态链的内容。

7.过程参数的传递方式有几种?简述\传地址\和\传值\的实现原理。

26

第十章 1. 2. 3. 4.

什么叫指令的执行代价? 寄存器分配的原则是什么?

在剥夺寄存器的时候,应考虑哪些因素?什么时候一个变量可以主动释放它所占 试写出程序段

IF x > 0 THEN y:=y+1 ELSE IF x < 0 THEN y:=y-1

的目标代码,其中的变量均为非形参实型变量。 5.

试写出程序段

WHILE x < y DO BEGIN y :=y + 1;

IF y > 0 THEN y :=y-x ELSE WHILE y < 0 DO y := y + x END

的目标代码,其中变量均为非形参实型变量。 6. 7. 8.

试为FOR循环语句设计目标代码。 试为REPEAT循环语句设计目标代码。 试为CASE语句设计目标代码。

用的寄存器?

27

28