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 C
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