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

时间:2015-03-26 18:56:34

标签: compiler-construction intermediate-code

FJUMP this context中的含义是什么?

  

以下是寄存器机器的三地址代码(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:

我认为三个地址代码中的跳转指令类似于"如果x转到L"?

1 个答案:

答案 0 :(得分:2)

相关摘录如下:

t1 = i LEQ n
FJUMP t1 BAZ

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

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


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