コンパイラ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
コンパイラ(compiler)とは、プログラミング言語で書かれたプログラムを、コンピュータが直接実行可能な機械語のプログラムに変換するソフトウェアである。また、コンパイラによる変換工程をコンパイルと呼ぶ。
コンパイル前のプログラムを特に「ソースコード」(原始コード)と呼び、反対にコンパイル後のプログラムを「オブジェクトコード」(目的コード)と呼んで区別する。オブジェクトコードが機械語ではない別のプログラミング言語である場合、あるいは扱う言語がプログラミング言語ではない言語処理系一般(TeXなど)の場合はコンパイラではなくトランスレータと呼ぶ場合がある。コンパイラでは多くの場合、ソースコードの言語は、人間向けの簡潔な言語(高級言語)であり、オブジェクトコードはコンピュータが直接実行可能な機械語(プログラミング言語に含めないこともある)である。機械語が特定のプロセッサ群の「固有語」であることから、機械語プログラムを「ネイティブコード」とも言い、またネイティブコードを出力するコンパイラを「ネイティブコンパイラ」という。
ソースコードをコンパイラによってコンピュータが直接実行可能なプログラムに変換して実行するプログラミング言語のことをコンパイラ言語と呼ぶ。これはインタプリタを介して実行されるインタプリタ言語と対比した言い方である。ただし、多くの言語は、コンパイルされる場合・インタプリタを使って実行される場合のいずれもあり、あくまでどちらが主流であるかを示すものである。コンパイラ言語・インタプリタ言語のどちらにも分類できない言語もある。一般に、コンパイラ言語は、言語仕様がコンパイラ向きに、インタプリタ言語は、言語仕様がインタプリタ向きになっている。
多くの場合、コンパイルされた機械語プログラムの実行は、インタプリタを介した実行より高速である。反面、開発時には動作テストのたびに比較的時間のかかるコンパイル作業が必要である。
コンパイラが出力するオブジェクトファイルは、実際に実行するコード以外に外部からの呼び出しをするための名前と、実行開始位置をセットにした情報を持っている場合があり、外部からコードを参照して実行することができる。場合によっては実行できるソフトウェアにするために、ほかのオブジェクトファイルとのリンクが必要なこともある。
- MS-DOS上でのオブジェクト .obj -> 実行形式 .COM EXE等
コンパイラは翻訳機と言えるもので、入力するプログラミング言語と対象となるCPUやオペレーティングシステムによるオブジェクトコード形式によって、違う形式のオブジェクトを生成する必要がある。一般的には1つのプログラミング言語を1つのオブジェクトコード形式に変換するものがよく使われる。
開発環境とは別の環境で実行できるコードを生成するコンパイラは、クロスコンパイラと呼ばれる。新しいコンピュータが開発されるとき、BIOSやOSなどもっとも基本となるプログラムについて、既存のものがそのままでは実行できない場合がある。あるいは、組み込みシステムやPDAなど、それ自体が開発環境を動作させるだけの性能を持たない場合がある。こういった場合、クロスコンパイラが必要になる。同じCPUの場合はセルフコンパイラ。
直接CPUで解釈実行可能なコードを生成せずに、中間コードを生成し、別のインタプリタによって実行するものもある。これを中間言語コンパイラ、バイトコードコンパイラなどと呼ぶ。インタプリタ・コンパイラとは呼ばない。インタプリタを作るためのコンパイラがあれば、インタプリタ・コンパイラと呼んでもよい。
コンパイラは、一般にソースコードを読み込み、トークンに分解する字句解析部、トークン列をもとにプログラムの構文木を構築する構文解析部、構文木からオブジェクトコードを生成するコード生成部からなる。加えて、コード生成の前段階で効率の高いコードに変換する最適化部を持つことがある。
プログラミング言語の文法規則からコンパイラの作成に必要な字句解析部・構文解析部を生成するソフトウェアをコンパイラコンパイラと呼ぶ。コンパイラコンパイラはコンパイラを全て生成するわけではなく、オブジェクトコードの生成部等は別途作らなければならない。
[編集] 関連項目
カテゴリ: コンパイラ | プログラミング | ソフトウェア開発ツール | 構文解析 (プログラミング)