web-dev-qa-db-ja.com

その言語自体でプログラミング言語のコンパイラを書くことはどのように可能ですか

可能性のある複製:
最初のC++コンパイラをC++で作成するにはどうすればよいですか?

MicrosoftがJavaScriptの型付きスーパーセットである TypeScript と呼ばれる新しい言語をリリースしたことをおそらく聞いたことがあるでしょう。

私が不思議に思う最も興味深いことは、そのコンパイラがTypeScript自体で記述されているという事実です。

無知と呼んでもいいのですが、どうしてそうなるのか頭の中で本当に理解できませんでした。そもそもTypeScriptのコンパイラーをコンパイルするコンパイラーがないので、これは頭の中での鶏と卵の問題と同じです。プログラミング言語のコンパイラのコンパイラをその言語でどのように書くことが可能ですか?

8
tugberk

それは Bootstrapping. と呼ばれています。最初のバージョンは別の言語で書かれている必要があります。しかし、それが完了すると、以前に完成したコンパイラーで連続したバージョンを作成できます。

12
Tesserex

わずかな違いは、言語自体が解釈される場所であるため、コンパイラーは言語自体で作成され、インタープリターで実行されてコンパイルされます。これらの言語(通常、LISP)は、コンパイルおよび解釈されたコードに対して非常に異なるランタイム表現を持っていますが、コンパイルされた形式は同じセマンティクスを維持するために必要です。

1
ddyer