[解決済み】独自の言語でコンパイラを書く
2022-04-07 02:45:15
質問
直感的には、言語用のコンパイラは
Foo
は、それ自体がFooで書けない。具体的には
最初
言語用コンパイラ
Foo
はFooで書けませんが、それ以降のコンパイラは
Foo
.
しかし、これは実際にそうなのだろうか?最初のコンパイラが "そのもの" で書かれた言語について読んだ記憶が非常に曖昧なのですが。それは可能なのでしょうか、また可能だとしたらどのように可能なのでしょうか?
解決方法は?
これをブートストラップ(bootstrapping)と呼びます。 まず、あなたの言語のコンパイラ(またはインタプリタ)を他の言語(通常はJavaまたはC)で構築する必要があります。 それが終わると、Foo言語で新しいバージョンのコンパイラを書くことができます。 あなたは最初のブートストラップコンパイラを使ってコンパイルし、このコンパイルされたコンパイラを使って他のすべて(それ自身の将来のバージョンも含む)をコンパイルするのです。
言語設計者は自分が作っている言語を使いたいし、自明でないコンパイラは言語がどの程度完成しているかのベンチマークとして役に立つことが多いからです。
例えば、Scalaがそうですね。 その最初のコンパイラは、Martin Oderskyによる実験的言語Pizzaで作られました。 バージョン2.0の時点で、コンパイラは完全にScalaで書き直された。 その時点から、古いPizzaコンパイラは完全に捨てられるようになりました。なぜなら、新しいScalaコンパイラは、将来の反復のために自分自身をコンパイルするのに使えるからです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ダブルリンクとは何ですか?
-
[解決済み] どなたか「-1.#QNAN」の意味を説明してください。
-
[解決済み] コンパイルとトランスパイルの比較
-
[解決済み] clang(およびLLVM)とgcc / g++の違いは何ですか?
-
[解決済み] コンパイラの書き方を学ぶ【終了しました
-
[解決済み】独自の言語でコンパイラを書く
-
[解決済み] GCCとg++はどのようにブートストラップされるのですか?
-
[解決済み] 最初のコンパイラはどのように書かれたのですか?
-
[解決済み] コンパイラはどのようにして自分自身をコンパイルすることができるのですか?
-
[解決済み] C#コンパイラはどの言語で書かれていますか?