0

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”?

4

1 回答 1

2

相关摘录如下:

t1 = i LEQ n
FJUMP t1 BAZ

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

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


在旁注中,我有一种感觉,编译器理论的学生往往过于按字面意思阅读他们的教科书。如果您查看一堆相当现代的编译器,您可能会发现重复出现的模式,但它们往往在细节上存在很大差异。

于 2015-03-26T19:37:49.430 回答