一种应用于Java到C++语言程序翻译中外部引用的翻译方法技术

技术编号:4095761 阅读:393 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种应用于Java到C++语言程序翻译中外部引用的翻译方法。包括以下步骤:将Java编译单元中简单名称方式的外部引用改为完全限定名方式;拆分Java编译单元,使每个Java编译单元只包含一个成员定义;对Java编译单元及成员进行更名;Java编译单元迁移至缺省包;为Java编译单元生成导入列表;生成C++头文件的包含语句和前置声明;生成C++源文件的包含语句。本发明专利技术在保证代码功能性不变的前提下,提供了一种自动化的、高可靠性的Java到C++语言程序翻译中外部引用的翻译方法,具有较好的运行效率。

【技术实现步骤摘要】

本专利技术涉及计算机领域高级语言代码翻译中的关键技术,为一种应用于Java到 C++语言程序翻译中外部引用的翻译方法。
技术介绍
软件代码移植是目前解决计算机软件跨平台应用以及在不同终端设备上正常运 行的主要技术手段和方法,高级语言代码翻译技术是解决计算机软件代码移植的一个重要 研究方向。Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言。具有面向 对象、分布式、健壮安全、平台独立、可移植、高性能、多线程、动态性等特性。在面向对象的 跨平台应用、网络通信和企业级应用以及嵌入式应用等方面得到广泛的发展。健壮安全基 础上的平台无关性是Java语言的主要优点,而对虚拟机的依赖和程序运行性能上的缺陷, 是Java语言的主要不足和缺点。Java程序的运行依赖于Java平台,Java平台是一种运行在其它硬件平台之上的 纯软件平台,包括两个部分=Java虚拟机(JVM)和Java应用程序编程接口(API)。作为独 立于硬件平台的环境,虽经过技术的发展,Java程序基于Java平台的运行效率仍比本机代 码慢。C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,在 支持面向对象编程的同时与C语言保持兼容。具有与C语言兼容、代码结构合理、程序运 行效率高、面向对象、可重用性高、可扩展性、可维护性等特性。C++语言具有与C语言相同 的更加贴近硬件底层的操作和控制能力,使开发者的设计思想更容易表达、实现、理解和维 护,而效率并未受到影响。更贴近硬件底层,是C++语言的优点,但同时也为各平台间的移 植增加了难度,而其强大的底层操控性,也对程序员的编程水平提出了更高的要求。与Java语言相比,C++语言具有以下优点准许直接访问物理地址,能进行位运 算,可以直接对硬件进行操作,而Java语言对内存的操作则很难把握;C++程序的依赖性 小,程序的运行不需要额外的诸如虚拟机之类的支持,一般用来编写大型系统;C++代码被 最终编译成本地机器码,可直接由中央处理单元(CPU)执行,相比Java这种先生成中间代 码再由虚拟机执行的语言,效率高了很多。在实际应用中,Java和C++是当前两大主流的开发语言,因为各自的优势和特点 在各自不同的应用领域发挥着非常重要的作用。Java因其语言简单、易学易用、跨平台和健 壮安全性在应用领域备受开发者青睐和喜爱,但是跨平台的特性在复杂的嵌入式环境中要 实现真正意义上的统一非常困难,同时对虚拟机的过分依赖和程序运行性能方面的不足也 影响和限制了 Java语言在应用领域尤其是嵌入式设备应用领域的应用与普及。因此,如果能够将Java语言程序翻译为更灵活、更高效、更易支持的C++语言程 序,从而大幅提高程序的执行效率,开拓扩展其应用的范围,将极大地提高Java程序的应用价值。 在从Java到C++语言程序翻译的过程中,外部引用的翻译是其中的重要组成部 分,尤其是其它部分的基础和程序正确编译运行实现的保证,本专利技术通过大量研究和深入 比较Java语言和C++语言之间的异同,提出了一种应用于Java到C++语言程序翻译中外 部引用的翻译方法。就语言本身和语法而言,Java语言从C语言和C++语言继承了许多成份,如Java 语言的变量声明、操作符形式、参数传递、流程控制等方面与C语言和C++语言完全相同。 同时,在指针和内存管理、多继承的支持、全局变量、全局函数、操作符重载、自动类型转换、 编译预处理、头文件、字符串、无条件转移语句(goto)、包(package)、编译处理方法、交叉 引用、标准应用程序编程接口(API)类库和第三方类库等方面Java和C++语言又有许多差 另IJ,下面将重点对与本专利技术相关的Java语言和C++语言这两种语言之间的差别进行描述。在编译处理方法方面java语言和C++语言都采用独立编译技术,对每个文件 或编译单元进行单独编译,但在处理编译单元对外部引用的查找和处理方面,有较大差 异。Java编译器可以查看其它文件或编译单元,Java编译器会根据需要找到当前编译单 元所需要的外部引用的具体位置并进行编译处理;C++编译器在编译的过程中只处理当前 文件或编译单元,不查看和处理当前编译单元之外的任何文件,采用包含编译预处理命令 ( include)将外部引用加载到当前文件或编译单元,形成独立的编译环境。在头文件方面=Java不支持头文件,所有的字段及方法等定义均以类成员的形式 封装在类体之内,所有源程序文件后缀均以.java结尾;C++语言中用头文件来定义类的原 型、全局变量、库函数等,以帮助编译单元的外部引用的实现,头文件的后缀以.h结尾。在编译预处理方面Java不支持预处理功能,Java编译器没有预处理模块和预处 理过程;C++在编译过程中都有一个预编译阶段,即众所周知的预处理器,C++语言通过包 含编译预处理命令(《include)用包含头文件的方式将外部引用加载到当前文件或编译单 元,在C++语言程序编译过程中的预处理阶段,由包含编译预处理命令(iiinclude)所指定 的头文件,将被加载到当前文件或编译单元。在包(package)方面Java使用包对一组相关的类型,提供访问保护和名称空间 管理,一方面可通过包成员使用时命名规则的限定确保成员名的唯一性,另一方面,在方便 代码开发管理的同时,便于与标准的Java应用程序编程接口(API)和第三方类库分开管 理。Java应用程序编程接口(API)按照相关性将类(class)和接口(interface)分为多个 库,这些库也被称为包。Java语言通过特定关键字,采用package语句实现包的创建,对于 同属一个包中的其它的成员,无需特殊声明,可直接使用,而对于其它包中的成员则可通过 直接使用该成员的完全限定名或是导入(import)该成员到本文件的方式进行包成员的使 用,为了避免命名冲突,包的名称按照惯例一般采用因特网域名的反向顺序作为包名称;而 在C++语言中,没有包的概念,与包机制相类似的是命名空间(namespace),但并不完全等 同,与包机制所不同的是命名空间对于同属一个命名空间的其它的成员也不能直接使用, 而需要用包含编译预处理命令(《include)将外部引用加载到当前文件或编译单元。在交叉引用方面Java因为其编译器更为灵活的查找方式,使得程序中的各个类 之间可以任意交叉易用,而不需要做任何处理或者修改即可被正确编译;C++语言因为其 受限于先定义后使用的原则,需要对交叉引用的情况进行前置声明或包含处理才能被编译器正确编译。 标准应用程序编程接口类库和第三方类库方面Java标准应用程序编程接口 (API)类库和第三方类库一般以Java编译后的.class文件形式提供给用户,这些.class 文件以Java固定格式压缩的Jar包形式存在于虚拟机环境或者Java开发环境路径中,在 正确配置编译器查找路径后,便可以与访问本项目其它源码一样采用导入(import)或者 完全限定名方式对其成员进行外部引用;C++标准应用程序编程接口类库和第三方类库可 以以静态链接库或者动态链接库的形式提供,通过包含(include)对应的头文件(.h)进行 引用。在Java语言编写的程序中,大部分均本文档来自技高网...

【技术保护点】
一种应用于Java到C++语言程序翻译中外部引用的翻译方法,包括以下步骤:步骤1)、将Java编译单元中简单名称方式的外部引用改为完全限定名方式;步骤2)、使用编译单元拆分装置拆分Java编译单元,使每个编译单元只包含一个成员,即只包含一个类或接口的定义;步骤3)、使用成员更名装置对Java编译单元及成员进行更名;步骤4)、使用编译单元迁移装置将各Java编译单元迁移至缺省包;步骤5)、使用导入列表生成装置为每个Java编译单元生成导入列表;步骤6)、使用C++头文件中头文件导出装置为翻译后生成的C++头文件生成包含语句和前置声明;步骤7)、使用C++源文件中头文件导出装置为翻译后生成的C++源文件生成包含语句。

【技术特征摘要】
一种应用于Java到C++语言程序翻译中外部引用的翻译方法,包括以下步骤步骤1)、将Java编译单元中简单名称方式的外部引用改为完全限定名方式;步骤2)、使用编译单元拆分装置拆分Java编译单元,使每个编译单元只包含一个成员,即只包含一个类或接口的定义;步骤3)、使用成员更名装置对Java编译单元及成员进行更名;步骤4)、使用编译单元迁移装置将各Java编译单元迁移至缺省包;步骤5)、使用导入列表生成装置为每个Java编译单元生成导入列表;步骤6)、使用C++头文件中头文件导出装置为翻译后生成的C++头文件生成包含语句和前置声明;步骤7)、使用C++源文件中头文件导出装置为翻译后生成的C++源文件生成包含语句。2.如权利要求1所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法, 其特征为使用编译单元拆分装置拆分Java编译单元,具体操作包括a、创建新的编译单元;b、组织在原来的包中;C、复制内容到新的编译单元中;d、删除原编译单元中所有非公有的成员。3.如权利要求1所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法, 其特征为使用成员更名装置对Java编译单元及成员进行更名,具体操作包括a、生成自定义规则的新成员名;b、对成员进行改名;C、对编译单元进行改名;d、将所有原成员的引用更新为新成员名。4.如权利要求3所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法, 其特征为在对Java编译单元及成员进行更名操作步骤中成员更名装置所采用的第一自 定义规则为新的名称由包名与成员名共同组成,包名中以点字符分隔的各部分之间以及 包名与成员名之间采用编译器和集成开发环境允许的分隔符进行分隔。5.如权利要求1所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法, 其特征为使用编译单元迁移装置进行编译单元迁移操作,具体操作包括a、判断命名冲突;b、如果存在命名冲突,则使用成员更名装置进行成员更名; C、移动编...

【专利技术属性】
技术研发人员:阮锋魏利锋
申请(专利权)人:杭州元睿信息技术有限公司
类型:发明
国别省市:86[中国|杭州]

相关技术
    暂无相关专利
网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1