情報システムを勉強し始めた初心者です。
私の持っているテキストには以下のように書いてあります。
・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。
・「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。
つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。
しかし、以下のような問題がありました。
問題:
インタプリとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。
答え:
間違い。インタプリタではなく、コンパイラの説明になっている。
つまり、インタプリタはロードモジュールを作成しないということなのでしょうか?
どなたかご教授お願いいたします。
No.3ベストアンサー
- 回答日時:
> 「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。
> 「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。
既にここがあいまいですね。
ソースプログラムを実行状態まで持っていくには、コンパイラの場合
「ソースプログラム」→コンパイラ→「オブジェクトモジュール」→連係編集→「ロードモジュール」
→「プログラムローダー」:主記憶にロードして実行 と言う形です。
これに対してインタープリタは一文ごとに機械語に翻訳して逐次実行していきます。
この1回ごとの実行は普通ロードモジュールとは言いません。
> つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。
むりもありません。
> つまり、インタプリタはロードモジュールを作成しないということなのでしょうか?
上に書いたとおり逐次実行ではロードモジュールとは言いません。
蛇足ですが、英語の論文が5ページあってこれを事前に日本語に翻訳しておいて
これを日本人が読み上げるのがコンパイラー方式、
日本語文書がロードモジュールに当たります。
もし著者が1行づつ英語でしゃべり、それを通訳が1行づつ日本語に直してしゃべる。
これがインタープリター方式です。
インタープリター方式ではロードモジュールに相当すものが無いのにお気づきですね。
繰り返しになりますが、コンパイラーは事前翻訳、インタープリタは即時通訳です。
一長一短がありますので一つの言語で有りながらコンパイラとインタープリタの
2つを備えているものもあります。
No.7
- 回答日時:
> ・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。
言語プロセッサだと言語を処理するプログラム全般ですね。言語がプログラム言語とは限りませんし、処理が変換だけとは限りません。画面に表示したり(例えばWebブラウザはHTML言語プロセッサ)、何かを実行したり(自然言語を解釈して検索したり、インタプリタ言語で動作したり)。
「ソースプログラム」を「ロードモジュール」に変換するプログラムはコンパイラと言います。出力は必ずしもロードモジュールでなく中間言語コードだったりオブジェクトコードだったりもしますが。
インタプリタはマシン語以外で記述されたプログラムを逐次解釈して実行するプログラムのことです。ソースプログラムを解釈するものだけでなく中間言語コードを解釈するものもあります。
なお、最近のスクリプト言語ではインタプリタが内部に中間言語コンパイラを内蔵し、ソースプログラムを中間言語コードにコンパイルしてから中間言語コードを解釈して実行することが多いです。
# 昔のBASICも入力時に行ごとに内部コードに変換して実行してたけどね
No.6
- 回答日時:
ANo4さんの回答ですがいくつか誤解があります。
> 中間コードで動作するのが、VBなどのBASICと呼ばれている言語です。
VB6はネイティブコンパイラ、VB.2003以降は中間コードコンパイラです。
VB.NET、C#などの出力する中間コードは一応、EMCAで規格化されており、理論上はOSが異なっていても対応するCLRがあれば動作することになっています。その点でJavaと変わりません。ただし、.NET Frameworkはマイクロソフトが著作権を有しているので実際はクローズドな世界になっています。Unix/Linuxでも対応できるようにする試みもあるようですが。
http://www.itmedia.co.jp/enterprise/articles/040 …
> また、直接ソースを解析して動作するのは、ネットワーク系言語に多く、Perl,PHP,Rubyなどがあります。
Perl6、Ruby1.9は中間コードにコンパイラして実行します。ただし、コンパイラ結果をファイル出力する機能および出力した中間コードを実行する仕組みがありません。
No.5
- 回答日時:
インタープリータは、ロードモジュールは生成しません。
ロードモジュールというのは、そのままメモリにロードして、CPUを直接動かすことのできるプログラムのことです。ソースコードや、中間コードは含みません。
>私の持っているテキストには以下のように書いてあります。
>・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。
「ロードモジュール」と断定している点が間違いでしょう。言語の変換を行うプログラムはすべて「言語プロセッサ」ですから。
インタープリータは、ソースコードを直接、あるいは中間コードに変換されたものを、逐次解釈して実行するためのプログラムの意味と、ソースコードを中間コードに変換するプログラムの、両方の意味で使われます。
これを区別するために、実行時インタープリータ、前処理インタープリータ、などと呼ぶことがあります(定着した名前ではなく、その場ごとで微妙に呼び方は変わります)
あるいは、ソースコードを中間コードに変換するプログラムを、中間コードコンパイラと呼ぶこともあります。この場合はインタープリータというと実行時インタープリータの意味しかありません。
このへんは、いろいろと呼び方が混乱している感じです。
No.4
- 回答日時:
基本的に、コンパイラが出力するロードモジュールは機械語(バイナリ)であるため、対応するCPUでないと動作しません。
また、普通はOSも限定されます。
C言語やC++は、コンパイラ言語です。
異色なのは、Javaです。
これは、コンパイル型言語ですが、出力は仮想環境でのロードモジュールを出力しますので、これはCPUやOSが違っていても動作します。(動作は絶対でもないのかな?)
これ以外が、インタープリタ型言語となります。
インタープリタ型は、ソースをそのまま解析して実行するものと、中間コードに変換して中間コードファイルを実行するものとあります。
中間コードで動作するのが、VBなどのBASICと呼ばれている言語です。
(VBも中間コードを作成する操作を「コンパイル」と言っていたはずですが、分類としてはインタープリタです)
また、直接ソースを解析して動作するのは、ネットワーク系言語に多く、Perl,PHP,Rubyなどがあります。
また、ここで書いたことは絶対ではなく、Perlでもコンパイル型のもあったはずですので、例外はあります。
No.2
- 回答日時:
> インタプリタとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。
この問題の重要な点は「作成するプログラムである」というところでしょう。
インタプリタは言語プロセッサであると同時に、実行環境でもあります。
オブジェクトファイルを作成する「だけ」ということはほとんどありません。
翻訳した結果をファイルに出力すること自体がほとんどありません。
逆にコンパイラは変換だけを行い、それ自体で実行することはほとんどありません。
最近は、インタプリタ型言語で内部的にはコンパイルを行っていて、結果を出力して再利用できるものがある、等、境界が曖昧ですが。
No.1
- 回答日時:
> インタプリタはロードモジュールを作成しないということなのでしょうか?
作成しないものもあります。
昔のBASICとか、プログラム言語かどうか微妙ですが現在のVBAとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
- Visual Basic(VBA) VBAプログラム初心者です。 以下の問題のプログラムを表記してみたのですが、実行するためには、どこを 4 2023/01/19 20:04
- その他(プログラミング・Web制作) 大学一年でVBAのプログラミングを勉強しているものです。来週の情報の授業で以下の問題のプログラムを勉 4 2023/01/19 16:15
- 英語 会社で英語を使うことになっての英語の勉強方法 5 2022/07/03 11:49
- C言語・C++・C# 1. 仮想CPU「exmini」を使用して,「$dataからn減算する」プログラムを作成してください 2 2022/07/04 17:49
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
組み込みソフト。ROM領域にデータ
-
C++でデスクトップGUIアプリ開...
-
C++Builder → Visual C++ 移植...
-
変数の内容がコロコロ変わる、...
-
24bit サイズの変数
-
C言語でのコンパイラの作成方法
-
プログラミングの字句解析につ...
-
C++DLLの明示的リンクに関して
-
COBOLのALPHABET...
-
COBOLの論理演算子について質問...
-
HP-UXのプログラムをSolaris、R...
-
void型のポインタで構造体の参照
-
VB6のコンパイラ
-
組込みC開発
-
COBOL計算式の中間ワーク桁数に...
-
printfなど、標準関数のソース...
-
bcpadのコンパイラのインストー...
-
パーサとコンパイラの違いって?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++でデスクトップGUIアプリ開...
-
printfなど、標準関数のソース...
-
組み込みソフト。ROM領域にデータ
-
リリースモードとデバッグモー...
-
変数の内容がコロコロ変わる、...
-
cc と gcc の違い
-
COBOLの論理演算子について質問...
-
Visual Studio でmakefileを使...
-
PICでのI2C通信でのマスタ、ス...
-
COBOLのALPHABET...
-
<conio.h>?
-
VB6のコンパイラ
-
COBOL計算式の中間ワーク桁数に...
-
パーサとコンパイラの違いって?
-
関数形式マクロ dtaは戻り値が...
-
プログラミングって右脳よりの...
-
C++Builder → Visual C++ 移植...
-
24bit サイズの変数
おすすめ情報