2017-06-17 11 views
0

1 Pythonで実装されたPythonインタプリタが見つかりました。インタープリタ自体を解釈するために他のインタープリタをインストールする必要があるのか​​どうか混乱しますか? もしそうなら、解釈する言語で通訳を書くのはどうしてですか?そうでない場合は、どうすればこの通訳を実行できますか?PythonインタプリタはPythonで実装できますが、どのインタプリタがインタプリタ自体を解釈しますか?

2コンパイルする言語で実装されているコンパイラについてはあまり明確ではありません。インタプリタとコンパイラにも同じ理由がありますか?

答えて

0

はい、それを実行するには他のインタープリタが必要です。コンパイラの場合は、別のコンパイラでコンパイルしてから、その実行可能コードを使用してソースコードを再度コンパイルすることができます。 https://en.wikipedia.org/wiki/Bootstrapping_(compilers)

0

1 + 2 * 3のような簡単な数式を解釈できるプログラムを書くとすれば、プログラムはC言語で書かれています。

// bash 
> ./calculate "1 + 2 * 3" 
> 7 

したがって、C言語プログラムは単純な数学の言語を解釈できます。

明らかに、このプログラムを書くために、Cの代わりにRubyまたはPythonを選択することができます。最後に、RubyまたはPython言語プログラムは数学言語を解釈できます。

プログラムでPythonなどのより複雑な言語を解釈させましょう。それから私たちはそれを得た。 Python言語プログラムはPython言語を解釈します。

したがって、どの言語でも任意の言語を解釈できます。

コンパイラはソースコードをマシンコードにコンパイルするため、CPUで直接実行できるため、インタプリタはソースコードをバイトコードに変換するため、仮想マシンで実行できます。唯一の違いは、CPUはすでに存在していますが、仮想マシンを最初にコンパイルする必要があることです。

私の貧しい私の英語です。

0

(別のユーザーが正しく答えたとして、ブートストラップと呼ばれる)は、この技術の理由の一つは、次のようにコンパイラの最適化と作品(おおよそ)の異なる技術を使用することができます。

は、あなたが作業コンパイラを持っていると仮定Yは、言語Xを、例えばアセンブリ言語にコンパイルする。次に、このコンパイラは、言語Xで書かれたプログラムを、マシン上で理解可能で実行可能な形式(リンク後など)に変換するために必要なすべてのものです。

ここでは、このコンパイラはコアの面ではよく書かれていますが、他の面ではあまりよく書かれていないと思います(たとえば、長いcase文の評価が非常に遅いなど)。

あなたは、言語Xのサブセット(コンパイラYで実装されている)のみを使用して完全な言語Xを書き換え、前述の長いcase文(例)の評価を最適化します。

コンパイラZを使用すると、言語Xのプログラムが言語Xのコア文のみで評価されます。コンパイラYを使用すると、アセンブリ言語に変換できるようになりました。

一般的に、コンパイラの長い行のある時点では、実際に有効なマシン命令を生成するコンパイラが1つある必要があります。そうしないと、素晴らしいプログラムを実行できなくなります(ただし、 。

EDIT @merito:コンパイラは、ソース言語のプログラムをバイナリコードにすることができますが、ターゲット言語に変換しますが、必ずしもそうする必要はありません。インタプリタとコンパイラの違いは私には間違っているようです。

関連する問題