1

現在、プログラムにデータを入力できるようにすることを目的としたパーサーを作成しています。使用される構文は、C から大いに影響を受けています。

一種のプリプロセッサのインライン置換を再生成することを楽しみにしています。

例えば

#define HELLO ((variable1 + variable2 + variable3))
int variable1 = 37;
int variable2 = 82;
int variable3 = 928;

事は...私は実際にCを使用しています。また、stdio.hの標準関数を使用してファイルを解析しています。それで...これを正しく効率的に機能させるには、どのようなテクニックを使用できますか?

標準コンパイラは、ストリームバッファを再コピーし、再コピーが発生したときにそこで置換を行うことによってテキストを置換しますか?それとも何ですか? より効率的なテクニックはありますか?

プリプロセッサと言うのは、最初に preproc ディレクティブがなくなるまですべてを代用し (再帰的なアプローチでしょうか?)、その後、実際のコンパイル ジョブを実行し始めるためだと思います。

知識不足ですみません!

ありがとう!

4

3 に答える 3

2

いいえ、最新の C コンパイラはプリプロセッサをテキスト プロセッサとして実装していませんが、さまざまなコンパイラ フェーズ (前処理はその 1 つです) が絡み合っています。これは、コンパイラ自体の効率と、エラーを元のソース コードに追跡できるようにするために特に重要です。

また、プリプロセッサを自分で実装するのは面倒な作業です。そのようなプロジェクトを開始する前によく考えてください。

于 2013-07-28T11:56:08.473 に答える
0

はい、プリプロセッサについては正しいです。プログラムの実行に必要なすべてのファイルを 1 つのファイルにまとめます。stdio.h. 次に、コンパイラがプログラムをコンパイルできるようにします。コンパイルしたいファイルは引数としてコンパイラに与えられ、コンパイラが使用する手法は、OS とコンパイラ自体によって異なる場合があります。

于 2013-07-28T10:52:21.163 に答える
0

C プリプロセッサは、テキストではなくトークンで動作します。特に、マクロ展開にはプリプロセッサ ディレクティブを含めることはできません。m4 などの他のプリプロセッサは、動作が異なります。

于 2013-07-28T11:16:10.370 に答える