1

我正在尝试使用 C 和野牛制作一个逻辑计算器,但我遇到了麻烦,因为 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,我怎样才能做到 1 在 1 美元中,如果我输入 F,0 在 1 美元中?

4

2 回答 2

2

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

exp: BOOLEAN

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

%token BOOLEAN

%%

在 Bison 文件的开头。

查看此页面右侧的链接,这些链接显示了其他人关于 flex 和 bison 的问题。

您的评论“我遇到了麻烦,因为 C 没有布尔类型”是不正确的,并且误导人们向您提供有关 C 类型的不相关建议。

于 2012-09-26T03:50:54.803 回答
1

从 C99 标准开始,C确实具有布尔值。您可以使用标头#include <stdbool.h>,然后按以下方式使用布尔类型:

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

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

于 2012-09-26T02:34:27.453 回答