-3

基本的に、それは最初の夢です...私はいつか自分のプログラミング言語を持っているかもしれません!、しかし、コンパイラの構築方法を探した直後に、すぐに悪夢に変わりますか?。

皆さんのほとんどのように、私はドラゴンの本に加えて他の多くの記事、リソース、フォーラム、およびQ&Aを読むのにあまりにも多くの時間を費やしています。私が最終的に思いついたのは、すべての主要な解析手法コンパイラの最適化など、不要なことをたくさん知っていたのですが、コンパイラプロジェクトで最終的に何をする必要があるのか​​まだ明確に理解していません。

問題は、すべてを一度にそして最初に理解する(そして習得する)必要があるすべての本と他のリソースにあります!パーサーを理解して実装する必要がありますが、次に何をすべきかはまだわかりません。ちなみに、あなたはこのトピックの真の初心者だと思いますが、そうではなかった方もいらっしゃると思います。

いつか私はそれらの資料を読むのをやめます。私はすべての詳細について学ぶのに十分だと言いました、私は何か現実的なことをしたいです。それで、私はこのような質問をし始めます:コンパイラの目標は何ですか?さて、私の答えは、プロセッサ用の理解可能なバイナリコードを生成することでした。それで、私はそれがどうあるべきかを言いましたか?さて、このようなものstatement1; statement2;0xAABBCCDD、そしてそれがすべてです。

次に、すべてを最初から始めます。私は最も単純な構文と機械語から始めます。私が一日の終わりに持っていたのは、Intel用の純粋なバイナリコードを生成することができた動作中のコンパイラでした。ほんの少しの命令しか理解できませんが、それは実際に機能するコンパイラでしたが、非常に単純なものでした。

その後、パーサーなどを改良し、それ以来ずっと幸せに感じました。現在、必要なときにこれらすべての資料を使用しています。私の問題は、これらの本や記事をすべて読まないと、単純なコンパイラーでも作成できないと思ったため(ほとんどの場合、他の人が言った)、すべてを理解して習得しようと懸命に努力していたことでした。

ここでは、コンパイラプロジェクトを開始する前に知っておく必要があると思われるアイデアや概念をリストアップしていただきたいと思います。初心者が読んで理解し、プロジェクト全体をよりよく描写し、実際のコードの記述に移り、実際のコンパイラーがどのように機能するかを感じるのに十分シンプルであるとあなたが信じていること。

例として、ここで私の答えを参照してください!

PSちなみに、質問に反対票を投じる前に、これらの資料が良くないと言っているのではないことをもう一度はっきりさせておきます。主題が信じられないほど曖昧だと言っているだけです。間違ったアプローチは、すべてを一度に実行することです。よりスマートなソリューションは、HelloWorldから始めます。たとえば、GCCなどと同じ機能を持つプロジェクトの代わりに。

4

2 に答える 2

2

最も重要なことは、プロセッサがどのように機能するかを理解することです。最初に特定のターゲットを選択する必要がありますが、後でそれを拡張することもできます。メーカーのドキュメントも非常に役立ちます。

ビデオをウォーミングアップ

  1. CPUの紹介@Youtube
  2. MSX88経由のYoutubeデモでCPUは​​どのように機能しますか
  3. CPUレジスタ@Youtube
  4. CPUレジスタ@Youtube
  5. 8086レジスタセット@Youtube
  6. x64レジスタセット@Youtube
  7. コンピューターが数字を追加する方法@Youtube
  8. FLAGS Register @ Youtube
  9. システム構成:CPU-RAM-I / O @ Youtube
  10. 英語ではありませんが、一見の価値があります:CPU Builder @ Youtube

記事

  1. CPUは@eHowで何をしますか
  2. CPUのしくみ@ハードウェアの秘密

ハードウェアマニュアル

  1. Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル
  2. AMD開発者ガイドおよびマニュアル
于 2013-01-14T11:38:55.777 に答える
0

flexbisonのマニュアルには、基本的なインタープリターを作成するための非常に簡単な例がいくつか示されています。

それぞれ「info flex」コマンドと「info bison」コマンドを使用して、ローカル マシンの両方にアクセスできます。

編集:ちょうど見て、私はこの答えを同様の質問に共有すると思った: https://stackoverflow.com/a/15743032/1003855

于 2013-04-01T20:33:01.507 に答える