1. ホーム
  2. compiler-construction

[解決済み] ブートストラップには外部からのサポートが必要

2023-01-26 12:23:47

質問

ある言語をブートストラップする、つまり、その言語自体のためのコンパイラやインタプリタを書くという考えを聞いたことがあります。 どのようにしてこれを達成できるのか不思議に思い、少し調べてみたところ、ある人が、それは以下のどちらかによってのみ可能であると言っているのを見ました。

  • 別の言語で最初のコンパイラーを書く。
  • アセンブリで初期コンパイラをハンドコーディングする。

私にとっては、これらのどちらも実際には ブートストラップ という意味で、どちらも実際に言語を立ち上げているようには見えません。 実際にそれ自身の言語でコンパイラーを書く方法はあるのでしょうか?

どのように解決するのですか?

<ブロッククオート

実際に独自の言語でコンパイラを書く方法はあるのでしょうか?

あなたは を持つ には、新しいコンパイラを書くための何らかの既存の言語が必要です。 もしあなたが新しい、たとえば C++ コンパイラを書くのであれば、C++ で書いて、まず既存のコンパイラでコンパイルするだけでしょう。 一方、新しい言語のコンパイラを作る場合、仮にYazzleofと呼ぶとすると、新しいコンパイラをまず別の言語で書く必要があります。 一般的には、他のプログラミング言語がそれにあたりますが、必ずしもそうである必要はありません。 アセンブリでもいいし、必要ならマシンコードでもいいのです。

もしあなたが をブートストラップする場合、一般的には完全な言語用のコンパイラを最初に書くことはないでしょう。 そのかわり、Yazzle-lite、つまり Yazzleof の可能な限り小さなサブセット (そう、) のためのコンパイラを書くことになるでしょう。 かなり小さい サブセット) 用のコンパイラを書きます。 そして Yazzle-lite で、完全な言語用のコンパイラを書くのです。 (Yazzle-lite は Yazzleof の適切なサブセットなので、これで自分自身をコンパイルすることができるコンパイラを手に入れることができます。

があります。 本当に

というタイトルの、可能な限り低いレベル (最近のマシンでは基本的に hex エディタです) からのコンパイラのブートストラップに関する良い文書があります。 何もないところからシンプルなコンパイラーをブートストラップする . これは次のサイトで見ることができます。 https://web.archive.org/web/20061108010907/http://www.rano.org/bcompiler.html .