逻辑表达式和中间代码生成

时间:2011-12-21 23:39:36

标签: java compiler-construction intermediate-language

我设法获得词法分析器,语法检查器和语义,现在我想继续进行中间代码生成。问题是我不知道如何处理逻辑表达式。我读了一些关于E.true和E.false的文章。这个例子无处不在,但我不明白。

例如,如果我有以下代码

if x>y and x<y or x == 1 then
    //super duper code here
    x = x+1    
else
    //super duper wow code here
    y = y+1
endif

结果必须是这样的

1: > x y 3
2: jmp _ _ 9
3: < x y 7
4: jmp _ _ 5
5: == x 1 _
6: jmp _ _ 9
7: + 1 x $1
8: = $1 _ x
9: + 1 y $2
10: = $2 _ y

但跳转的标签在您实际完成解析if语句之前是未知的。

所以我必须生成四边形,然后再发送它们。我怎么能用这个post的语法来做呢?

有人可以解释它会如何发展,因为我真的很困惑。

1 个答案:

答案 0 :(得分:1)

是的,您应该生成符号/标签的分支目标。如果您的中间语言(IL)支持此功能,那么您可能根本不应使用数字指令位置。 (数字中间指令位置无助于最终的代码生成...因为它们不会简单地映射到最终指令的地址/偏移量。)

另一个提示是许多构造涉及顺序执行,并且包括大多数类型的简单表达式。因此,如果IL支持这一点,它会简化事情;即没有目标标签意味着继续下一条指令。这将简化IL序列的代码生成。