三个地址码(TAC / 3AC)

时间:2010-10-20 20:42:11

标签: compilation intermediate-language

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

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

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

  

源代码1(例如Lisp) - >   中级语言(C) - >部件   语言 - >机器代码

     

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

基于此,我很难看到三地址代码(TAC / 3AC)在哪里发挥作用,以及它的用途。

1 个答案:

答案 0 :(得分:8)

三地址代码(TAC)是大多数使用的中间表示 编译器。它本质上是一种通用汇编语言,属于低端版本 中级IR。一些2,3或4地址代码的变体通常用作IR, 因为它很好地映射到大多数汇编语言。

TAC指令最多可以有三个操作数。操作数可以是两个操作数 到二进制算术运算符,第三个是结果位置,或者是操作数 比较为零和第二个分支的位置,依此类推。例如,下面 top是算术表达式,在底部是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