用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){ //... } 

所以,就像一个标准的布尔。