プログラムの実行方式としてインタプリタ方式とコンパイラ方式がある。図は,データを入力して結果を出力するプログラムの,それぞれの方式でのプログラムの実行の様子を示したものである。a,bに入れる字句の適切な組合せはどれか。 方式a の図: - ソースプログラム →(矢印)→ [a] - データ →(入力)→ [a] - [a] →(出力)→ 結果 方式b の図: - ソースプログラム →(矢印)→ [b] - [b] →(矢印)→ 目的プログラム - データ →(入力)→ 目的プログラム - 目的プログラム →(出力)→ 結果
平成25年度 秋期 ITパスポート試験 問55
この問題の解説と、これまでの解答の記録です。
問 55
不正解ア
a・b の両方をインタプリタとする組合せですが、b の図にはソースプログラムから作られる「目的プログラム」があり、データもその目的プログラムに入力されています。インタプリタは目的プログラムを作らずソースプログラムを直接解釈実行するので、b をインタプリタとするのは図と矛盾します。
- イ
正解 図で 2 つの方式を見分ける決め手は「目的プログラム (オブジェクトプログラム) が途中に現れるかどうか」です。方式 a の図には目的プログラムが存在せず、ソースプログラムとデータがそのまま箱 a に入り、そこから結果が出力されています。これはソースプログラムを 1 行ずつ解釈しながら実行時にその場で処理を行う動きで、インタプリタの働きそのものです。一方、方式 b の図ではソースプログラムがまず箱 b に入り、b が目的プログラムを生成します。データは b ではなく生成された目的プログラムに入力され、そこから結果が出力されます。これは実行前にソースプログラムをまとめて機械語 (目的プログラム) へ翻訳し、その後に翻訳済みプログラムを動かすという流れで、コンパイラの働きです。したがって a にはインタプリタ、b にはコンパイラが入り、正解は「イ」となります。
不正解ウ
a と b を入れ替えた組合せです。a の図には目的プログラムが無いのでコンパイラではなくインタプリタ、b の図には目的プログラムがあるのでインタプリタではなくコンパイラであり、両方とも逆になっています。
不正解エ
a・b の両方をコンパイラとする組合せですが、a の図ではデータが箱 a に直接入り、目的プログラムを経ずに結果が出ています。コンパイラは翻訳して目的プログラムを出力するのが役割で、自らデータを受け取って結果を出すわけではないため、a をコンパイラとするのは誤りです。
- インタプリタはソースプログラムを 1 行ずつ解釈しながら実行時にその場で処理するため、目的プログラムを作らない。実行のたびに翻訳するので実行速度は遅いが、その場で試しながら開発しやすい。
- コンパイラは実行前にソースプログラム全体をまとめて機械語の目的プログラムへ翻訳する。実行時は翻訳済みの目的プログラムがデータを処理するので実行速度が速い。図で目的プログラムが登場するかどうかが両方式を見分ける決め手になる。