私の問題は、flex-bison scanner-parserを使ってコード化した問題を実行しようとしていることです。私のプログラムは、ユーザーの入力(私の場合、私が設計しているデータベースシステムのクエリ)、lexと解析を行い、対応するアクションを実行します。実際には、私のパーサー・コードが、私がそれをフィードしている文字列リテラルを正しく解釈していないことが起こります。BisonはCの文字列リテラルを適切に認識していないようです
は、ここに私のコードです:
130 insertexpr : "INSERT" expr '(' expr ')'
131
132 {
133 $$ = new QLInsert($2, $4);
134 }
135 ;
そして、私の入力、 "クエリ:" 次のプロンプトが表示されます
クエリ:INSERTのABC(5);
入力:1.0-5:構文エラー、予期しない文字列、ファイルの終わりまたは行の終わりまたはINSERTまたは ';'
ここで、130行目のparser.yyコードから "INSERT"文字列リテラルを削除すると、プログラムはうまく動作します。実際には、入力データ(つまり、 "abc"と整数5)を格納した後、それが正しく戻されて正しく表示されます。
まず、これは文字エンコードの問題だと思っていました。 Bisonコードは、同じエンコーディングを使用してコンパイルして実行する必要があります。これは、同じ端末からコンパイルして実行しているときには問題ではありません。
私のシステムの詳細:
のUbuntu 8.10(Linuxの2.6.24-16-ジェネリック)
2.3
フレックス2.5.34
バイソンのgcc 4.2.4
あなたがこれ以上必要な場合情報やコードは、私に教えてください!