用C模拟野牛的布尔
我正在尝试使用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是asline为换行符,12为ascii用于回车,1为Ascii用于启动我有相同的输出为F.
如果我输入一个T,如果我输入F,那么1是1美元,1美元是1美元?
我不是野牛专家,自从我使用它以来已经很长时间了,所以我建议您阅读Flex手册,因为我认为您的Flex是错误的。 您的规则需要返回令牌类型,而不是TRUE。 在您的Bison中,您有一个FALSE令牌类型,但没有返回该类型的规则。 你想要的是什么
exp: BOOLEAN
在Bison中,Flex规则为布尔字符串返回BOOLEAN,而不是TRUE。 你也会想要
%token BOOLEAN %%
在您的Bison文件的开头。
请查看本页右侧的链接,其中显示了其他人关于flex和bison的问题。
你的评论“我遇到麻烦,因为C没有布尔类型”是不正确的,误导人们给你关于C类型的无关建议。
C 确实有 C99标准的bool 。 您可以使用标头#include
,然后以下列方式使用布尔类型:
bool love = true; if(love){ //... }
所以,就像一个标准的布尔。