コンパイラの解説(基本情報技術者シラバス用語)

目次

コンパイラとは

コンパイラとは、人間が記述したプログラミング言語のソースコードを、コンピュータが直接理解して実行できる形式(機械語)に、一括して翻訳するためのプログラムのことです。この翻訳する作業自体を「コンパイル」と呼びます。プログラムを実行する前にあらかじめ全てのコードを翻訳し、実行ファイル(Windowsの「.exe」など)を作成するため、プログラムの実行速度が非常に速いという特徴があります。ただし、翻訳の途中でコードに1箇所でも文法エラーがあると実行ファイルを生成できず、開発中に修正とコンパイルを繰り返す手間がかかるという側面もあります。

具体例

C言語やC++、Java、Go言語などのプログラミング言語がコンパイラ方式を採用しています。例えば、C言語で書かれたソースコード「main.c」をコンパイラに通すと、一瞬でコンピュータ専用のmain.exe が作成され、あとはそのexeファイルをダブルクリックするだけで超高速に動作します。

もう少し詳しく

コンパイラは、単に人間が書いたソースコードを機械語に一括翻訳するだけのプログラムではありません。その翻訳プロセスは非常に複雑で、複数の段階(フェーズ)を経て慎重に処理を進めます。一般的なコンパイラの処理は、「字句解析」「構文解析」「意味解析」「最適化」「コード生成」の5つのステップに大別されます。
まず「字句解析」では、ソースコードを英単語や記号といった最小の意味を持つ単位(トークン)に切り分けます。次に「構文解析」で、そのトークンの並びがプログラミング言語の文法ルールに正しく従っているかをチェックし、プログラムの構造を示す構文木(ツリー構造)を作成します。続く「意味解析」では、変数のデータ型が一致しているか、未定義の変数が使われていないかなど、文脈上の矛盾を検査します。
そして、コンパイラの最も重要な役割の一つが「最適化」です。これは、プログラムの実行速度をさらに速くしたり、メモリの使用量を減らしたりするために、無駄な処理を省略したり、効率の良い計算手順に並べ替えたりする高度な処理です。最後に「コード生成」のステップで、対象となるCPUやOSが直接理解できる最終的な機械語(またはアセンブリ言語)へと変換します。
このように、コンパイラは事前の翻訳に時間と手間をかける分、徹底的なエラーチェックと高度な最適化を行うため、完成したプログラムは非常に高速かつ安定して動作するという強力なメリットがあります。

試験でのポイント

情報処理技術者試験では、コンパイラとインタプリタの違いを問う問題が頻出します。「プログラム全体を一括して翻訳する(コンパイラ)」のか、「1行ずつ翻訳しながら実行する(インタプリタ)」のか、という実行方式の違いを正確に把握しておくことが得点源となります。
また、コンパイラの処理手順(字句解析→構文解析→意味解析→最適化→コード生成)を順番通りに並べ替える問題や、各フェーズの役割を問う問題もよく出題されます。特に「最適化」が、実行速度の向上やプログラムサイズの縮小を目的としている点は重要です。さらに、コンパイルエラーが出た場合、それは実行する前の翻訳段階で文法的な誤りが発見されたことを意味し、インタプリタのようにプログラムが途中まで動いてからエラーで停止するわけではない、という挙動の違いも理解しておきましょう。

関連する用語

関連用語として、1行ずつ翻訳と実行を同時に行う「インタプリタ」、コンパイルされた複数のファイルをつなぎ合わせて実行ファイルを作成する「リンカ」、人間が理解しやすい記号コードを機械語に変換する「アセンブラ」などがあります。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ