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



我设法获得词法分析器,语法检查器和语义,现在我想转移到中间代码生成。问题是我不知道如何处理逻辑表达式。我读过一些关于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语句。

所以我必须生成四边形,然后对它们进行反向修补。用这篇文章的语法我怎么能做到呢?

谁能解释一下,我真的很困惑。

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

另一个提示是,许多结构涉及顺序执行,这包括大多数类型的简单表达式。如果国际货币基金组织支持这个,事情就会简化;即没有目标标签意味着继续下一条指令。这将简化IL序列的代码生成。

最新更新