【问题标题】:Logical expressions and intermediate code generation逻辑表达式和中间代码生成
【发布时间】:2012-01-25 17:38:36
【问题描述】:

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

谁能解释一下它会怎样,因为我真的很困惑。

【问题讨论】:

  • 这个问题也应该加作业标签吗?

标签: java compiler-construction intermediate-language


【解决方案1】:

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

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

【讨论】:

  • 你能举个例子吗?
  • 你真好。你一直很有帮助。我没有要求你为我编写代码。我自己想通了。
猜你喜欢
  • 2010-10-31
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多