📜  门| GATE-CS-2003 |第59章

📅  最后修改于: 2021-07-02 18:21:11             🧑  作者: Mango

考虑下面显示的语法定向定义。

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仅使用一次,因此仅生成一个临时变量。
这个问题的测验