在做一些阅读时,我遇到了“中级语言”和“3AC”这两个术语。
据我所知,IL是源代码编译过程中的中间“步骤”。更具体地说,我正在阅读字节码(Java)和C。
我解释它的方式(纠正我,如果错了)是;
源代码1(例如Lisp) - > 中级语言(C) - >部件 语言 - >机器代码
源代码2(例如Java) - >字节码 - > Java虚拟机
基于此,我很难看到三地址代码(TAC / 3AC)在哪里发挥作用,以及它的用途。
答案 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;