2012-04-27 11 views
1

この質問は定義、意味論についてです作る手順を明確にします。通訳セマンティクス:インタプリタが

私はなど、リアルタイムで、またはリアルタイムにあるいは単に実行時間前に「コンパイル」以降の中間キャッシュにマシンコードにソースを翻訳、通訳の一般的な概念を理解して

がありますソース>バイトコード変換ステップと、バイトコード>マシンコード変換ステップとの間で行わセマンティック区別?人々は通常、最初の部分を「解釈」と、2番目の手順を「コンパイル」と呼んでいますか?誤解しないでください、私は動的言語の範囲外のコンパイルの定義を求めていません。それは別の話題です。

さらに、非常に多くの異なるテクニックを実装する多数のインタープリタのために、これらの2つのステップを意味的に区別するのは無駄でしょうか?

答えて

2

典型的には、解釈がインタプリタにより任意の形態のプログラムの実行(普通ソースコード、抽象構文ツリー(AST)、バイトコード、...)を意味します。

一部の仮想マシンでは、プログラムの中間表現をネイティブマシンコードに変換(コンパイル)するJIT(時間的コンパイラのみ)を多用しています。これは間違いなくコンパイルの一形態です。

また、いくつかのVMはコンパイルのいくつかのフェーズを実行します。まず、ASTはバイトコードにコンパイルされ、後でマシンコードにコンパイルできます。私が言う

は、コンパイルは基本的に次の表現への一つの中間表現の転換を意味しています。言語の

get next instruction 
parse and interpret its components 
dispatch its translation 

の定義と意味が唯一のインタプリタで実装されているが、他の場所で定義されています:インタプリタが行う

+0

十分です。しかし、バイトコード命令がコード化されているので、バーチャルマシンが存在する必要があると私が理解しているところから、仮想マシンを立ち上げました。しかし、VMは通常、ソース>バイトコードステップも処理しますか?私はそれが主に実装に依存していると思いますか? –

+1

これは、[SOURCE> INTERMEDIATE]ステップを実行するパーサをVMの一部として認識するかどうかによって異なります。 –

+0

ああパーサー、それは私が存在していたと思っていた言葉です、ありがとう!インタプリタのパーサには似た言葉がありますか(パーサーが実行された後に来るのですか?) –

1

手順は通常と同様のループでプログラムされています。

あなたの質問への答えは、解釈またはコンパイルされているいずれかの言語の、正式運用と公理的意味論的な定義です。いずれの場合も、採用された実装技術にかかわらず、正式な言語定義のセマンティクスは保存され、解釈またはコンパイルに一貫性がなければなりません。

インタープリタやコンパイラなどの言語の実装は、正式な意味定義に対して、言語の各言語構成の実装をテストするテストスイートに対してテストされます。

言語設計者は、このような表示的意味論などの記号の形で言語の形式的な定義を生成します。この定義は数学的視点から非常に抽象的です。

コンパイラまたはインタプリタの実装者は、ターゲットマシン上で実行するコンパイラまたはインタプリタの構築に直接関係する、言語の操作上のセマンティック定義にもっと関心があります。

言語のユーザーは、プログラマーに言語の構文を使用してプログラムを作成する方法を知らせる、言語の公理的な定義にもっと関心があります。

関連する問題