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

7. 根据标识符的作用域规则,分别给出图6.5的程序中,过程P、Q、R、S中有效的标识符。

21

第七章

1. 将算术表达式 (a+b)*(c+d)-(a+b+c) 翻译成四元式序列。 2. 将下列语句翻译成四元式序列:

a. IF x>0 THEN x:=0 ELSE x:=1 b. WHILE x>0 DO x:=x-1 c. IF x>0 THEN x:=x+1 ELSE

IF x <0 THEN x:=x+1 ELSE x:=x+1 d. WHILE x > 0 DO

WHILE y > 0 DO BEGIN y:=y-x; x:=x-1 END

3. 给出如下程序段的四元式序列。(四元式的操作符可用自身代替)。其中A:Array of [1..10]

of integer。 a:=1;

while a<=10 do begin if a<>b then

A[a]:=A[b]+2;

else a:=a+1; b:=b+1; end

4. 试将FOR语句翻译成四元式序列。 5. 试将UNTIL语句翻译成四元式序列。 6. 试将CASE语句翻译成四元式序列。

7. 试给出4、5、6题中翻译过程的语法制导程序。

22

第八章

1. 将下面的程序段划分为基本块并画出其程序流图。

read(A); read(B); F:=1; C:=A*A; D:=B*B; if C100 goto L2; goto L3; goto L1;

L1: E:=B*B;

L2: F:=F-1; L3: write(E);

2. 假设有如下语句序列,写出常表达式优化前和优化后的四元式中间代码。

(1) i:=1;

(2) a:=20; b:=a*(a+10);

c:=a*b;

j:=i*(i+1); k:=2*(i+j);

3. 假设有如下语句序列或表达式,写出公共表达式优化前和优化后的四元式中间代码。

(1) x:=x*y+z; y:=x*y+z; z:=x*y+z; (2) (a*b+c)/(a*b-c)+(c*b+a-d)/(a*b+c) while i<=100 do

begin end

u:=A*B; m:=u*u; S:=S+m*m; i:=i+1;

4. 写出如下循环语句不变式外提后的四元式中间代码。

5. 写出下面循环语句不变式外提后的四元式中间代码,其中数组各下标的类型为1..10。

while i<=100 do

begin

j:=1;

while j<=100 do

23

end

begin end

k:=1;

while k<=100 do

A[i][j][k]:=0;

24