基本的に、それは最初の夢です...私はいつか自分のプログラミング言語を持っているかもしれません!、しかし、コンパイラの構築方法を探した直後に、すぐに悪夢に変わりますか?。
皆さんのほとんどのように、私はドラゴンの本に加えて他の多くの記事、リソース、フォーラム、およびQ&Aを読むのにあまりにも多くの時間を費やしています。私が最終的に思いついたのは、すべての主要な解析手法やコンパイラの最適化など、不要なことをたくさん知っていたのですが、コンパイラプロジェクトで最終的に何をする必要があるのかまだ明確に理解していません。
問題は、すべてを一度にそして最初に理解する(そして習得する)必要があるすべての本と他のリソースにあります!パーサーを理解して実装する必要がありますが、次に何をすべきかはまだわかりません。ちなみに、あなたはこのトピックの真の初心者だと思いますが、そうではなかった方もいらっしゃると思います。
いつか私はそれらの資料を読むのをやめます。私はすべての詳細について学ぶのに十分だと言いました、私は何か現実的なことをしたいです。それで、私はこのような質問をし始めます:コンパイラの目標は何ですか?さて、私の答えは、プロセッサ用の理解可能なバイナリコードを生成することでした。それで、私はそれがどうあるべきかを言いましたか?さて、このようなものstatement1; statement2;
に0xAABBCCDD
、そしてそれがすべてです。
次に、すべてを最初から始めます。私は最も単純な構文と機械語から始めます。私が一日の終わりに持っていたのは、Intel用の純粋なバイナリコードを生成することができた動作中のコンパイラでした。ほんの少しの命令しか理解できませんが、それは実際に機能するコンパイラでしたが、非常に単純なものでした。
その後、パーサーなどを改良し、それ以来ずっと幸せに感じました。現在、必要なときにこれらすべての資料を使用しています。私の問題は、これらの本や記事をすべて読まないと、単純なコンパイラーでも作成できないと思ったため(ほとんどの場合、他の人が言った)、すべてを理解して習得しようと懸命に努力していたことでした。
ここでは、コンパイラプロジェクトを開始する前に知っておく必要があると思われるアイデアや概念をリストアップしていただきたいと思います。初心者が読んで理解し、プロジェクト全体をよりよく描写し、実際のコードの記述に移り、実際のコンパイラーがどのように機能するかを感じるのに十分シンプルであるとあなたが信じていること。
例として、ここで私の答えを参照してください!
PSちなみに、質問に反対票を投じる前に、これらの資料が良くないと言っているのではないことをもう一度はっきりさせておきます。主題が信じられないほど曖昧だと言っているだけです。間違ったアプローチは、すべてを一度に実行することです。よりスマートなソリューションは、HelloWorldから始めます。たとえば、GCCなどと同じ機能を持つプロジェクトの代わりに。