2012-01-09 5 views
3

私は、プログラミング言語(学習目的のためのおもちゃの言語)のハイライト/コード補完/構文解析を提供できるテキストエディタをQtに書くつもりです。フレックスとバイソンは他のソースからの入力を受け入れることができますか?

最初は手作りのC++を書くと思っていましたが、私はもっと身近なので、もっと快適になるはずです。しかし、検索すると、flex/bisonはパーサの作成を簡素化できることが分かりました。簡単な例をいくつか試してみると、実際の例は端末の標準入力からの入力を受け付けるようです。ですから、私は知っておきたいことは、GUIフレームワークのテキストエディタウィジェットからの入力をflex/bisonが受け入れることができることです(Qtなど、パーサーエンジンでいくつかの機能を終了した後に同時に学ぶつもりです)。その後、結果をテキストエディタに出力しますか?

答えて

5

flexは入力をyyinから読み取ります。あなたがそうでないものに指している場合stdin ...例えばhereを参照してください。

編集:btw、yyinFILE *です。 C++を使用しています。つまり、ストリームを渡す必要があります。フレックスのdocumentation on C++ interfacing

Edit2:あなたは、ルールのプログラミングyacc/bisonアクションとエラーハンドラの1つです。その意味で、あなたは何をすべきかについてかなりの自由を与えられています。たとえば、強調表示されたコードを「表示」し、エラーハンドラを使用してコードを分析するときにエラーを指摘することができます。補完により、意味(記号表など)の少なくとも一部を実装する必要がありますが、それは別の話です...

+0

ありがとうございました。私はこれについて勉強します。 – Amumu

6

FILE *ポインタを使用したくない場合は、 yy_scan_string()は、NULL終了文字列からバッファを作成し、yy_scan_bytesは、固定長文字配列からバッファを作成します。詳細については、flexドキュメントのMultiple Input Buffersを参照してください。

それがあなたのニーズを満たしていない場合、完全制御のためにYY_INPUTマクロを再定義することもできます - Generated Scannerを参照してください。

関連する問題