[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]  


コンパイラのパスとその関連ファイル

コンパイラの全体的な制御構造は、 `toplev.c'にあります。 このファイルは、 初期化、引数のデコード、ファイルのオープンとクローズ、パスの実行順序に責任を持ちます。

解析パスは、 入力全体を解析するために、 一度だけ実行されます。 関数が解析されると、 その関数に対応するRTL中間コードが、 一度に一文ずつ生成されます。 個々の文は、 構文ツリーとして読み込まれ、 RTLに変換されます。 その後に、 その文に対応するツリーの記憶域が解放されます。 型(および、そのサイズを表す式)、宣言、 およびバインディングの輪郭(binding contour)とそのネストの仕方を表す情報のための記憶域は、 関数のコンパイルが終了するまで保持されます。 これらはいずれも、 デバッグ情報を出力するのに必要となります。

解析パスにおいて、 完全な関数定義、 またはトップ・レベルの宣言が読み込まれるたびに、 `toplev.c'の中の関数rest_of_compilation、 または関数rest_of_decl_compilationが呼び出されます。 この関数は、 必要な残余の処理すべての実行に責任を持ち、 最終的には、 アセンブラ言語を出力します。 コンパイラの、 解析パス以外のすべてのパスは、 rest_of_compilationの中で順々に実行されます。 コンパイルの対象がインライン関数でなければ、 この関数が関数定義のコンパイルから復帰したときに、 その関数定義のコンパイルに使われた記憶域が完全に解放されます。 (マクロと同程度に高速なインライン関数を参照)。

以下に、 コンパイラのすべてのパスと、 そのソース・ファイルを一覧にして示します。 `-d'オプションによってデバッグ用のダンプ出力を要求することのできる箇所 に関する説明もあります。

さらにいくつかのファイルが、 すべてのパス、 または多くのパスにおいて使われます。


[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]