大门|大门-CS-2003 |问题59

考虑下面所示的语法制导定义。

null
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;} 

这里,gen是一个生成输出代码的函数,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只使用一次,因此只生成一个临时变量。 这个问题的小测验

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享