2011-12-21 33 views
0

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

作业标签也应该添加到这个问题吗? – AusCBloke 2011-12-21 23:46:27

+0

@AusCBloke fixed – Takatakas 2011-12-21 23:48:22

回答

1

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

另一个提示是许多构造都涉及顺序执行,包括大多数简单表达式的类型。所以如果IL支持这个,它会简化一些事情;即没有目标标签装置继续下一个指令。这将简化IL序列的代码生成。

+0

你可以举一个例子来说明我在帖子中的代码吗? – Takatakas 2011-12-22 10:04:20

+0

@Takatakas - 不,我不能。这是你的功课,不是我的。 – 2011-12-23 07:15:29

+0

你真好。你一直很有帮助。我没有要求你为我写代码。我自己想清楚了。 – Takatakas 2011-12-23 21:34:59