5

在阅读时,我遇到了“中级语言”和“3AC”这两个术语。

据我了解,IL 是源代码编译过程中的中间“步骤”。更具体地说,我正在阅读有关字节码(Java)和 C 的内容。

我解释它的方式(如果错了请纠正我)是;

源代码 1(例如 Lisp)-> 中间语言(C)-> 汇编语言-> 机器代码

源代码 2(例如 Java)-> 字节码-> Java 虚拟机

因此,基于此,我正在努力了解三地址代码(TAC/3AC)在哪里发挥作用,以及它的用途。

4

1 回答 1

8

三地址代码 (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

于 2010-11-02T00:47:15.213 回答