1

Cとbisonで論理電卓を作ろうとしているのですが、Cにはboolean型がなくて困っています。

これは私の 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 は start の ascii です。F の出力は同じです。

T を入力すると 1 が $1 になり、F を入力すると 0 が $1 になるようにするにはどうすればよいですか?

4

2 に答える 2

2

私は Bison の専門家ではなく、Bison を使用してから長い時間が経ちました。Flex が間違っていると思われるため、Flex のマニュアルを読むことをお勧めします。ルールは、TRUE ではなくトークン タイプを返す必要があります。Bison には FALSE トークン タイプがありますが、そのタイプを返すルールはありません。あなたが欲しいのは

exp: BOOLEAN

Bison、およびブール文字列に対して TRUE ではなく BOOLEAN を返す Flex ルール。あなたも欲しくなる

%token BOOLEAN

%%

あなたのBisonファイルの先頭にあります。

このページの右側にある、flex と bison に関する他の人々の質問を示すリンクを見てください。

「C にはブール型がないため問題が発生しています」というコメントは正しくなく、C の型について無関係なアドバイスをするように人々を誤解させています。

于 2012-09-26T03:50:54.803 に答える
1

Cには、C99 標準のboolがあります。ヘッダー#include <stdbool.h>を使用してから、次の方法でブール型を使用できます。

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

つまり、標準の bool と同じです。

于 2012-09-26T02:34:27.453 に答える