中间语言表示

编译器构成

编译器分为前端和后端:
前端:依赖于源语言,独立于目标机器。包括词法分析器、语法分析器、语义分析器和中间代码生成器。
后端:依赖于目标机器,独立于源语言。包括代码优化器和代码生成器。

中间语言表示

后缀表示

  • 如果EE是变量或常数,那么EE的后缀表示就是EE本身。
  • 如果EE是形式为E1 op E2E_1 \ op \ E_2的表达式,那么EE的后缀表示是E1 E2 opE_1^{\prime}\ E_2^{\prime} \ op,其中E1E_1^{\prime}E2E_2^{\prime}分别是E1E_1E2E_2的后缀表示。
  • 如果EE是形式为(E1)(E_1)的表达式,那么E1E_1的后缀表示也是EE的后缀表示。
  • 后缀表示不需要括号。

????(8 - 4) + 2 的后缀表示是8 4 - 2 +

图形表示

语法树有向无环图DAG

中间语言表示

三地址代码

三地址代码是语法树或DAG的一种线性表示。
一般形式:x:=y op zx := y\ op\ z,其中,如果x不是最终结果,那么x作为临时变量放在活动记录的临时变量区中。
????a:=(b+cd)+cda := (-b + c*d ) + c*d的DAG的三地址代码

t1 = -b;
t2 = c * d;
t3 = t1 + t2;
t4 = t2 + t3;
a = t4;