【问题标题】:Compiler intermediate code generation three address code fjump编译器中间代码生成三地址代码fjump
【发布时间】:2015-05-30 22:55:17
【问题描述】:
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:
我认为三地址代码中的跳转指令类似于“if x goto L”?
【问题讨论】:
标签:
compiler-construction
intermediate-code
【解决方案1】:
相关摘录为:
t1 = i LEQ n
FJUMP t1 BAZ
我的意思是“如果i 小于或等于n,则跳转到BAZ”。所以FJUMP 确实似乎表示条件跳转(当您阅读它时,请随意插入“if”和“goto”部分!)。
您必须了解三地址代码不是一种语言。它是具有相似特征的中间表示(语言)的类,与面向对象或函数式语言的类 不同。作为编译器开发人员,如果您选择使用这种中间表示,您可以设计您的三地址代码。
另一方面,我有一种感觉,编译器理论的学生倾向于阅读他们的教科书。如果您查看一堆相当现代的编译器,您可能会发现重复出现的模式,但它们往往在细节上存在很大差异。