-
Compiler Structure
提供: HI-TECH C for CP/M Fan WIKI(JP)
コンパイラの特徴
コンパイラはいくつかのパスで構成されており、それぞれのパスは別々のプログラムとして実装されています。これはユーザーにとって、それぞれのパスを個別に呼び出すする必要はなく、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もしくはアセンブラのクロスリファレンスリストを生成します。