それ自体でプログラミング言語をコンパイルする


10

私はコンピュータサイエンスの学生です。独自のプログラミング言語(命令の少ない基本言語)を作成したい。

私は構文解析を行う方法を知っています。すでにPerlでそれを行いました。記事では、コンパイラーについて何かを読みました。コンパイラーはそれ自体で行われます。

たとえば、CコンパイラはCで書かれています。それはどのように可能ですか?自分の言語を作ることはできますが、どうすれば実行できるのかわかりません。何か案が?

それは本当に良い質問で、ブログでプロジェクトを書くことができます。


人々はブートストラップする方法を説明しましたが、なぜあなたはそれをする必要があるのですか?C、Perl、その他で書かれたコンパイラを使用して言語をコンパイルできない理由はありません。確かに、自分の言語用のコンパイラーをそれ自体で作成するのは良いことですが、それは多くの作業になります。あなたの言語)。
David Richerby 2013年

うーん..最初のコンパイラーをCで書き、2番目のコンパイラーを私の言語で書くと思います。それは私たちがコンピュータサイエンスの多くを学ぶことができ、少しのプログラミング言語を作成するために、本当に面白いです
BaptisteL

回答:


13

トリックはブートストラップです。最初に、他の言語で自分の言語(またはそのサブセット)のコンパイラを記述します。次に、その言語(またはすでに処理できる言語の大部分)用のコンパイラを言語で記述します。以前のコンパイラを使用して新しいコンパイラをコンパイルすると、新しいコンパイラはそれ自体をコンパイルできます。


それで、Cを使用して最初のコンパイラを作成できます。次回、コンパイラv2をv1でコンパイルしますか?しかし、問題があります。コンパイラに問題がないことをどのようにして知ることができますか?ソースコードをアセンブラに変換する必要がありますか?または他のもので?
BaptisteL

2
コンパイラに問題がないことをどのようにして知ることができますか?より一般的には、プログラムを作成しました。バグがないことをどうやって知っていますか?あなたはしません。あなたはいくつかのテストを書いて、最高のものを望みます。ソースコードをアセンブリに変換する必要がありますか?絶対にありません。Cコンパイラは信頼できます。あなたは同じことをしていますが、アセンブリがC(または他の任意の言語)に置き換えられています。
Yuval Filmus 2013年

さて、自分のスキルを信頼する必要があります^^コンパイラーにプロセスを依頼したかったのです。私はコンパイラが何をしているのか本当に理解していませんが、構文および字句解析器は大丈夫ですが、次は??
BaptisteL

次に、コードを生成します。マシンコードの生成の詳細を知りたくない場合は、いつでも他の言語(Cコードなど)でコードを生成し、外部コンパイラを使用してそれをマシンコードにコンパイルできます。(または、インタープリター言語を使用してインタープリターを実行できます。)
Yuval Filmus 2013年

うーんいいえ、私はそのようにするのが好きです:入力中の私の言語->マシンコード。自分の言語を別の言語に変換したくない(初回コンパイルでも同じ)それは可能ですか?
BaptisteL

2

独自のソースをコンパイルできるコンパイラは、セルフホスティングコンパイラと呼ばれます。初期のコンパイラは別の言語で書かれていました。たとえば、最初のCコンパイラはおそらくアセンブラで記述されていました。以前の低レベルのコンパイラを使用する全体のトリックは、ブートストラップと呼ばれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.