编译器构成
编译器分为前端和后端:
前端:依赖于源语言,独立于目标机器。包括词法分析器、语法分析器、语义分析器和中间代码生成器。
后端:依赖于目标机器,独立于源语言。包括代码优化器和代码生成器。
中间语言表示
后缀表示
- 如果EEE是变量或常数,那么EEE的后缀表示就是EEE本身。
- 如果EEE是形式为E1 op E2E_1 \ op \ E_2E1 op E2的表达式,那么EEE的后缀表示是E1′ E2′ opE_1^{\prime}\ E_2^{\prime} \ opE1′ E2′ op,其中E1′E_1^{\prime}E1′和E2′E_2^{\prime}E2′分别是E1E_1E1和E2E_2E2的后缀表示。
- 如果EEE是形式为(E1)(E_1)(E1)的表达式,那么E1E_1E1的后缀表示也是EEE的后缀表示。
- 后缀表示不需要括号。
?(8 - 4) + 2 的后缀表示是8 4 - 2 +
图形表示
语法树有向无环图DAG

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

被折叠的 条评论
为什么被折叠?



