2009-10-05 24 views
8

プログラミング言語はいくつかの段階を経ているようです。まず、誰かが新しい言語、Foo Languageを夢見ています。コンパイラ/インタプリタは別の言語、通常はC言語やその他の低レベル言語で書かれています。ある時点で、FooLは成熟し、成長し、最終的に誰かが、FooL自体の中でFooLのコンパイラやインタプリタを書くでしょう。プログラミング言語でコンパイラを作成するために必要な言語機能は何ですか?

私の質問は次のとおりです。誰かがその言語自体を実装できるように、言語機能の最小限のサブセットは何ですか?

+1

チューリング完全性? –

+2

参照:http://stackoverflow.com/questions/13537/bootstrapping-a-language –

+0

同じではなく、関連する読者:[コンパイラの作成に最適な言語](http://stackoverflow.com/questions/809710/what-is-the-best-language-to-write-a-compiler-in) – nawfal

答えて

2

1つのオプションはread-eval-print loopです。これは、より多くのより高いレベルの構造を構築するために使用できます。私はこれがLISPの道だと信じています。
私はCの始まりについては不明ですが、分岐、ループ、代入、シングルキャラクタI/Oを実装するためのシステムコールがいくつか始まってそこから構築されたと思います。

4

理論上、驚くほど少しです。 computability theoristは、必要なのはmu-recursionまたはTuring machineなどです。

しかし、実用的な観点からすると、チューリングマシンでプログラミング言語を実装しようとすると大変うれしくはありません。私は、少なくとも、すべての通常の制御フロー構造、基本データ型、サブルーチン、配列と構造体を持ちたいと思うでしょう。これは、言語そのサブセットを言語自体で実装するのに十分でなければなりません。そしてそこから自分自身をブートストラップすることができます。

+2

"理論的には、理論と実践の間に違いはありません。 、 がある。" - 私は誰を忘れる。 –

+0

"すべての*あなたが必要とするのはチューリングマシンです"それは基本的に知られている最も強力な "合理的な"計算モデルであると考えて私に笑顔をもたらしました:-) –

0

Idアセンブラがカットを行うと仮定します。

0

私の質問は次のとおりです。誰かがその言語自体を実装できるように、言語機能の最小限のサブセットは何ですか?

言語自体がコンパイル以外の目的に役立つ必要はありませんか?私はあなたにUseless、すべてのテキストが適切なプログラムであり、 "入力を受け取りそれ自身を生成するプログラム"(これはUselessコンパイラとも呼ばれます)を意味する言葉です。

+0

私はJon Skeetの言語がより好きです。しかし、議論のために、少なくともTuring-complereで定義されている言語が有用であることを確認しましょう。 –

+0

確かに、「無駄な」**プログラミング言語です。 –

+0

@ブラッド:はい、はいです。 @Matthew:あなたはJon Skeetの言語をコンパイルできると確信していますか? –

関連する問題