一种实现编程语言相互转换方法①
一种实现编程语言相互转换方法① 摘 要:伴随着计算机产业的快速发展,成本和效率成为下一步前进的制约因素。当前多数计算机语言之间受到平台的束缚而不能相互通信,或依赖于操作系统,或依赖于硬件,若要求平台迁移或数据迁移,不仅给编程人员带来很大的不便,更降低了开发的效率,使生产受到限制。XML语言由于本身的优势,能够表示程序的结构信息,所以考虑用XML语言表示程序结构来实现各种编程语言之间的转换是可行的。 关键词:编程语言 JavaCC 转换 XML 旅行者模式 中图分类号:TP313 文献标识码:A 文章编号:1674-098X(2014)10(c)-0044-02 该文主要完成以下工作:选定某种编程语言相对应的.jj和.jjt文件,利用JavaCC工具建立该语言的编译器和抽象语法树,并依据它对抽语法树各节点类型添加语义动作和接受方法,建立抽象旅行者和具体旅行者,建立可以完成转换的驱动程序,编译后得到可执行的转换器。 1 应用主要技术及原理简介 (1) JavaCC简介。 JavaCC英文全称是(Java Compiler Compiler)是在扩展了YACC的基础上,使用Java语言开发的词法语法分析器。 JavaCC主要有以下功能: ①JavaCC用来处理语法文件(jj)生成解析代码。 ②JJTree用来处理jjt文件,生成树节点代码和jj文件。 ③JJDoc根据jj文件,生成文本本件(Html)。 (2)AST的基本结构。 抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是对编程语言源程序的语法结构的一种树形表示形式。语法树上的每一个节点都代表了一种结构。每个节点代表了一个非终终结符。每个具体的单词(由此法分析得到的)都在一个叶子节点上。根据抽象语法树的定义及规则,可以得到这个语句对应的语法树。 (3)XML语言简介。 XML语言的全称是Extensible Markup Language,中文为可扩展标记语言,它允许开发人员根据自己的需求定义标签,可以将标签和内容有效的分离。XML更加看重于数据的存储形式和传输方式,且具有简单易用、可扩展性强、数据与其组织形式相互分离等优势。 (4)旅行者模式简介。 旅行者模式是作者根据本次研究经验结合大量的实际操作过程提出的一种新的行为型设计模式,这种模式可以对某个对象中各个节点元素进行不同的操作,可以在不改变各节点类的基础上定义作用于这些元素的操作。 旅行者模式的特点: 旅行者模式把程序对象应用的数据结构与作用在这种结构之上的操作相互分离开,使得操作不依赖于结构。 旅行者模式更加适用于结构相对固定但算法不稳定的问题的解决。 旅行者模式的优势在于新添操作方便。 旅行者模式的基本原理: 得到元语言的AST后,进一步对语法树中的每个节点生成一个抽象类(节点是在元语言的.jjt文件中定义的),接下来定义一个旅行者接口,实现这个接口的不同旅行者可以根据自己的需求对语法树中的各个节点进行操作,从而获取所需的信息。一般抽象旅行者类都要有若干个具体旅行者子类来继承,在所有的旅行者中都会有对应的所有节点的方法,这样选择了某个旅行者,然后在该旅行者中找到具体的节点进行操作,就可以完成提取所需信息的任务。 2 从元语言到XML语言的转换 该文以C语言为例向读者介绍如何将C语言转换成XML,至于其他编程语言到XML的转换可按照此法仿照完成。 2.1 总体分析 (1)定义C语言语法的.jjt文件,通过JavaCC工具生成C语言对应的抽象语法树和C语言的编译器。(2)添加相应的节点标记和一定的规范。(3)通过旅行者模式对其进行遍历和提取所需的信息。 此过程所对应的流程图如图1所示。 2.2 C语言到AST的实现 首先获得相应语言的.jjt文件。执行.jjt文件会生成七个文件。我们对其中的simple1.java进行编译就可以获得Simple1.jj所定义的语法的编译器。如果我们对C语言的.jj文件进行JavaCC操作就可以得到一个名为CParser.java的文件,对其进行编译就得到了C语言的编译器。 2.3 旅行者模式设计 (1)设计旅行者模式。 访问各个节点是通过旅行者实现的。添加旅行者的目的主要是为了从抽象语法树到XML文件的转换。为了便于以后的扩展和深入,需要设计抽象旅行者接口和实现该接口的旅行者适配器。为了完成不同的操作,还需要许多具体的旅行者角色。 由于C语言的AST是由JavaCC工具自动生成的,C语言的.jjt文件定义了该语法树的层次结构,故不需设计树的组织形式,只要设计旅行者模式,设计旅行