コンパイラとは?こんぱいら
コンパイラとは、人が書いた原始プログラム(ソースプログラム)を、実行する前にまとめて機械語の目的プログラムへ翻訳するソフトウェア。翻訳は字句解析(単語に切り分ける)→構文解析(文法どおりか調べる)→意味解析→最適化→コード生成の順に進む。翻訳を先に済ませるので、1文ずつ解釈しながら動かすインタプリタより実行は速いが、直すたびに翻訳し直す手間がかかる。最適化は「同じ動作のまま、より速く・小さく動く目的プログラムを作る」工程で、プログラムの結果を変えるものではない。
最終更新:2026-10-10
この語が出る過去問を解く →背景
コンピュータが直接動かせるのは0と1の機械語だけで、初期のプログラムは機械語や、それを記号に置き換えただけのアセンブラ言語で書かれていた。CPUごとに命令が違い、人が読んで直すのも大変だったため、人に近い言葉(高水準言語)で書いたものを機械が機械語へ一括で訳す仕組みとして生まれた。
具体例
大学の演習でC言語のプログラムを書き、gcc というコンパイラで翻訳すると、実行ファイル(Windowsなら .exe)ができる。この実行ファイルは翻訳し直さずに何度でも動かせる。ただしソースを1行直したら、もう一度コンパイルしないと変更は反映されない。分かれたファイルを1本の実行ファイルにまとめるのは、コンパイラの次に動くリンカの仕事。
試験での引っ掛け
最適化を「プログラムの誤りを直す」「動作を変えて速くする」と書いた選択肢は誤り。最適化は動作を変えずに効率を上げるだけ(fe-2016h-am-19)。また、別ファイルの関数への参照を結び付けるのはコンパイラではなくリンカ、主記憶へ読み込むのはローダ。「1文ずつ解釈して実行する」はインタプリタの説明で、コンパイラと向きが逆。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成28年度 春期 基本情報技術者試験 午前 問19(IPA)
コンパイラにおける最適化の説明として,適切なものはどれか。
正解:ソースコードを解析して,実行時の処理効率を高めたオブジェクトコードを生成する。
要点:最適化は動作を変えず実行効率を高める目的コードを生成する
最適化とは、コンパイラがソースコードや中間表現を解析して、同じ動作をするより効率のよい目的プログラムを生成することをいう。ループ内で変わらない計算をループの外へ出す、無駄な計算や到達しないコードを取り除く、変数をレジスタに割り付けるといった変換が行われる。実行速度や使用メモリの削減が目的であり、動作そのものは変えない。
出典:平成28年度 春期 基本情報技術者試験 午前 問20(IPA)解説で登場
リンカの機能として,適切なものはどれか。
正解:相互参照の解決などを行い,複数の目的モジュールなどから一つのロードモジュールを生成する。
要点:リンカは目的モジュールを結合し相互参照を解決する
コンパイラやアセンブラが出力する目的モジュールには、他のモジュールで定義された関数や変数への未解決の参照が残っている。リンカはこれら複数の目的モジュールやライブラリを結び付け、相互参照のアドレスを解決して、実行可能な一つのロードモジュールにまとめる。主記憶への読込みはローダの仕事であり、リンカとは役割が異なる。
出典:平成30年度 秋期 基本情報技術者試験 午前 問19(IPA)
手続型言語のコンパイラが行う処理のうち,最初に行う処理はどれか。
正解:字句解析
要点:コンパイラは字句解析→構文解析→意味解析→最適化の順
コンパイラは字句解析、構文解析、意味解析、最適化、コード生成の順で処理する。最初の字句解析では原始プログラムの文字列を、予約語・識別子・演算子といった意味をもつ最小単位(トークン)に切り分ける。
出典:平成30年度 春期 基本情報技術者試験 午前 問18(IPA)
コンパイラによる最適化の主な目的はどれか。
正解:プログラムの実行時間を短縮する。
要点:コンパイラの最適化が狙うのは目的プログラムの実行時間短縮
コンパイラの最適化は、不要な命令の削除、ループ内の不変な計算の外出し、レジスタの有効利用などによって、生成する目的プログラムの実行効率を高める処理である。狙いはあくまで実行時の速度向上(あるいはコードサイズの削減)であり、最適化を有効にすると原始プログラムとの対応が崩れてデバッグはむしろ難しくなり、コンパイル時間も延びる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。