【发布时间】:2016-02-02 01:08:18
【问题描述】:
我正在为玩具 Java 语言 (Decaf) 构建编译器,但在定义 bool 时遇到了麻烦。当我尝试分析一个布尔值时,它总是返回 false,无论我是否写了 false。
弹性代码:
true|false {
yylval.boolConstant = yytext;
return T_BoolConstant;
}
输入代码:
bool x = true;
bool y = false;
输出:
true T_BoolConstant (value = false)
false T_BoolConstant (value = false)
我尝试在 SO 上进行搜索,但这是最接近正确答案的方法:
Simulating Booleans in Bison with C
谢谢!
EDIT:输出被编码在一个单独的 c 文件中,该文件打印在测试代码中找到的字符串,它是什么类型的值(在这种情况下它是布尔值或 BooleanConstant),然后是值已保存的令牌。如有任何混淆,请见谅。
【问题讨论】:
-
boolConstant是什么类型?你是如何展示东西的?您显示的代码不显示任何内容。 -
yylval.boolConstant是什么类型?那是我问的另一件事。 -
yylval.boolConstant 是一个布尔值
-
@GabeB-David:在 C(和 C++)中,任何指针都可以转换为布尔值;
NULL转换为false,任何其他指针都转换为true。yytext是一个指针(指向一个字符串,它是当前标记),保证不是NULL。所以得出你自己的结论:-)
标签: c flex-lexer