コンパイラとは何か?基本情報技術者試験で問われるポイントを解説!
更新日:2021年6月1日
作成したプログラムをコンピュータ上で動作させるためには、コンパイルという作業が必要となります。コンパイルを行うソフトウェアをコンパイラと呼び、プログラミングを行う上ではコンパイラを利用してプログラムを実行します。
近年ではコンパイルが不要なインタプリンタ言語の活用も増えてきましたが、大規模な開発ではやはりコンパイル型の言語が主流であり、システム開発を行う上でコンパイラの理解は必須となります。
基本情報技術者試験においても、コンパイラに関する問題が出題されます。この記事では、基本情報技術者試験の対策として、コンパイラの概要やその処理内容などについての解説を行います。
コンパイラとは
以下では、コンパイラの概要などについて解説を行います。
コンパイラの概要
コンパイラとは、高水準言語で書かれたプログラムをコンピュータが理解可能な形に変換する処理を行う言語プロセッサのことです。
コンピュータは0と1でできているという話を聞いたことがあるかもしれませんが、コンピュータの処理はすべて電荷の有無、つまり0と1だけで行われています。しかしながら、人が0と1だけでコンピュータの処理内容を記述するのは現実的ではありません。
そこで、人間がより分かりやすいようにCやJavaといったいわゆる高水準言語が作られ、高水準言語によりコンピュータの処理内容を記述するようになりました。
当然、高水準言語で記載された内容をコンピュータは理解できません。高水準言語で記載された内容をコンピュータが理解できるように変換するのがコンパイラの役目です。
コンパイラとインタプリンタの違い
プログラミングを学習している中で、プログラミング言語によりコンパイラ言語とスクリプト言語という違いがあるという話を聞くことがあるかもしれません。プログラミング言語には、その設計思想によりコンパイラを利用するものとインタプリタを利用するものに分かれます。
このうち、コンパイラを利用するのはコンパイル言語となります。
コンパイラ言語では、コンパイラによりソースコードを事前に一括変換します。よって、プログラムの実行時には余計な処理が不要となり、高速で処理を行うことができます。
一方でスクリプト言語では、実行のたびにソースコードをインタプリタにより一行ずつ解釈して処理します。実行の都度変換処理を行うため、スクリプト言語の実行速度は遅いものの、プログラムを作成するたびにコンパイルする手間はいりません。
一般的には、速度が重要視されるようなシステムではコンパイラ言語を利用します。一方で、トライアンドエラーでプログラムをどんどん修正していくようなシステムでは、生産性が高いスクリプト言語を利用するケースが多いです。
原始プログラムと機械語
上述の通り、コンパイラは高水準言語で書かれたソースコードをコンピュータが読めるように変換します。この、高水準言語で書かれたソースコードのことを原始プログラムとも呼びます。
一方で、コンピュータが読めるように変換を行ったものを機械語と呼びます。プログラミング言語のひとつであるアセンブラなどは、比較的機械語に近い言語として知られています。
コンパイラの仕組み
以下では、コンパイラの仕組みについて解説します。
コンパイル
コンパイルとは、コンパイラがプログラムをコンピュータが読み取れる形式に変換処理することを指します。
近年では、コンパイラの性能も向上しており、単に変換処理を行うだけではなく、プログラムの構文を解釈してプログラムの実行処理を上げるための最適化なども同時に実行します。
コンパイラは大きく以下の流れで変換処理を実施します。
項目 | 概要 |
---|---|
字句解析 | プログラムに記載されている内容を確認し、カンマやセミコロン等の記号やif、for等の命令文を識別する。 |
構文解析 | 字句解析で把握したプログラム中の記号や命令文をもとに、プログラムを構造単位ごとに分けていく。 |
中間コード生成 | 機械語の生成前に、原始プログラムと機械語の中間となる中間コードを生成する。プログラミング言語によっては中間コード生成までで処理を終了し、実行時に機械語に変換するものもある。 |
最適化 | プログラムを効率的に実行できるように不要な処理をコンパイラが識別し、削除・変換する。 |
機械語生成 | 中間コードを機械後に変換する。 |
リンク
リンクとは、複数のソースコードを結合することです。一般的にソースコードは開発しやすいように複数のファイルに分割されて作成されます。
これらのソースコードを結合し、一つのシステムとして生成するのがリンクの処理内容です。
また、プログラム内で外部ライブラリを利用している場合は、ライブラリの読み込みも行います。C言語であれば読み込むライブラリが記載されたヘッダーファイルを通してライブラリを読み込みます。
Javaなどの言語であれば、プログラム中に記載されたimport文等の命令からライブラリを読み込みます。
ロード
ロードとは、プログラムを実行するためにモジュールをメモリ上に配置することです。コンパイラにより機械語に変換されたプログラムは、実行時にメモリ上にロードされます。ロードは、ローダという仕組みにて行われます。
一般的にメモリ量は有限であるため、プログラムはディスクから必要な内容のみをロードします。メモリに余裕がない場合は、OSのメモリ管理の仕組みにより不要なプログラムをアンロードします。
まとめ
この記事では、基本情報技術者試験を受けようとされている方に向けて、コンパイラに関する解説を行いました。コンパイルはプログラミングを行う際に高頻度で実施する作業となりますので、コンパイラの理解は開発効率を高めます。
エンジニアの方やエンジニアを目指される方は、特にコンパイラの理解を深めておくとよいでしょう。