论文部分内容阅读
随着XML逐渐成为互联网应用的数据交换格式,越来越多的应用使用XML作为数据存储格式,对于XML的查询语言需求正在日益增加。XQuery语言的推出使得XML查询语言有了一种统一的标准。XQuery语言具有良好的查询能力、数据组织能力和算法描述能力,其应用领域正在不断地扩展。XQuery语言实现与应用技术的研究逐渐成为了一个重要的研究方向。
随着应用的增多,XQuery语言已经逐渐成为了一种主流的计算机语言。对于应用程序来说,XQuery程序执行效率的高低是十分重要的,XML半结构化数据特点的限制使得XQuery语言实现技术的研究一直受人关注。和解释实现技术相比,采用编译实现的方法可以为代码优化创造更多机会,生成的代码拥有更高执行效率。同时,编译技术的研究也将为动态编译的实现提供了前提条件。
本文对XQuery的编译实现进行了研究,给出了基于SECD抽象机的XQuery编译实现方案,实现了XQuery程序到Java字节码程序的编译。该实现使用SECD抽象机作为编译后端的语义基础,保证了中间语言FXQL翻译到SECD抽象机指令的语义不会丢失。XQuery语言的编译实现方案的主要特色在于采用了分层的体系结构,采用了FXQL中间语言和SECD抽象机指令系统等中间表示,为编译优化提供了多种机会,允许在不同的层次上引入了不同性质的优化策略。其中,FXQL语言主要用于表示查询计划,基于查询代数的查询重写可以通过FXQL语言的程序变换来实现,这种优化技术主要借鉴了数据库查询优化技术;而SECD抽象机指令易于表示程序控制流程和函数调用过程的实现,所以可以引入消除尾递归、函数内联等一般程序设计语言的代码优化技术。
本文已经实现了一个基于SECD机的XQuery编译系统——XQC系统。在该系统中,XQuery程序先后被翻译成FXQL中间语言程序、SECD机指令序列,并经过消除尾递归和函数内联等优化处理,最终被翻译为Java字节码形式的目标程序。在本系统提供的运行支撑环境下,这种目标程序能够正确地运行在Java虚拟机上。
本文针对字节码目标程序进行了功能测试和性能测试。实验结果说明:使用基于SECD抽象机的XQuery编译实现方案,可以将XQuery程序编译为等价的Java字节码程序。在Java虚拟机上加载运行编译产生的字节码程序比解释执行效率更高。同时,在SECD指令序列中引入的尾递归消除优化策略,可以有效地消除部分函数调用的开销,节省栈空间,提高执行效率。