在阅读时,我遇到了“中级语言”和“3AC”这两个术语。
据我了解,IL 是源代码编译过程中的中间“步骤”。更具体地说,我正在阅读有关字节码(Java)和 C 的内容。
我解释它的方式(如果错了请纠正我)是;
源代码 1(例如 Lisp)-> 中间语言(C)-> 汇编语言-> 机器代码
源代码 2(例如 Java)-> 字节码-> Java 虚拟机
因此,基于此,我正在努力了解三地址代码(TAC/3AC)在哪里发挥作用,以及它的用途。
在阅读时,我遇到了“中级语言”和“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;
资料来源: http://web.archive.org/web/20151010192637/http: //www.dound.com/courses/cs143/handouts/17-TAC-Examples.pdf