9

Structure and Interpretation of Computer Programsという本を読んでいて、スキーム インタープリターを徐々にコーディングしたいと思っています。

最も読みやすい(そして短い)スキームの実装を知っていますか?C で JavaScript を作成します。

4

7 に答える 7

8

SICP 自体には、メタ循環インタープリターを構築する方法を詳述するいくつかのセクションがありますが、Scheme インタープリターに関するより良いリソースについては、次の 2 つの本を参照することをお勧めします: Programming Languages: Application and InterpretationおよびEssentials of Programming Languages . どちらも読みやすく、インタープリターの構築を徐々にガイドしてくれます。

于 2011-09-23T20:46:22.847 に答える
5

C でスキーム インタープリターを段階的に構築するブログ シリーズ「ゼロからのスキーム」をお勧めします。

于 2011-11-27T05:48:30.813 に答える
4

Christian Queinnec の著書 Lisp In Small Pieces は素晴らしいです。EoPL よりも新しい。Lisp と Scheme の両方をカバーし、ほとんどの本では省略されている低レベルの悲惨な内容について詳しく説明します。

于 2011-09-23T21:15:51.747 に答える
2

KentDybvigの論文「Schemeの3つの実装モデル」を読むことをお勧めします。論文全体ではありませんが、ヒープベースモデルについて説明する最初の部分(第3章まで)は、Schemeの単純な実装に非常に適しています。

もう1つの優れたリソース(私が正しく理解していて、Cで実装したい場合)は、NilsHolmの「Scheme9fromEmptySpace」です。このリンクはニルスのページへのリンクであり、下部に古いパブリックドメインの本の版と、より新しい、読みやすい、市販の版へのリンクがあります。両方を読んで、それらを愛した。

于 2011-10-17T20:38:10.683 に答える
1

私の通訳者がどのように機能するかの概要を説明できます。おそらく、一般的なことのアイデアが得られるでしょう。 答えはかなり遅れていますが、このスレッドに来て一般的なアイデアを求めている他の誰かに役立つことを願っています.

  1. 入力されたスキームの行ごとに、Command オブジェクトが作成されます。コマンドが部分的な場合、そのネスト レベルが格納されます (式を完成させるために残っている右括弧の数)。コマンドが完了すると、式オブジェクトが作成され、エバリュエーターがこのオブジェクトで起動されます。
  2. 4 種類のエバリュエーター クラスが定義されており、それぞれが基本クラス Evaluator から派生しています。

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 を使用して評価を返す関数の定義を探します。

->最後に、印刷エバリュエーターが起動され、結果を印刷します。この印刷は、出力式のタイプによって異なります。

免責事項: これが私のインタープリターの仕組みであり、必ずしもそうである必要はありません。

于 2012-06-18T14:28:20.853 に答える
1

私は同様の使命を果たしてきましたが、数年後、推奨事項:

私はまだ、JIT と組み合わせることができる Lisp/scheme VM の作成に関する優れたブログ投稿を探しています (競合する JS 実装にとって重要です:)。

于 2013-10-25T17:23:36.767 に答える