首页
会员中心
到顶部
到尾部
网络工程毕业设计

JSJWL Scheme解释程序的实现

时间:2020/10/13 21:43:16  作者:  来源:  查看:0  评论:0
内容摘要: 目  录论文总页数:24页1 引言 11.1 课题背景 11.2 研究意义 11.3 研究方法 12 Scheme语言 22.1 发展历史与现状 22.2 Scheme语言介绍 22...

目  录

论文总页数:24页

引言 1

1.1 课题背景 1

1.2 研究意义 1

1.3 研究方法 1

2 Scheme语言 2

2.1 发展历史与现状 2

2.2 Scheme语言介绍 2

2.3 Scheme的特点 3

相关理论基础 3

解释程序的整体结构 3

4.1 词法分析器 4

4.2 类型系统 4

4.3 循环求值器 4

4.4 虚拟的寄存器机器 5

4.5 内存管理与垃圾回收 5

解释程序的实现 6

5.1 类型系统 6

5.2 词法分析 7

5.3 表达式求值的环境模型 7

5.3.1 环境模型 7

5.3.2 环境操作 9

5.3.3过程应用的环境模型 9

5.3.4 环境模型的实现 10

5.4 尾递归 11

5.5 虚拟的寄存器机器 13

5.5.1 寄存器 14

5.5.2 存储模型 15

5.5.3 基本表操作的实现 16

5.5.4 停止并复制垃圾回收算法 17

5.5.5 虚拟的寄存器机器的实现 18

5.6 表达式求值过程 18

测试结果 19

6.1 测试尾递归 19

6.2 测试正确性与效率 20

     21

参考文献 22

     23

     24

结    论

解释程序已经实现了基本的Scheme语言特征,并可以运行普通的Scheme程序。并且也实现了一些调试方法,如显示寄存器中的对象、某内存段中的对象等等,用来调试解释程序本身。通过实现该解释程序,我对Scheme语言以及C++和其它编程语言有了更深入的了解,对解释器和编译器的相关知识有了一定的理解和体会,通过学习SICP[3]我也对程序设计思想和本质有了比较深刻的认识,同时在程序编写过程中也锻炼了我的代码编写能力和代码管理能力。

在开发过程中也碰到过不少问题和困难。一个问题是在对Scheme表达式求值过程中发现错误而抛出异常后,栈中还有残留的内容,此时会将其清空,但是这里的内容是寄存器中的值,要能继续正确的对Scheme表达式求值,就需要将这些内容恢复到寄存器中。对这个问题设计了一个很好的解决办法,就是在每一次入栈操作中都记录入栈信息,在出栈时删除相应的入栈信息,在发生异常后,就可以根据这些入栈信息将栈中的内容恢复到原来的寄存器中,以便还原状态。

另外,在最初的设计中,是没有对过程调用的参数个数进行检查的,但后来发现在其它解释器中都有对参数个数的检查,如果参数不匹配会报错。于是在后期基本内置操作实现的基础上,加入了对参数个数的检查。由于内置操作是通过模板偏特化来实现的,因此定义了另一个模板类,并使用其偏特化来定义参数个数限制,并定义了一个模板函数来进行相应操作的参数检查。这样的设计利用了模板的特性,很好的与原有系统整合到了一起。

但该解释器的实现也是有很多不足的,比如程序执行效率低、整体设计结构不太合理等等,这说明仍然是有很大的改进空间的。在以后将整个解释器结构重新设计,以运行效率为主要目的,根据即将推出的R6RS标准文档来实现,开发出一个具体实用价值的Scheme解释程序。

  


相关评论
广告联系QQ:45157718 点击这里给我发消息 电话:13516821613 杭州余杭东港路118号雷恩国际科技创新园  网站技术支持:黄菊华互联网工作室 浙ICP备06056032号