我想实现一个计划翻译来研究SICP

时间:2011-09-23 08:49:14

标签: javascript lisp scheme implementation sicp

我正在阅读这本书Structure and Interpretation of Computer Programs,我想逐渐编写一个方案解释器。

你知道最容易阅读(和简短)的方案的实施吗? 我将在C中制作一个JavaScript。

7 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

另一个很棒的资源(如果我理解正确,你想在C中实现它)是Nils Holm's "Scheme 9 from Empty Space"。这个链接是Nils的页面,这里有一个旧的公共领域版本的底部链接,以及更新,更易于阅读的商业版本。阅读并爱上他们。

答案 4 :(得分:0)

我可以概述一下我的翻译是如何工作的,也许它可以让你对一般事物有所了解。 虽然答案很晚,但我希望这可以帮助其他人,他们来到这个主题并想要一个大致的想法。

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

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

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

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

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

    3 .->首先,使用Read Evaluator读取每个表达式,Read Evaluator将从表达式中创建一个scheme对象。嵌套表达式以递归方式计算,直到表达式完成。

    - >接下来,触发Eval_Evaluator,它处理第一步中形成的Scheme Expression Object。 这种情况就是这样发生的

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

    b)如果要评估的表达式是一个列表。打印清单。

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

    - >最后激活打印评估程序以打印结果,此打印将取决于输出表达式的类型。

    声明: 的 这就是我的翻译工作方式,不一定是这样。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

除了Queinnec's book之外,它可能是方案中最全面的方案 到C的转换,您还可以从旧平台library.readscheme.org阅读文献。