编译原理第八章习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第八章习题答案

2、请将算术表达式翻-(a+b)*(c+d)+(a+b+c)翻译为:(1)四元式

(2)三元式

(3)间接三元式

答:

(2)三元式

(3)间接三元式

间接码表:

三元式:

4、修改图8.5中计算声明语句中的名字的类型及相对对峙的翻译方案,以允许在一个声明中可以同时声明多个变量名。

答:

翻译方案如下:

P->{ offset:= 0 } D

D-> D;D

D->L

L->id,L1 {

L.type = L1.type;

L.width = L1.width;

enter(id,name,L.type,offset;

Offset:= offset +L.width

}

L->:T{ L.type = T.type;

L.width = T.width;}

T->integer { T.type = integer; T.width:= 4 }

T->real { T.type= real; T.width:= 8 }

T-> array[num] of T1 { T.type:= array(num.val, T1.type);

T.width:= num.val X T1.width }

T->^T1 {T.type:=pointer(T1.type); T.width : = 4 }

7、利用8.11的翻译方案,将下面的赋值语句翻译成三地址代码:

A[i,j] = B[i,j] + C[A[k,l]]+D[i+j]

答:

令:

域宽为w

A的维数为:da1,da2, 不变部分为na, B的维数为db1,db2, 不变部分nb

C的维数为dc,不变部分nc

D的维数为dd,不变部分nd,

t1 := i*db1

t1:= t1+j

t2:= B-nb

t3:=w*t1

t4:=t2[t3]

xb = t4;

t1 := k*da1

t1:= t1+l

t2:= A-na

t3:=w*t1

t4:=t2[t3]

xa = t4;

t1:=xa;

t2:=C-nc;

t3:=w*t1

t4:=t2[t3]

xca:=t4

t1:=i+j;

t2:=D-nd;

t3:=w*t1;

t4:=t2[t3];

xd=t4;

t5:=xb+xca;

t6:=t5+xd;

t1 := i*da1

t1:= t1+j

t2:= A-na

t3:=w*t1

t2[t3]:=t6

相关文档
最新文档