0

2つのファイルを解析したい。パーサーを生成するYacc/lexコードがあります。

最初のファイル(a.txt)を解析すると正常に動作しますが、2番目のファイル(b.txt)を解析するとエラー(構文エラー)が返されますが、2番目のファイル(b.txt)を最初に解析すると解析できますスムーズに。

私の推測では、最初のファイルを読み取った後、2番目のファイルの読み取りを開始すると、一部のバッファーまたは状態がクリアされません。したがって、2番目のファイルの解析に進む前に、パーサーが維持するいくつかのバッファーまたは状態をリセットする必要があるかどうかを知りたいと思いました。

コードが大きすぎるため、ここにコードを貼り付けることができません。

前もって感謝します。

4

2 に答える 2

0

実際、私は他の質問を通してこれに対する答えを見つけました。問題はバッファをクリアすることだったので、

YY_FLUSH_BUFFER

新しいファイルを開く前に、それは問題を解決します。

于 2012-07-07T10:54:14.937 に答える
0

リエントラントパーサーが必要です。バイソンは少なくともこれをサポートしています。yaccがこれを行うかどうかはわかりませんが、バイソンに切り替えることは事実上無痛であるはずです。

%pure-parser文法ファイルを追加します。

http://www.delorie.com/gnu/docs/bison/bison_66.html

于 2012-06-08T09:06:23.150 に答える