纯纯傻逼课
本章主要是讲解中间代码的形式, 并使用上一章的方法完成程序部分的翻译.
Chapter-6: 中间代码生成
DAG
下面是两种表示形式

三地址编码的表示
x = y op z
a = b * b - c 有:
(1) 四元式序列如下:
| op | arg1 | arg2 | result | |
|---|---|---|---|---|
0 |
* |
b |
b |
t1 |
1 |
- |
t1 |
c |
t2 |
2 |
= |
t2 \mid |
a |
(2) 三元式序列
| op | arg1 | arg2 | |
|---|---|---|---|
0 |
* |
b |
b |
1 |
- |
(0) |
c |
2 |
= |
t2 \mid (1) |
(3) 间接三元式序列
| instruction | |
|---|---|
35 |
(0) |
36 |
(1) |
37 |
(2) |
| op | arg1 | arg2 | |
|---|---|---|---|
0 |
* |
b |
b |
1 |
- |
(0) |
c |
2 |
= |
t2 \mid (1) |
表达式的翻译
翻译成中间代码及其考验之前一章的内容.
运算翻译
使用E.code的拼接.

实时输出的增量编译:

数组输出
实时输出的增量编译:

控制流
控制流的”控制”主要是布尔表达式, 其文法如下:
\[B\to B \| B \mid B \&\& B \mid !B \mid (B) \mid E rel E \mid true \mid false\]设计SDT结果如下:

根据程序设计的语义, 比如a||b, 如果a为真, b语句可能就不会运行.
将布尔表达式翻译成没有任何布尔算符的三地址代码,运行时只计算部分表达式,称为“短路”或“转移”代码
回填技术
