私は、リアルタイム言語OpenPEARL用のレクサー/パーサーを実装しています。私のtestsuiteのより良いstruturingのために私はC/C++に似てインクルードファイルの処理を実装したい。それ自体パーサは訪問者を使用します。これを実装する最良の方法は何でしょうか?ネストされたパーサーをインスタンス化する際に私が気になることの1つは、インクルードされたファイルに含まれる場所に応じて完全なプログラムを含む必要はありません。ANTLR4:インクルードファイル処理のようなCを実装するための最善のアプローチは何ですか?
乾杯
マルセル
どのようにCで動作しますか? #includeディレクティブはどこでも*発生する可能性があります。言語文法にインクルード・ディレクティブが明示的に含まれている場合は、「include_directive」ルールの縮小時にストリーム・スタッキングを行うことができます。 (私のPARLANSEコンパイラ[これを参照してください]バイオ)。私はレクサーベースのものよりもこのアプローチを好んでいます... –
...しかし、プリプロセッサが言語に依存していないとき、私はパーサーでこれをどのように処理するかはわかりません。完全なCと完全なC++フロントエンドを構築します。 *レクサー*は、プリプロセッサー・トークンとストリーム切り替えの基本的な認識を行います。レキシコンとパーサーの間のプリプロセッサ・パスが、プリプロセッサ・ディレクティブの解析(コンプレックス式、文字列化などがある場合) –
まあ、パーサー・アプローチの例は見つかりません。一般的なアプローチに関するディスカッションのみ:https://groups.google.com/forum/#!searchin/antlr-discussion/include|sort:relevance/antlr-discussion/FUQbEtonUlw/zFKdMU9ADAAJそれをレクサー(または私がやったように入力ストリーム)で扱うことはまったく問題ありません。 –