1. ホーム
  2. compiler-construction

[解決済み】独自の言語でコンパイラを書く

2022-04-07 02:45:15

質問

直感的には、言語用のコンパイラは Foo は、それ自体がFooで書けない。具体的には 最初 言語用コンパイラ Foo はFooで書けませんが、それ以降のコンパイラは Foo .

しかし、これは実際にそうなのだろうか?最初のコンパイラが "そのもの" で書かれた言語について読んだ記憶が非常に曖昧なのですが。それは可能なのでしょうか、また可能だとしたらどのように可能なのでしょうか?

解決方法は?

これをブートストラップ(bootstrapping)と呼びます。 まず、あなたの言語のコンパイラ(またはインタプリタ)を他の言語(通常はJavaまたはC)で構築する必要があります。 それが終わると、Foo言語で新しいバージョンのコンパイラを書くことができます。 あなたは最初のブートストラップコンパイラを使ってコンパイルし、このコンパイルされたコンパイラを使って他のすべて(それ自身の将来のバージョンも含む)をコンパイルするのです。

言語設計者は自分が作っている言語を使いたいし、自明でないコンパイラは言語がどの程度完成しているかのベンチマークとして役に立つことが多いからです。

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