我正在阅读这本书Structure and Interpretation of Computer Programs,我想逐渐编写一个方案解释器。
你知道最容易阅读(和简短)的方案的实施吗? 我将在C中制作一个JavaScript。
答案 0 :(得分:7)
SICP本身有几个部分详细介绍了如何建立一个元循环翻译,但我建议您查看以下两本书,以获得有关Scheme解释器的更好资源:Programming Languages: Application and Interpretation和Essentials 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)
我可以概述一下我的翻译是如何工作的,也许它可以让你对一般事物有所了解。 虽然答案很晚,但我希望这可以帮助其他人,他们来到这个主题并想要一个大致的想法。
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阅读文献。