论文部分内容阅读
在应用软件中嵌入一个脚本编译器,能使软件支持脚本语言,用户可以通过编写脚本程序来对软件进行二次开发,从而提升软件的功能,更符合用户的需求。这种软件有很好的扩充性和通用性。目前越来越多的应用软件基于.Net开发,作者设计了能提供给这些应用软件使用的ST-C#脚本语言,并在《股市神探》软件中成功应用。本文结合实践,阐述了笔者研究和开发ST-C#脚本编译器及其相关部件的过程。脚本语言的设计涉及到语言的定义、虚拟机代码的格式定义、编译器和虚拟机的开发。对ST-C#脚本语言进行定义时,采用了类C#的语法,支持包含多种运算符、字符串、数组和函数的表达式运算,支持自由的程序书写风格、函数重载等。还定义了函数库的构造,将函数库分为内部函数库、系统函数库和用户函数库,使脚本语言达到实用要求。为了加快脚本程序的运行速度,需要将脚本程序转换成相应的虚拟机代码提供给虚拟机执行,一般的虚拟机指令系统包含了类似汇编指令的底层操作指令。为了降低编译器开发的难度和简化虚拟机的设计,在对虚拟机代码的格式定义时,设计了基于最小指令数量的虚拟机指令集,利用表达式树存放表达式的编译结果,结果仅用四条指令就实现了程序的所有控制,虽然降低了表达式的运算速度,但也大大降低了编译器和虚拟机的开发难度。还探讨了ST-C#脚本编译器将脚本语言编译成虚拟机代码的过程,分析了词法分析、语法分析和虚拟机代码生成时所采用的技术,由于虚拟机代码设计得比较抽象,编译器的整个实现都与运行环境无关,即相当于普通编译器的前端设计。而虚拟机则是对脚本语言的运行支持,ST-C#脚本语言的虚拟机分成指令解释器和表达式计算部件两部分,指令解释器负责脚本控制代码的执行,表达式计算部件负责表达式的运算,这样分开设计的好处是虚拟机的设计大大简化,结构清晰。最后对内嵌了该脚本编译器的软件《股市神探》做了介绍,分析了脚本功能对该软件运行的支持过程,从而验证了ST-C#脚本编译器的实用性。