無料キャリア相談はこちら
資料請求はこちら(公式LINE)

コンパイラとは?仕組みやインタプリタ・アセンブラとの違いについて解説

更新: 2022.01.31

ITエンジニアの中でも、プログラマへ転身する場合にはプログラミング言語の習得が必須です。

プログラミング言語には多くの種類がありますが、各プログラミング言語の特徴などを調べるときに、専門用語を理解しているとより選びやすくなるでしょう。

今回は、プログラミングを学習する際に知っておきたい「コンパイラ」と、合わせて理解しておきたい「インタプリタ」や「アセンブラ」との違いについて解説します。

プログラミング学習を始めるための知識として活用してください。

※この記事は現役エンジニアによって監修済みです。

コンパイラとは

プログラミング言語の学習をする際に、知っておきたい用語の1つが「コンパイラ」です。

まずは、コンパイラが何なのか、どのような役割を果たすものなのかを確認していきましょう。

コンパイラは人間と機械の言葉をつなぐ役割を持つプログラム

コンパイラは、人間がC言語やJava言語などで書いたプログラムを、機械語へ翻訳する役割を果たします。つまり、人間と機械をつなぐための「プログラム」がコンパイラです。

システム開発やアプリケーション開発で、私たちが利用するプログラミング言語の多くは、人間が読めるように設計されています。コードに英単語が多いのはそのためです。

しかし、機械は「1」と「0」しか理解できませんので、人間が書いたプログラムをそのまま理解して実行することができません。そこで必要となるプログラムが「コンパイラ」です。

コンパイラは、人間の言葉を機械が理解できる言葉へ通訳・編集してくれます。

コンパイラは英語で編集者の意味

コンパイルとは英語表記で「compile」、「編集する」という意味を持っています。そして、コンパイラは英語表記で「compiler」、直訳すると「編集する者」という意味です。

その言葉の意味という観点で考えると、コンパイラは人間が書きやすい言葉や数式で書いたプログラムを、コンピューターが理解して実行できる機械語に翻訳してくれる編集者だといえるでしょう。

スキルゼロ・実務未経験でもITエンジニアになれる!

今年こそ、プログラミングをマスターしませんか?
テックキャンプはこれからのIT時代で自分の可能性を広げたい人を応援します。
  • プログラミングは難しくて挫折しそう
  • 独学でちゃんとスキルが身につくのか不安
  • 効率的にプログラミングスキルを習得する方法を知りたい
プログラミング学習やIT転職などでお悩みがある方は、ぜひ無料カウンセリングにお申し込みください。

コンパイラの構造・仕組み

コンパイラは、プログラミング言語を機械語に編集するために、5つのフェーズで構成されます。

ここでは、コンパイラの構造・仕組みを細分化して確認していきましょう。

字句解析

コンパイラはまず、字句解析を行います。字句解析とは、プログラムソースにどのような要素が含まれているのかを”ザっと見る”ことです。

プログラムソースは、コードの区切りである括弧やカンマの記号、命令のキーワードとなる「if」や「while」、また識別子や演算子といったもので構成されています。

このように文字列単位でコードを確認していく字句解析を行い、ソース全体を把握していくのです。

構文解析

字句解析でコード全体を確認したら、次に構文解析を行います。

構文解析では、先ほど字句解析で把握したコード全体から、構文構造になっているまとまりをチェックしていきます。

例えば、分岐構造となるif文や、繰り返しとなるwhile文単位に分けていくということです。

こうすることで、プログラム全体が命令ごとにまとまりはじめます。つまり、プログラム構造が分かってくるフェーズということですね。

中間コード生成

構文が分かったら、中間コードの生成を行います。

中間コードとは文字通り、人間が読めるプログラミング言語と、コンピュータが理解できる機械語の中間に当たる表現です。人間がギリギリ読める言語だといえるでしょう。

わざわざ中間コードを生成するのは、プログラミング言語と機械語の間に大きな隔たりがあり、直接翻訳することが難しいというのが理由の1つです。

誤解を恐れずにいえば、英語を日本語に同時通訳するよりも、一度書き起こして翻訳した方が簡単、というイメージですね。

こうして、中間コード生成を介すことで、プログラムコードの全体像を把握します。

最適化

最適化では、プログラムコードの処理を、より速く実行できるように効率化していきます。

実行時間が短いコードに編集していくことで、コンピューターがより理解しやすくなり、実行が速くなるのです。

例えば、命令実行回数を減らすために、同じ計算命令を削除(データフロー最適化)したり、同じ計算はループの外側で実行(ループ最適化)したりといった方法で最適化されます。

コード生成

最後に行われるのが、コード生成です。

コード生成では、最適化された中間コードの中から、使用する命令や実行順序、またレジスタの割り当てなどを確定して機械語の命令に変換します。

結果、コード生成時に無駄な命令が省かれてコードが短くなり、実行速度が速くなるということです。

また、それぞれのフェーズでは並行してエラーハンドリングが行われていますので、コンパイラがソースコードの矛盾を見つけるとエラーとして返ってきます

コンパイラ・インタプリタ・アセンブラの違い

コンパイラの説明などに一緒に出てくる用語として、「インタプリタ」や「アセンブラ」があります。

これらは混同しやすい用語ですので、しっかりと区別しながら確認していきましょう。

コンパイラはソースコードを一度にまとめて翻訳

まずはここまで紹介してきたコンパイラです。コンパイラは、プログラムを記述したファイルをまとめて翻訳するものでしたね。

学習段階でも業務でも、プログラミングをする前に、全体像と細かな設計までを完了させてからプログラミングに着手しなければなりません。

しかし、後述するインタプリタ型よりも処理速度が速いという特徴があります。

ソースコードを実行できるファイルへのコンパイルが必要なプログラミング言語を、「コンパイラ型言語」と表現します。C言語やJava言語が代表的です。

インタプリタは命令を1つずつ解釈・実行する

インタプリタは、プログラミングしたソースコードの命令を1つずつ解釈しながら実行する方式です。

コンパイラとは対照的な方式として、合わせて覚えておくとよいでしょう。

インタプリタは少しずつコードを実行していくので、その場ですぐに実行して結果を確認できるという特徴を持っています。

このような実行方法のプログラミング言語を「インタプリタ型言語」と呼びます。

また、記述ミスなどがあった場合には、その命令でプログラムが停止しますので、インタプリタ型言語はコンパイラ型言語よりもデバッグも容易です。

ただし、コンパイラ型に比べて処理速度が遅いという特徴があります。

例えば、近年需要が高まっている「Python」や「Ruby」などがインタプリタ型言語です。

アセンブラは機械語に近いアセンブリ言語を翻訳する

アセンブラは、アセンブリ言語を機械語に翻訳するプログラムのことです。

コンパイラ型言語と対比させるならば、C言語やJava言語に当たるものが「アセンブリ言語」、コンパイルに当たるものが「アセンブル」、コンパイラに当たるものが「アセンブラ」となります。

アセンブリは、機械語に近く、コンピューターへの命令を1対1で記述する言語です。そのため、コンパイラ型言語やインタプリタ型言語と比較すると、ソースコードの量が多くなります。

機械語に近いとはいえ、アセンブリも機械語に変換する必要がありますので、そこで利用するのが「アセンブラ」というプログラムだとイメージしておきましょう。

この記事のハッシュタグ

コンパイラの構成や仕組みを理解することでプログラミング言語の選択にも役立つ

コンパイラは、プログラミング言語を機械語へ翻訳するための重要なプログラムです。

コンパイラと混同しやすい「インタプリタ」や「アセンブラ」も合わせて区別することで、構築するシステムに合ったプログラミング言語の選択にも役立つでしょう。

また、学びやすさも異なりますので、それぞれの違いを理解するとプログラミング学習のやりやすさも変わってきます。

↑目次へ戻る

未経験からの転職の悩みを解決!無料カウンセリング開催中【転職成功人数4000名以上!※1

こんな不安や疑問はありませんか?
・未経験から転職して、本当に年収が上がるのか
・ITエンジニア転職後の働き方や稼ぎ方が想像できない
・スキルゼロからITエンジニアとしてフリーランスになれるのか

カウンセリングでは、ITエンジニア転職やプログラミング学習を知り尽くしたプロのカウンセラーが、あなたの悩み解決をサポートします。満足度93%※1、累計利用者数は42,000人以上!※2

無料で相談できますので、気軽にご参加ください。【テックキャンプは給付金活用で受講料最大70%オフ※4
※1.2018年10月24日〜11月16日(N=106)  2.2020年12月時点 3.テックキャンプ エンジニア転職は経済産業省の第四次産業革命スキル習得講座の認定も受けており、条件を満たすことで支払った受講料の最大70%(最大56万円)が給付金として支給されます

無料キャリア相談はこちら

この記事を書いた人

佐久森
テックライター 佐久森 福岡県出身の東京都在住。ITインフラエンジニア10年以上の経験から、IT技術全般を初心者向けに分かりやすく解説。また、ITエンジニアの働き方に関する情報などを執筆中。

あなたの理想のキャリアに合わせた、テックキャンプの2つのサービス

Advertisement