Compiler Structure

2017年11月11日 (土) 19:06時点におけるKumokosi (トーク | 投稿記録)による版 (ページの作成:「==コンパイラの特徴== コンパイラはいくつかのパスで構成されており、それぞれのパスは別々のプログラムとして実装されて...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

コンパイラの特徴

コンパイラはいくつかのパスで構成されており、それぞれのパスは別々のプログラムとして実装されています。これはユーザーにとって、それぞれのパスを個別に呼び出すする必要はなく、Cのコマンドとしてそれぞれのパスが自動的に実行されるということをこことに止めておいてください。機種に依存するパスはそれぞれのプロセッサで異なる名前がついています。例えば、86と名前につくのは8086用、68Kとつくのは68000用です。

それぞれのパスは以下の通りです。

CPP
プリプロセッサです。マクロや条件付きのコンパイルを取り扱います。
P1
文法や意味分析をするパスです。これはコードジェネレーターが読み出す中間コードを書き出します。
CGEN,CG86
コードジェネレーターです。アセンブラコードを生成します。
OPTIM,OPT86など
コードを改善します。オプションとして省略が可能で、大きくて、遅いコード生成時にコンパイル時間を減らします。
ZAS,AS86など
アセンブラです。実際は汎用用途のマクロアセンブラです。
LINK
リンクエディタです。オブジェクトファイルをライブラリとリンクします
OBJTOHEX
このユーティリティはLINKのアウトプットを適切な、実行ファイルフォーマット(.EXEや.PRG.、HEXなどの)に変換します。
これらのパスはこの順に呼び出されます。それぞれのパスはファイルを読み込み、次のパスが読み込むためのファイルを書き出します。それぞれの中間ファイルは特定のフォーマットを持ちます。CPPはマクロ定義がなく、マクロで拡張されたCコードを生成します。P1は中間コードでプログラムをもつファイルを書き出します。CGENはこのアセンブラコードを変換します。ASはオブジェクトコード、つまりリロケーション情報とシンボル情報を持ったコードバイトを含むバイナリフォーマット、を生成します。LINKはオブジェクトファイルと、オブジェクトファイルのライブラリを受け入れ、。別のオブジェクトファイルを書き出します。これは、最終的な形態で、リロケーション情報を保持しているものもあり、またほかのリンクコマンドへのインプットである場合もあります。


このほかにもユーティリティモジュールがあります。

LIBR
オブジェクトモジュールのライブラリを生成します。
CREF
Cもしくはアセンブラのクロスリファレンスリストを生成します。