私はlexを使用することを強く要求しています。lexとyaccの入力ストリームを切り替える
フレックスユーティリティ(yy_switch_buffer、yy_create_buffer ...)に存在するlexのようなAPIを開発して、複数のバッファを切り替えることができます。私は私が含まれたファイルにバッファを切り替える必要があり#include
トークンに遭遇したとき、たとえば
- :
これは今まで私のための主要な難しさです。だから最初は現在の解析アクション(私は
fclose(yyin)
が失敗しました)を中断しなければなりませんパーサーは現在全体のyyinを完了します。メインファイルで使用されている構造体(例えば)を格納するためにインクルードされたファイルを解析する必要があるため、うまくいきません。
質問:パーサーをすぐに中断するにはどうすればよいですか? yyin = fopen(somefile, "r");
を使用して新しいバッファを定義すれば十分ですか?
切り替える方法の例を提供フレックスドキュメントの一部である「入力ファイルを含め、」なぜ、あなたは痛みを通過する必要があります他の場所で既に実装されているものを再実装するか? –
@JonathanLeffler私は選択肢がありません。複数のプラットフォーム(solaris、aix、win)のソリューションを開発していますが、ネイティブのlex既存のソリューションに問題が発生する可能性があるため、 – Aymanadou
それはほとんど意味がありません。ネイティブ 'lex'には問題があるかもしれないので、それを使う必要がありますか?一つのマシンで 'flex'を使ってコンパイルし、Flexから生成された転送されたCソースだけでなく、ネイティブマシン上のFlexライブラリ(' -lfl')をコンパイルするだけです。しかし、「フレックス」はそれらのマシンに軽く輸送することができます。 WindowsにはネイティブのLexはありません。 MKS Lex&YaccまたはCygwinをFlexで使用することもできます(文法が必要な場合はBisonも使用できます)。 –