如何计算表达式临时变量数?编译器课程习题求解
表达式临时变量数计算:E1与E2的对比及方法解析
你的判断是对的——在课程介绍的简单代码生成技术下,E1和E2所需的临时变量数完全相同。下面详细解释计算方法及具体推导过程:
核心计算方法
这类基础代码生成策略的核心规则是:每执行一次二元加法运算,就用一个临时变量存储中间结果,直到最后将最终运算结果赋值给目标变量(如E1、E2)。
对于由n个操作数通过二元加法链式连接的表达式(无论左结合还是右结合),临时变量数NT的计算公式为:
NT = n - 2
- 当
n=2时,直接将运算结果赋值给目标变量,无需临时变量; - 当
n>2时,每增加一个操作数,就多一次中间运算,对应新增一个临时变量。
E1与E2的具体计算
两个表达式均包含5个操作数(e1、e2、e3、e4、e5),代入公式得:
NT = 5 - 2 = 3
E1(左结合:e1+e2+e3+e4+e5)的三地址码生成
- t1 = e1 + e2
- t2 = t1 + e3
- t3 = t2 + e4
- E1 = t3 + e5
使用的临时变量:t1、t2、t3(共3个)
E2(右结合:e1+(e2+(e3+(e4+e5))))的三地址码生成
- t1 = e4 + e5
- t2 = e3 + t1
- t3 = e2 + t2
- E2 = e1 + t3
使用的临时变量:t1、t2、t3(共3个)
内容的提问来源于stack exchange,提问作者Juliana Hill
相关产品推荐
相关产品推荐

