コンパイラ 【compiler】

概要

コンパイラ(compiler)とは、人間に分かりやすく複雑な機能や構文を持つ高水準プログラミング言語(高級言語)で書かれたコンピュータプログラムを、コンピュータが解釈・実行できる形式に一括して変換するソフトウェア。

“compiler” の原義は「翻訳者」で、プログラミング言語で書かれた「ソースコード」(source code)を読み込んで解析し、コンピュータが直に実行可能な機械語や、それに相当する中間言語などで記述された「オブジェクトコード」(object code)に変換する。この変換工程のことを「コンパイル」(comple)という。

コンパイラが生成したオブジェクトコードはそのままでは実行可能でない場合が多く、リンカなど別のソフトウェアを用いて、起動に必要なコードを追加したり、必要なライブラリなどを結合(リンク)したりして実行可能形式のプログラムとする。コンパイルを含む一連の工程を「ビルド」(build)という。

一方、ソースコードを読み込みながら、逐次的に実行可能コードを生成して実行するソフトウェアを「インタプリタ」(interpreter:通訳者)という。コンパイルやリンクなどのビルド工程を経ずにソースコードをいきなり実行できるため、スクリプト言語の実行環境としてよく用いられる。

様々なコンパイラ

Javaや.NET言語など、CPUやオペレーティングシステム(OS)の種類に依存しない中間形式でプログラムを配布する言語では、実行時に実行環境固有のコード形式(ネイティブコード)に変換するコンパイラを「JITコンパイラ」(Just-In-Time compiler)あるいは「実行時コンパイラ」という。この方式では、開発時にソースコードから中間形式へ、実行時に中間形式からネイティブコードへ、2段階のコンパイルを行う。

デジタル家電などの組み込みソフトウェアの開発など、開発環境と実行環境が異なる場合、開発環境上で別の環境向けのオブジェクトコードを生成する「クロスコンパイラ」(cross compiler)という。実行プログラムは対象環境に送ってテストや実行を行う。

コンパイラとは逆に、コンパイル済みのオブジェクトコードを解析して元のソースコードに逆変換するソフトウェアを「デコンパイラ」(decompiler)あるいは「逆コンパイラ」という。高水準言語ではソースコードとオブジェクトコードの各要素は一対一に対応しないため、完全な復元は難しい。特に、変数名などのシンボルはコンパイル時に失われるため、オブジェクトコードから取り出すことはできない。

(2023.4.25更新)

他の用語辞典による「コンパイラ」の解説 (外部サイト)

資格試験などの「コンパイラ」の出題履歴

▼ ITパスポート試験
平25秋 問55】 プログラムの実行方式としてインタプリタ方式とコンパイラ方式がある。図は、データを入力して結果を出力するプログラムの、それぞれの方式でのプログラムの実行の様子を示したものである。
平23春 問81】 プログラム言語に関する次の記述 a~c のうち、適切なものだけをすべて挙げたものはどれか。a 機械語やアセンブリ言語で作成されたプログラムは、特定のCPUに依存することなく実行できる。

▼ 基本情報技術者試験
令6修7 問14】 コンパイラによる最適化の主な目的はどれか。
令5修7 問14】 コンパイラによる最適化の主な目的はどれか。
令3修7 問19】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。
令2修7 問18】 コンパイラによる最適化の主な目的はどれか。
平30秋 問19】 手続型言語のコンパイラが行う処理のうち,最初に行う処理はどれか。
平30修7 問20】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。
平30春 問18】 コンパイラによる最適化の主な目的はどれか。
平29修12 問19】 コンパイラにおける処理を字句解析,構文解析,意味解析,最適化の四つのフェーズに分けたとき,意味解析のフェーズで行う処理はどれか。
平29修1 問20】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。
平28修1 問19】 コンパイラの機能に関する記述として,適切なものはどれか。
平27修12 問20】 コンパイラによる最適化の主な目的はどれか。
平27秋 問19】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。
平26修7 問20】 手続型言語のコンパイラが行う処理のうち,最初に行う処理はどれか。
平26修6 問19】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。
平26修1 問24】 コンパイラによる最適化の主な目的はどれか。
平24修12 問25】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。
平24修1 問25】 手続型言語のコンパイラが行う処理のうち,最初に行う処理はどれか。
平23修12 問25】 コンパイラによる最適化の主な目的はどれか。
平23修1 問26】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。
平22秋 問22】 コンパイラによる最適化の主な目的はどれか。
平22修1 問23】 コンパイラの機能に関する記述として,適切なものはどれか。
平21修7 問21】 コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。(演算子,被演算子1,被演算子2,結果)この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。