用C模拟野牛的布尔

时间:2012-09-26 02:29:26

标签: c bison flex-lexer

我正在尝试使用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美元?

2 个答案:

答案 0 :(得分:2)

我不是野牛专家,自从我使用它以来已经很长时间了,所以我建议你阅读the Flex manual,因为我认为你的Flex是错误的。您的规则需要返回令牌类型,而不是TRUE。在您的Bison中,您有一个FALSE令牌类型,但没有返回该类型的规则。你想要的是

exp: BOOLEAN

在Bison中,Flex规则为布尔字符串返回BOOLEAN,而不是TRUE。你也想要

%token BOOLEAN

%%

在Bison文件的开头。

请查看本页右侧的链接,其中显示了其他人关于弹性和野牛的问题。

您的评论“我遇到了麻烦,因为C没有布尔类型”是不正确的,误导了人们给出了关于C类型的无关建议。

答案 1 :(得分:1)

从C99标准开始,

C 确实有bool 。您可以使用标头#include <stdbool.h>,然后按以下方式使用布尔类型:

bool love = true;
if(love){
    //...
}

所以,就像标准布尔一样。