编译原理第七章例题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

while ( a<5 AND b<10 )

{ a=a+1;

b=b+1;

}

答:三地址代码如下:

100: t:=a+b

101: if t

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

{

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

相关文档
最新文档