我正在尝试使用C和Bison制作逻辑计算器,但我遇到了麻烦,因为C没有布尔类型。
这是我的Flex规则的一部分:
"TRUE" |
"T" |
"t" {yylval = 1; return TRUE; }
"FALSE" |
"F" |
"f" {yylval = 0; return TRUE; }
这是我的Bison规则的一部分:
line:
EOL
| exp EOL {printf("%d %d %d \n"), $1, $2,$$;}
;
exp: TRUE
| FALSE
;
当我在计算器中输入T后跟EOL(行尾)时,这是输出:
10 12 1
10为换行符的ascii,12为回车符的ascii,1为启动的Ascii 我对F有相同的输出。
如果我输入一个T,如果我输入F,那么1是1美元,而1是1美元?
答案 0 :(得分:2)
我不是野牛专家,自从我使用它以来已经很长时间了,所以我建议你阅读the Flex manual,因为我认为你的Flex是错误的。您的规则需要返回令牌类型,而不是TRUE。在您的Bison中,您有一个FALSE令牌类型,但没有返回该类型的规则。你想要的是
exp: BOOLEAN
在Bison中,Flex规则为布尔字符串返回BOOLEAN,而不是TRUE。你也想要
%token BOOLEAN
%%
在Bison文件的开头。
请查看本页右侧的链接,其中显示了其他人关于弹性和野牛的问题。
您的评论“我遇到了麻烦,因为C没有布尔类型”是不正确的,误导了人们给出了关于C类型的无关建议。
答案 1 :(得分:1)
C 确实有bool 。您可以使用标头#include <stdbool.h>
,然后按以下方式使用布尔类型:
bool love = true;
if(love){
//...
}
所以,就像标准布尔一样。