Structure and Interpretation of Computer Programsという本を読んでいて、スキーム インタープリターを徐々にコーディングしたいと思っています。
最も読みやすい(そして短い)スキームの実装を知っていますか?C で JavaScript を作成します。
Structure and Interpretation of Computer Programsという本を読んでいて、スキーム インタープリターを徐々にコーディングしたいと思っています。
最も読みやすい(そして短い)スキームの実装を知っていますか?C で JavaScript を作成します。
SICP 自体には、メタ循環インタープリターを構築する方法を詳述するいくつかのセクションがありますが、Scheme インタープリターに関するより良いリソースについては、次の 2 つの本を参照することをお勧めします: Programming Languages: Application and InterpretationおよびEssentials of Programming Languages . どちらも読みやすく、インタープリターの構築を徐々にガイドしてくれます。
C でスキーム インタープリターを段階的に構築するブログ シリーズ「ゼロからのスキーム」をお勧めします。
Christian Queinnec の著書 Lisp In Small Pieces は素晴らしいです。EoPL よりも新しい。Lisp と Scheme の両方をカバーし、ほとんどの本では省略されている低レベルの悲惨な内容について詳しく説明します。
KentDybvigの論文「Schemeの3つの実装モデル」を読むことをお勧めします。論文全体ではありませんが、ヒープベースモデルについて説明する最初の部分(第3章まで)は、Schemeの単純な実装に非常に適しています。
もう1つの優れたリソース(私が正しく理解していて、Cで実装したい場合)は、NilsHolmの「Scheme9fromEmptySpace」です。このリンクはニルスのページへのリンクであり、下部に古いパブリックドメインの本の版と、より新しい、読みやすい、市販の版へのリンクがあります。両方を読んで、それらを愛した。
私の通訳者がどのように機能するかの概要を説明できます。おそらく、一般的なことのアイデアが得られるでしょう。 答えはかなり遅れていますが、このスレッドに来て一般的なアイデアを求めている他の誰かに役立つことを願っています.
a) Define_Evaluator : define ステートメント用
b) Funcall_Evaluator : 他のユーザー定義関数の処理用
c) Read_Evaluator : 式を読み取り、スキーム オブジェクトに変換します。
d) Print_Evaluator : オブジェクトのタイプに応じてオブジェクトを印刷します。
e) Eval_Evaluator : 式の実際の処理を行います。
3.-> まず、式からスキーム オブジェクトを作成する Read Evaluator を使用して、各式が読み込まれます。ネストされた式は、式が完了するまで再帰的に計算されます。
->次に、最初のステップで形成されたスキーム式オブジェクトを処理する Eval_Evaluator が起動されます。これはそのように起こります
a) 評価される式がシンボルの場合。その値を返します。したがって、変数blkはそのブロックのオブジェクトを返します。
b) 評価される式がリストの場合。リストを印刷します。
c) 評価される式が関数の場合。Funcall_Evaluator を使用して評価を返す関数の定義を探します。
->最後に、印刷エバリュエーターが起動され、結果を印刷します。この印刷は、出力式のタイプによって異なります。
免責事項: これが私のインタープリターの仕組みであり、必ずしもそうである必要はありません。
私は同様の使命を果たしてきましたが、数年後、推奨事項:
私はまだ、JIT と組み合わせることができる Lisp/scheme VM の作成に関する優れたブログ投稿を探しています (競合する JS 実装にとって重要です:)。