Compiler construction 编译器中间代码生成三地址代码fjump

Compiler construction 编译器中间代码生成三地址代码fjump,compiler-construction,intermediate-code,Compiler Construction,Intermediate Code,FJUMP在中是什么意思 以下是寄存器机器的三地址码(TAC)中间表示法:它包含一个名为foo的函数,该函数接受一个整数参数n和一个参数a,后者是一个整数数组。用类似Java的伪代码编写高级语言对应项 label Foo: res = 1 i = 1 label BAR: t1 = i LEQ n a[1] = res i = i ADD 1 res = res MUL i JUMP BAR label BAZ: 我认为三地址代码中的跳转

FJUMP在中是什么意思

以下是寄存器机器的三地址码(TAC)中间表示法:它包含一个名为foo的函数,该函数接受一个整数参数n和一个参数a,后者是一个整数数组。用类似Java的伪代码编写高级语言对应项

label Foo:
    res = 1
    i = 1
label BAR:
    t1 = i LEQ n
    a[1] = res
    i = i ADD 1
    res = res MUL i
    JUMP BAR
label BAZ:

我认为三地址代码中的跳转指令类似于“if x goto L”

相关摘录如下:

t1 = i LEQ n
FJUMP t1 BAZ
我的意思是“如果
I
小于或等于
n
,跳到
BAZ
”。因此,
FJUMP
确实似乎表示有条件的跳转(当您阅读它时,您可以自己插入“if”和“goto”部分!)

您必须了解三个地址代码不是一种语言。它是一类具有类似特征的中间表示(语言),与面向对象或函数式语言的类没有什么不同。作为一名编译器开发人员,如果您选择使用这样一种中间表示,您就可以设计三地址代码


另一方面,我有一种感觉,学习编译理论的学生倾向于过于逐字逐句地阅读教科书。如果你看一大堆相当现代的编译器,你可能会发现重复出现的模式,但它们在细节上往往有很大的不同