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"?
答案 0 :(得分:2)
相关摘录如下:
t1 = i LEQ n
FJUMP t1 BAZ
我的意思是“如果i
小于或等于n
,请跳转到BAZ
”。所以FJUMP
确实似乎表示有条件的跳转(当你读它时,可以自己插入“if”和“goto”部分!)。
您必须了解三地址代码不是语言。它是具有相似特征的中间表示(语言)的类,与面向对象或函数语言的类不同。作为编译器开发人员,你可以设计三地址代码,如果您选择使用这样的中间代表。
另一方面,我感觉编译理论的学生倾向于从字面上阅读他们的教科书。如果你看一堆相当现代的编译器,你可能会发现重复出现的模式,但它们在细节上往往差别很大。