考虑算术表达式的语法规则 E → E1 – E2。生成的代码针对具有单个用户寄存器的 CPU。减法运算要求第一个操作数在寄存器中。如果 E1 和 E2 没有任何公共子表达式,为了得到尽可能短的代码
(A) E1 应该首先被评估
(B) E2 应该首先被评估
(C) E1 和 E2 的评估必须交错进行
(D) E1 和 E2 的求值顺序无关紧要答案:(乙)
解释:
E -> E1 – E2
鉴于 E1 和 E2 不共享任何子表达式,只有在 E1 之前对 E2 进行评估时,才会使用单用户寄存器来评估此产生式规则。这是因为当我们在寄存器中评估 E1 时,E2 已经被计算并存储在某个内存位置。因此,我们可以只使用减法运算将用户寄存器作为第一个操作数,即根据指令使用某个索引寄存器或其他形式引用的其内存位置中的 E1 和 E2 值。
因此正确答案应该是 (B) E2 应该首先被评估。
此解决方案由Vineet Purswani 提供。
这个问题的测验