编译原理第七章例题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.写出下列表达式的三地址形式的中间表示。
(1)5+6 ⨯ (a + b);
(2)⌝A∨( B ∧ (C ∨ D));
(3)for j:=1 to 10 do a[j + j]:=0;
(4)if x > y then x:=10 else x:= x + y;
答:⑴100: t1:=a+b
101: t2:=6*t1
102: t3:=5+t2
⑵100: if A goto 102
101: goto T
102: if B goto 104
103: goto F
104: if C goto T
105: goto 106
106: if D goto T
107: goto F
⑶100: j:=1
101: if j>10 goto NEXT
102: i:=j+j
103: a[i]:=0
104: goto 101
⑷100: if x>y goto 102
101: goto 104
102: x:=10
103: goto 105
104: x:=x+y
105:
2.将语句if A V B>0 then while C>0 do C:=C+D翻译成四元式。
答:
100 (jnz,A,-,104)
101 (j,-,-,102)
102 (j>,B,0,104)
103 (j,-,-,109)
104 (j>,C,0,106)
105 (j,-,-,109)
106 (+,C,D,T1)
107 (:=,T1,-,C)
108 (j,-,-,104)
109
3.试将下述程序段翻译成三地址形式的中间代码表示。
while ( a+b<c OR a=b )
while ( a<5 AND b<10 )
{ a=a+1;
b=b+1;
}
答:三地址代码如下:
100: t:=a+b
101: if t<c goto 105
102: goto 103
103: if a=b goto 105
104: goto 112
105: if a<5 goto 107
106: goto 100
107: if b<10 goto 109
108: goto 100
109: a:=a+1
110: b:=b+1
111: goto 105
112:
4.While a>0 ∨b<0do
Begin
X:=X+1;
if a>0 then a:=a-1
else b:=b+1
End;
翻译成四元式序列。
解:
(1) (j>,a,0,5)
(2) (j,-,-,3)
(3) (j<,b,0,5)
(4) (j,-,-,15)
(5) (+,x,1,T1)
(6) (:=,T1,-,×)
(7) (j≥,a,0,9)
(8) (j,-,-,12)
(9) (-,a,1,T2)
(10) (:=,T2,-,a)
(11) (j,-,-,1)
(12) (+,b,1,T3)
(13) (:=,T3,-,b)
(14) (j,-,-,1)
(15)
5.写出表达式(a+b)/(a-b)-(a+b*c)的三元序列。
解:
①(+,a,b)
②(-,a,b)
③(/,①,②)
④(*,b,c)
⑤(+,a,④)
⑥(-,③,⑤)
6.按照三种基本控制结构文法将下面的语句翻译成四元式序列:
while (A<C ∧B<D)
{
if (A ≥ 1) C=C+1;
else while (A ≤ D)
A=A+2;
}。
解:该语句的四元式序列如下(其中E1、E2和E3分别对应A<C∧B<D、A≥1和A≤D,并且关系运算符优先级高):
100 (j<,A,C,102)
101 (j,_,_,113)
102 (j<,B,D,104)
103 (j,_,_,113)
104 (j≥,A,1,106)
105 (j,_,_,108)
106 (+, C, 1, C)
107 (j,_,_,112)
108 (j≤,A,D,110)
109 (j,_,_,112)
110 (+, A, 2, A)
111 (j,_,_,108)
112 (j,_,_,100)
113。