目 录
论文总页数:24页
解释程序已经实现了基本的Scheme语言特征,并可以运行普通的Scheme程序。并且也实现了一些调试方法,如显示寄存器中的对象、某内存段中的对象等等,用来调试解释程序本身。通过实现该解释程序,我对Scheme语言以及C++和其它编程语言有了更深入的了解,对解释器和编译器的相关知识有了一定的理解和体会,通过学习SICP[3]我也对程序设计思想和本质有了比较深刻的认识,同时在程序编写过程中也锻炼了我的代码编写能力和代码管理能力。
在开发过程中也碰到过不少问题和困难。一个问题是在对Scheme表达式求值过程中发现错误而抛出异常后,栈中还有残留的内容,此时会将其清空,但是这里的内容是寄存器中的值,要能继续正确的对Scheme表达式求值,就需要将这些内容恢复到寄存器中。对这个问题设计了一个很好的解决办法,就是在每一次入栈操作中都记录入栈信息,在出栈时删除相应的入栈信息,在发生异常后,就可以根据这些入栈信息将栈中的内容恢复到原来的寄存器中,以便还原状态。
另外,在最初的设计中,是没有对过程调用的参数个数进行检查的,但后来发现在其它解释器中都有对参数个数的检查,如果参数不匹配会报错。于是在后期基本内置操作实现的基础上,加入了对参数个数的检查。由于内置操作是通过模板偏特化来实现的,因此定义了另一个模板类,并使用其偏特化来定义参数个数限制,并定义了一个模板函数来进行相应操作的参数检查。这样的设计利用了模板的特性,很好的与原有系统整合到了一起。
但该解释器的实现也是有很多不足的,比如程序执行效率低、整体设计结构不太合理等等,这说明仍然是有很大的改进空间的。在以后将整个解释器结构重新设计,以运行效率为主要目的,根据即将推出的R6RS标准文档来实现,开发出一个具体实用价值的Scheme解释程序。