0

コンパイラー、オペレーティング・システム、およびコンピューター・システムが内部でどのように機能するかについて学ぼうとしています。これが私の現在の計画です:

  1. 機械語 (私の仕様のカスタム言語) で記述された入力を受け入れることができる単純な仮想マシンを C で記述します。
  2. その仮想マシン用のアセンブラを作成します。
  3. マシン用の基本的な言語の非常に基本的なコンパイラを作成します。
  4. 画面 (SDL を使用すると思います) と、ビデオ メモリを介したその画面へのインターフェイスを含めることで、仮想マシンの対話性を拡張します。マウス/キーボード機能を追加することもできます。

ヒントや推奨事項は何でもいいでしょう。前もって感謝します!

4

3 に答える 3

0

あなたはどれだけプログラミングを知っていますか?

FORTH インタプリタを書くことは良い練習になります。比較的単純で、言語とセマンティクスが既に明確に定義されているため、独自のシステムをゼロから設計する必要はありません。FORTH には通常、コンパイラもあり (ただし、C コンパイラのようなものではありません)、アセンブラが組み込まれている場合もあるため、それらも調べることができます。メモリの管理、ポインタの処理、参照の解決などのためのメンタル ツールを提供します。

既存の単純なコンパイラを見ることも役に立ちます。コンパイラが何をするか、つまりある記号セットを別の記号セットに変換することを理解したら、文法の構文解析と関連トピックに目を向ける必要があるかもしれません。そこには非常に多くの情報があります。一度に少しずつ取得するか、非常に簡単に圧倒されます。

于 2011-08-19T02:38:39.563 に答える
0

それは素晴らしい目標リストです。それを学ぶために4年間大学に通う人もいます。あなたのバックグラウンドはわかりませんが、基本的なプログラミング (BASIC プログラミング?) とアセンブリ言語をある程度経験していると思われます。まだお持ちでない場合は、ここから始めてください。文法と正規表現について何かを学び、それを使って Pascal のような文法が簡単な単純な言語の一部のパーサーとインタープリターを開発することは、フロントエンドを学ぶ方法です。次に、アセンブリを生成するコード、つまりバックエンドを追加します。

于 2011-08-19T02:41:17.003 に答える
0

私の最初のアドバイスは、このテーマに関する高度な本を読むことです。つまり、あなたはまだこれを行っておらず、単にオンライン チュートリアルか何かに沿って作業することを計画していたと思います。少なくとも私にとっては、このようなことに頭から飛び込みたいと思う傾向がありますが、すぐに頭がいっぱいになり、プロジェクトをあきらめます. プロジェクトを開始する前に、プロジェクトについて非常に高いレベルで理解していることを確認することは、非常に役立ちます。

私がお勧めするシリーズの 1 つは、Write Great Codeの本です。シリーズをすべて読んだわけではないので、シリーズ全体を保証することはできませんが、私のオフィスにはそれらがあり、何かに真っ先に飛び込む前に、主題をかなりよく理解するために何度も使用しました. たとえば、あなたの計画に直接関係する可能性のある 1 つの例として、GCC コンパイラが生成する ELF バイナリをどのように編成したか、各セクションが何であるか、そこに何が格納されているかを理解する必要がありました。(これは組み込みシステム用で、RAM を拡張していたので、いくつかのものを再編成する必要がありました...)

あなたは「難しいことは何もない」と言いました...私の意見では、特に最終目標がコンパイラーとオペレーティングシステムについて学ぶことである場合、あなたのステップはすでにかなり難しいと思います。少なくとも今のところ、この仮想マシン全体をスキップします。実際には、プロセッサは非常に単純であり、「機械語」を処理するだけであることをすでに知っているという事実に基づいて、おそらくすでに十分に理解しているでしょう。

代わりに、ステップ 3 から始めて、独自のコンパイラーを作成します。私は大学でコンパイラのクラスを受講し、学期の終わりまでに、 LEX と YACCを使用してゼロから構築した動作する Pascal コンパイラを手に入れました。それはかなり啓発的でした。Bisonは、そのような目的で yacc と組み合わせて使用​​されていると見なすこともできます。使ったことないけど。

また、GCC を操作して hello world を X バイト未満にコンパイルする方法を理解するなど、空き時間にちょっとした演習を行うだけでも、その仕組みについて思っている以上に多くのことを学ぶことができます。(ちなみに、これの例はウェブ上にかなりあります)

楽しんで!

于 2011-08-19T02:52:01.823 に答える