4.1 The Metacircular Evaluator-笔记

求值器也就是编程语言的解释器,如果求值器是由它要运算的语言缩写就称为 元循环求值器(metacircular evaluator)。

求值器通过 eval 进行表达式语法分析然后传递给 apply 运行,通过两个程式的循环推动使求值器得到运转。所以,对于求值器来说表达式就是按规则排序的列表,由此也就完成了程序向数据的转化。除此之外,求值器运算表达式需要建立在环境模型的基础上,可以将环境构建成包含框架和闭包环境的序对,框架是一个包含变量列表与变量值列表(两个列表的对应关系按顺序排列)的序对。拥有上述元素后,求值器只需要通过读取表达式-运算表达式-打印结果的循环运行即可。

不过这样构建的求值器会存在两个问题,在内部定义程式时它会根据程式调用情况构建内部程式,但这样会引起错误,所以在程式定义进行求值器运算时需要将内部程式转化为 let 表达式,再使用 set! 进行赋值操作,经过转化后内部定义程式的作用范围就是整个程式体中,也不会存在因调用顺序引起的解析问题。另一个问题是重复语法分析的问题,当表达式被重复调用时其实语法并没有变化,却需要重复进行语法分析,这将导致求值器整体效率低下,所以需要将语法分析与程式求值分离,其中语法分析的结果可以保存以提高求值器运算效率。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 安装目录插件,阅读体验更佳!!!参考:https://www.jianshu.com/p/a40ec70d9365...
    ChaunhewieTian阅读 1,381评论 0赞 3
  • 001.8人沟通路径:28条 软件开发小组的沟通路径受到小组组织形式和规模的影响。若任意小组成员之间均可能有沟通路...
    孑小白阅读 1,518评论 0赞 1
  • 入门与进阶 第一章 进入编程 1,如何快速运行一段js代码? 方式1:浏览器开发者工具。可以使用快捷键option...
    潇潇潇潇潇潇潇阅读 964评论 0赞 0
  • 前言 最近花了一个月时间读完了一本书《自制编译器》。首先对这本书给一个非常中肯的评价,这本书写的内容很充实,很丰富...
    kolibreath阅读 1,602评论 0赞 3
  • 2020/10/09 标题:《为什么我们不快乐》[https://mp.weixin.qq.com/s/MciWP...
    elon_wen阅读 406评论 0赞 0

友情链接更多精彩内容