考虑下面所示的语法制导定义。
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