【问题标题】: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”部分!)。

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2013-04-27
      • 1970-01-01
      • 2013-05-22
      • 2011-04-10
      • 2015-12-13
      相关资源
      最近更新 更多