独自の言語でコンパイラを書く 質問する

独自の言語でコンパイラを書く 質問する

直感的には、言語 のコンパイラ自体は Foo で記述できないと思われますFoo。より具体的には、言語 の最初のコンパイラはFooFoo で記述できませんが、それ以降のコンパイラは Foo で記述できますFoo

しかし、これは本当に本当でしょうか? 最初のコンパイラが「それ自体」で書かれた言語について読んだことを漠然と覚えています。これは可能でしょうか、可能であれば、どのようにでしょうか?

ベストアンサー1

これは「ブートストラップ」と呼ばれます。まず、他の言語 (通常は Java または C) で、その言語用のコンパイラ (またはインタープリタ) を構築する必要があります。それが完了すると、Foo 言語で新しいバージョンのコンパイラを作成できます。最初のブートストラップ コンパイラを使用してコンパイラをコンパイルし、次にこのコンパイルされたコンパイラを使用して、他のすべて (将来のバージョンを含む) をコンパイルします。

実際、ほとんどの言語はこのように作成されています。これは、言語設計者が自分が作成している言語を使いたいからという理由と、非自明なコンパイラが、言語がどの程度「完全」であるかを示す便利なベンチマークとして機能するからという理由があります。

一例として Scala が挙げられます。最初のコンパイラは Martin Odersky による実験的言語 Pizza で作成されました。バージョン 2.0 の時点で、コンパイラは Scala で完全に書き直されました。それ以降、新しい Scala コンパイラを使用して将来の反復で自分自身をコンパイルできるため、古い Pizza コンパイラは完全に破棄できるようになりました。

おすすめ記事