【问题标题】:I want to implement a scheme interpreter for studying SICP我想实现一个用于学习 SICP 的方案解释器
【发布时间】:2011-11-23 11:54:07
【问题描述】:

我正在看书Structure and Interpretation of Computer Programs,我想逐步编写一个方案解释器。

您知道最容易阅读(且简短)的方案的实现吗? 我将用 C 语言编写 JavaScript。

【问题讨论】:

  • 读过 SICP,在我看来,你会比用 Scheme(或其他 Lisp 方言——我喜欢 Clojure)编写解释器并做一些练习得到更多在 C 中编写解释器。
  • 您对 SICP 的了解程度如何?在阅读第 4 章和第 5 章的过程中,你将编写一个 Scheme 解释器(实际上不止一个)和一个编译器。如果你读完这本书,你会找到你想要的:元循环解释器(Scheme in Scheme)非常漂亮短。

标签: javascript lisp scheme implementation sicp


【解决方案1】:

除了Queinnec's book,这可能是scheme中最全面的一个 到C的转换,你也可以阅读旧平台的文献library.readscheme.org

【讨论】:

    【解决方案2】:

    我一直在执行类似的任务,但几年后,建议:

    我仍在寻找有关创建 lisp/scheme VM 的优秀博文,它可以与 JIT 结合使用(对于任何有竞争力的 JS 实现都很重要:)。

    【讨论】:

      【解决方案3】:

      我可以概述一下我的解释器是如何工作的,也许它可以让你大致了解一下。 虽然答案已经很晚了,但我希望这可以帮助其他人,他们来到这个帖子并想要一个大致的想法。

      1. 对于输入的每一行方案,都会创建一个 Command 对象。如果命令是部分命令,则存储其嵌套级别(完成表达式的剩余右括号数)。如果命令完成,则会创建一个表达式对象,并在此对象上触发评估器。
      2. 定义了 4 种类型的求值器类,每一种都派生自基类 Evaluator

      a) Define_Evaluator : 用于定义语句

      b) Funcall_Evaluator :用于处理其他用户定义的函数

      c) Read_Evaluator :用于读取表达式并将其转换为方案对象

      d) Print_Evaluator :根据对象的类型打印对象。

      e) Eval_Evaluator :对表达式进行实际处理。

      3.-> 首先使用读取评估器读取每个表达式,该评估器将从表达式中创建一个方案对象。嵌套表达式会递归计算,直到表达式完成。

      ->接下来,Eval_Evaluator 被触发,它处理在第一步中形成的 Scheme 表达式对象。 事情就是这样发生的

      a) 如果要计算的表达式是一个符号。返回它的值。因此,变量 blk 将返回该块的对象。

      b) 如果要计算的表达式是一个列表。打印列表。

      c) 如果要计算的表达式是一个函数。查找将使用 Funcall_Evaluator 返回评估的函数的定义。

      ->最后打印评估器被触发以打印结果,这个打印将取决于输出表达式的类型。

      免责声明: 我的口译员就是这样工作的,不一定要那样。

      【讨论】:

        【解决方案4】:

        我会推荐博客系列Scheme from scratch,它在 C 中逐步构建了一个方案解释器。

        【讨论】:

          【解决方案5】:

          Christian Queinnec 的书 Lisp In Small Pieces 非常棒。比 EoPL 更现代。涵盖 Lisp 和 Scheme,并详细介绍了大多数书籍都忽略的血腥低级内容。

          【讨论】:

          • 它也不太适合初学者。
          【解决方案6】:

          我建议阅读 Kent Dybvig 的论文“Three Implementation Models for Scheme”。不是整篇论文,而是他讨论基于堆的模型的第一部分(直到第 3 章)非常适合于 Scheme 的幼稚实现。

          另一个很棒的资源(如果我理解正确并且你想用 C 实现它)是Nils Holm's "Scheme 9 from Empty Space"。此链接指向 Nils 的页面,底部有一个链接,指向该书的旧版公共领域版本和新的、更易于阅读的商业版。阅读并喜欢它们。

          【讨论】:

            【解决方案7】:

            SICP 本身有几个部分详细介绍了如何构建元循环解释器,但我建议您查看以下两本书以获取有关 Scheme 解释器的更好资源:Programming Languages: Application and InterpretationEssentials of Programming Languages。它们既易于阅读,又能逐步指导您构建解释器。

            【讨论】:

              猜你喜欢
              • 2012-03-15
              • 1970-01-01
              • 2012-06-30
              • 2014-06-28
              • 2015-10-23
              • 1970-01-01
              • 2023-03-30
              • 1970-01-01
              • 2020-03-18
              相关资源
              最近更新 更多