考虑下面显示的语法定向定义。
S → id : = E {gen (id.place = E.place;);}
E → E1 + E2 {t = newtemp ( ); gen (t = El.place + E2.place;); E.place = t}
E → id {E.place = id.place;}
在这里,根是生成输出代码的函数,newtemp是返回在每次调用一个新的临时变量的名称的函数。假设ti是newtemp生成的临时变量名。
对于语句“ X:= Y + Z”,此定义生成的3地址代码序列为
(A) X = Y + Z
(B) t1 = Y + Z; X = t1
(C) t1 = Y; t2 = t1 + Z; X = t2
(D) t1 = Y; t2 = Z; t3 = t1 + t2; X = t3答案: (B)
说明:必须为B。生产E –> E + E仅使用一次,因此仅生成一个临时变量。
这个问题的测验