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

Java 逻辑表达式和中间代码生成,java,compiler-construction,intermediate-language,Java,Compiler Construction,Intermediate Language,我设法得到了lexer、语法检查器和语义,现在我想继续中间代码生成。问题是我不知道如何处理逻辑表达式。我读了一些关于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 如果x>y和xy3 2

我设法得到了lexer、语法检查器和语义,现在我想继续中间代码生成。问题是我不知道如何处理逻辑表达式。我读了一些关于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
如果x>y和xy3
2:jmp_uu9
3:
但是,在实际完成对if语句的解析之前,跳转的标签是未知的

所以我必须生成四边形,然后对它们进行回补。我怎么能用这个语法呢


有人能解释一下它将如何进行,因为我真的很困惑。

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


另一个提示是,许多构造都涉及顺序执行,其中包括大多数类型的简单表达式。因此,如果IL支持这一点,事情就会简单化;i、 e.无目标标签表示继续下一条指令。这将简化IL序列的代码生成。

是否也应该在这个问题中添加家庭作业标记?你能给出一个我在帖子中的代码示例吗?你真好。你帮了大忙。我没有让你为我写代码。我自己想出来的。
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