この記事では、プログラミング言語と言語プロセッサについて、初心者にも分かりやすく、図解付きで丁寧に解説しています!
プログラミング言語
- プログラミング言語とは、コンピュータに命令を伝えるための言語。
- コンピュータが理解できる言語は機械語で0と1だけで書かれる。
- JavaやPython等、人間が理解出来る言語で書いたソースコード(原始プログラム)を機械語に翻訳するプログラムを言語プロセッサと呼ぶ。
言語プロセッサ
- コンパイラは原始プログラムを機械語に一括で翻訳するプログラム。
- インタプリタは原始プログラムを機械語に翻訳しながら命令を実行するプログラム。
統合開発環境(IDE)
- 統合開発環境とはプログラム開発に必要なツールをまとめた開発環境。
プログラミング言語には人間用と機械用がある
プログラミング言語とは、コンピュータに命令を伝えるための言語です。
人には人間語で話さないと伝わらないように、コンピュータにはプログラミング言語で命令しないと伝わりません。
プログラミング言語の中でも、コンピュータが理解できる言語は厳密には1つしかありません。それは、0と1だけで構成される機械語です。
しかし、0と1だけの機械語を使って人間が命令を書くのは難しいので、人間が理解出来るプログラミング言語で命令を書いて、これを機械語に翻訳します。人間用のプログラミング言語にはPythonやJava等、有名なものが沢山あります。ちなみに、人間用のプログラミング言語で記述したものを原始プログラム(ソースコード)と言います。
人間用のプログラミング言語は機械語に翻訳してから実行しますが、
この翻訳を行うプログラムを言語プロセッサと呼びます。
言語プロセッサは機械語に翻訳するプログラム
人間用言語で記述された原始プログラムをコンピュータは理解できないので、機械語に翻訳する必要があります。ここで登場するのが、言語プロセッサと呼ばれる、原始プログラムを機械語に翻訳するプログラムです。
代表的な言語プロセッサはコンパイラとインタプリタで、翻訳の仕方が違ってきます。
プログラミング言語によって使われる言語プロセッサは異なり、JavaやC言語はコンパイラ型の言語で、PythonやPerlはインタプリタ型言語になります。
コンパイラ型言語
コンパイラ型言語は原始プログラムを一括で機械語に翻訳します。
コンパイル
コンパイラ言語では、まず、原始プログラムを機械語で記述された目的プログラムに翻訳します。原始プログラムを機械語に翻訳することをコンパイル、コンパイルを実行するプログラムをコンパイラ、機械語に翻訳されたプログラムを目的プログラムと言います。
コンパイルは以下の手順で行います。
- 字句解析 :原始プログラムを単語単位で分解・解析します
- 構文解析 :字句解析した単語を文法的に正しい構文に直す
- 意味解析 :構文解析で作成した構文の意味を解析する
- 最適化 :効率よく命令を実行できるようにプログラムを変更する
- コード生成:機械語に変換する
リンク
ソフトウェア開発をする際、通常、複数のファイルに跨って原始プログラムを記述していきます。リンクでは、コンパイルした複数の目的プログラムを組み合わせて、実行可能なプログラムであるロードモジュールを作成します。リンクを実行するプログラムをリンカと言います。
インタプリタ型言語
コンパイラ型言語では、原始プログラムを一括で変換して目的プログラム・ロードモジュールを作成した後、ロードモジュールを呼び出すことでプログラムを実行しましたが、
インタプリタ型言語では、原始プログラムを1命令ずつ解釈しながらプログラムを実行します。
コンパイラ型言語とインタプリタ型言語の違い
プログラムの処理速度
コンパイラ型言語はあらかじめ原始プログラムを機械語に変換し、すぐに実行可能なロードモジュールを作成します。一方でインタプリタ型は原始プログラムを機械語に変換しながら命令を実行します。そのため、コンパイラ型言語の方がプログラムの処理速度の方がインタプリタ型言語より速い傾向にあります。
プログラム実行までの手間
コンパイラ型言語でプログラム実行をするためにはロードモジュールをあらかじめ作成しておく必要があります。一方でインタプリタ型言語は原始プログラムを書いた時点でプログラム実行をすることが出来ます。そのため、コンパイル型言語の方がインタプリタ型言語より手間が掛かります。
統合開発環境(IDE)
今まで見てきたように、原始プログラムを記述してからちゃんと動くプログラムになるまでには色々なプログラムが必要になります。このようなプログラムを1つずつ準備するのは大変なのですよね。なので、統合開発環境(IDE)という、これらのプログラムをまとめて提供するツールをよく使います。
統合開発環境(IDE)には、原始プログラムを記述するエディタ、コンパイラ、リンカ、バグを見つけやすくするデバッガなど、ソフトウェアを作成するために必要なツールがまとめられています。IDEの例に、OSSとして提供されているEclipseがあります。
基本情報、出るところだけまとめ!
コンパイル型言語は①原始プログラムを目的プログラムに翻訳するコンパイル、②目的プログラムをまとめるリンクを経て、実行可能なプログラムを作成する。
コンパイルは、字句解析→構文解析→意味解析→最適化→コード生成、を経て目的プログラムを作成する。
- 字句解析 :原始プログラムを単語単位で分解・解析します
- 構文解析 :字句解析した単語を文法的に正しい構文に直す
- 意味解析 :構文解析で作成した構文の意味を解析する
- 最適化 :効率よく命令を実行できるようにプログラムを変更する
- コード生成:機械語に変換する
インタプリタ型言語は1命令ずつ翻訳・解釈しながらプログラムを実行する。
統合開発環境はプログラム開発に必要なものを一つにまとめたツール。統合開発環境のOSSにEclipseがある。
基本情報技術者試験での出題例
サンプル問題問16、平成31年度春期問19
基本情報技術者
科目A サンプル問題問16、午前試験 平成31年度春期問19
インタプリタの説明として,適切なものはどれか。
ア 原始プログラムを,解釈しながら実行するプログラムである。
イ 原始プログラムを,推論しながら翻訳するプログラムである。
ウ 原始プログラムを,目的プログラムに翻訳するプログラムである。
エ 実行可能なプログラムを,主記憶装置にロードするプログラムである。
正解は”ア”
インタプリタは原始プログラムを1命令ずつ解釈しながら実行します。よって答えはアです。
平成30年度秋期問19
基本情報技術者
午前試験 平成30年度秋期問19
手続型言語のコンパイラが行う処理のうち,最初に行う処理はどれか。
ア 意味解析 イ 構文解析 ウ 最適化 エ 字句解析
正解は”エ”
コンパイラは以下の手順で行います。
字句解析→構文解析→意味解析→最適化→コード生成
平成30年度秋期問20
基本情報技術者
午前試験 平成30年度秋期問20
リンカの機能として,適切なものはどれか。
ア 作成したプログラムをライブラリに登録する。
イ 実行に先立ってロードモジュールを主記憶にロードする。
ウ 相互参照の解決などを行い,複数の目的モジュールなどから一つのロードモジュールを生成する。
エ プログラムの実行を監視し,ステップごとに実行結果を記録する。
正解は”ウ”
プログラムは複数のファイルに分けて記載することが一般的です。
そのため、コンパイルした結果出来る目的プログラムも複数に跨ります。
これら複数の目的プログラムが相互に作用できるよう、一つの実行可能なロードモジュールにするのがリンカです。
平成30年度春期問18
基本情報技術者
午前試験 平成30年度春期問18
コンパイラによる最適化の主な目的はどれか。
ア プログラムの実行時間を短縮する。
イ プログラムのデバッグを容易にする。
ウ プログラムの保守性を改善する。
エ 目的プログラムを生成する時間を短縮する。
正解は”ア”
最適化を行うことで効率よくプログラムを実行できるようになり、結果的に実行時間を短縮出来ます。
平成30年度春期問19
基本情報技術者
午前試験 平成30年度春期問19
ソフトウェアの統合開発環境として提供されているOSSはどれか。
ア Apache Tomcat
ウ GCC
イ Eclipse
エ Linux
正解は”イ”
Eclipseは統合開発環境として提供されているOSSです。
平成29年度秋期問8
基本情報技術者
午前試験 平成29年度秋期問8
Perlの実行に関する記述のうち,適切なものはどれか。
ア UNIX用として開発されており,Windows用の言語処理系はない。
イ 実行にWebサーバを必要とする言語であり,CGIの開発に適している。
ウ 動的デバッグは,言語処理系から独立したプログラムを実行して行う。
エ プログラムをコンパイルしたファイルを事前に用意する必要はない。
正解は”エ”
Perlはインタプリタ型言語なので、コンパイルしたファイルを事前に用意する必要はありません。
この問題は正直捨てで良いと思います・・・