Car*_*los 5 compilation intermediate-language
在做一些阅读时,我遇到了"中间语言"和"3AC"这两个术语.
据我所知,IL是源代码编译过程中的中间"步骤".更具体地说,我正在阅读字节码(Java)和C.
我解释它的方式(纠正我,如果错了)是;
源代码1(例如Lisp) - >中间语言(C) - >汇编语言 - >机器码
源代码2(例如Java) - >字节码 - > Java虚拟机
基于此,我很难看到三地址代码(TAC/3AC)在哪里发挥作用,以及它的用途.
三地址代码(TAC)是大多数编译器中使用的中间表示.它本质上是一种通用的汇编语言,属于中级IR的低端.2,3或4地址代码的某些变体通常用作IR,因为它很好地映射到大多数汇编语言.
TAC指令最多可以有三个操作数.操作数可以是二进制算术运算符的两个操作数,第三个是结果位置,或者是与零比较的操作数和要分支到的第二个位置,依此类推.例如,下面的顶部是算术表达式,底部是TAC指令的翻译:
//Expresion
a = b * c + b * d;
//3AC
_t1 = b * c;
_t2 = b * d;
_t3 = _t1 + _t2;
a = _t3;
Run Code Online (Sandbox Code Playgroud)
资料来源:http://web.archive.org/web/20151010192637/http : //www.dound.com/courses/cs143/handouts/17-TAC-Examples.pdf
| 归档时间: |
|
| 查看次数: |
2632 次 |
| 最近记录: |