我在研究Dragon Book,为我的DECAF编译器创建一个中间代码生成器。
我正在阅读backpatching方法,该方法建议对布尔表达式进行以下翻译:
我发现一切都很清楚。但是,当根据本书实现我的翻译时,我在使用if语句时发现了一个问题:
boolean a = false;
if(a){
x= 0;
}
我遇到的问题是我不知道如何在没有操作数的布尔表达式中管理变量。当我有这样的事情时:
if(x>200){
....
}
翻译工作正常。在我将单个变量作为控制流布尔表达式的情况下,任何人都可以告诉我该怎么做吗?
答案 0 :(得分:1)
添加" B - >变量"你的语法规则。
然后类似于规则5设置补丁。
答案 1 :(得分:1)
您需要发出某种测试和跳转运算符。例如,您可以假装if(a)
与if(a!=0)
相同(具有适当的类型安全性,但仍假设您的VM布尔值为0
)并以类似于E1 relop E2案例。 (这里E1是表达式,E2是文字0。)
龙书的例子没有考虑布尔变量;请注意,它有效地对true
和false
进行了常数折叠。这可能对教学目的有效;在实际编程语言中,布尔类型必须具有某种整数表示,并且需要对布尔变量进行适当的测试。