-1

パーサー ファイルを実行すると、次のエラーが発生します (Flex/Bison ファイルのコンパイル後にバイナリが取得されます)。 error: syntax error, unexpected TKN_PRIMARY, expecting end of file

フレックスコードで定義されたルールは次のとおりです。

<PRIMARY_MME_STATE>{number} {
 lexVal = YYText();
 std::cout<<"PRIMARY MME -->  "<<lexVal<<std::endl;
 yylval->strVal = new std::string(lexVal);
 return token::TKN_PRIMARYMME;
 }

そして、私の理解では、 TKN_PRIMARY の値がゼロであるため (これは END %token END 0 「ファイルの終わり」に定義された値です) TKN_PRIMARY を返す代わりに、トークン END が返されることを期待しています。私の理解が正しければコメントしてください。また、この問題に取り組む方法。

4

1 に答える 1

1

TKN_PRIMARYとが同じ値を持つ場合END(または、一般に、2 つの異なるトークンが同じ値を持つ場合)、bison パーサーは予測できない方法で動作します。

バイソンのマニュアルを引用:

ただし、一般的には、Bison にすべてのトークン タイプの数値コードを選択させるのが最善です。Bison は、コード同士や通常の文字と競合しないコードを自動的に選択します。

それが間違いなく問題に対処する最善の方法だと思います。

于 2013-05-21T19:27:11.653 に答える