2011-02-09 4 views
3

文字列を扱うとき(コメントのような独自の状態があります)、次の文字が "であるかどうか"を調べる必要があります。私の文字列の状態で文字列を終了しないでください(私は<STRING_STATE>.を使用し、手紙で手紙を処理します)。だから、最後の文字列があれば "とマークし、現在のisnt状態最後の文字をunputします。bison/flex:次の文字またはトークンを覗きます

これは奇妙な効果があります。文字列の行にエラーが発生すると、文字(通常は '、'または '))が2回表示されます。それが行の最後にある場合、副作用は2行としてカウントされます。 (エラーがない場合でも)。

どうすればこの問題を解決できますか?グローバル変数を作成し、文字列状態を残してYY_USerをハックして自分自身を修正するときにそれをマークする唯一のオプションですか?私はそれを避けたいと思っています。私はちょうど次の手紙やトークンを見ることができるクリーナーになることは可能ですか?

+1

こんにちは、フレックスタグはAdobeプログラミング言語に関連しているので削除し、より適切なgnu-flexタグを追加しました。 –

+0

@Andrea Spadaccini:今日はgnu-flexタグを見たのは初めてです –

+1

初めてのことです:)私はバイソンタグの近くのadobeアイコンを見たのでエラーに気付きました。少し疑わしい;) –

答えて

9

フレックスでは、/ルックアヘッド演算子を使用すると、将来のトークンで「先読み」することができます。したがって、「cd」が続く場合にのみ「ab」入力と一致するように、

ab/cd 

のようなルールが「ab」入力と一致します。これはflexが実際にこのルールの 'cd'にマッチすることを意味しますが、ルールのアクションを呼び出す前に入力バッファにプッシュバックするので、yytextには 'ab'しか表示されず、 'cd'次のトークンのためにもう一度読む

関連する問題