CN101968736A - 一种应用于Java到C++语言程序翻译中外部引用的翻译方法 - Google Patents
一种应用于Java到C++语言程序翻译中外部引用的翻译方法 Download PDFInfo
- Publication number
- CN101968736A CN101968736A CN2010102800126A CN201010280012A CN101968736A CN 101968736 A CN101968736 A CN 101968736A CN 2010102800126 A CN2010102800126 A CN 2010102800126A CN 201010280012 A CN201010280012 A CN 201010280012A CN 101968736 A CN101968736 A CN 101968736A
- Authority
- CN
- China
- Prior art keywords
- java
- compilation unit
- header file
- name
- external reference
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种应用于Java到C++语言程序翻译中外部引用的翻译方法。包括以下步骤:将Java编译单元中简单名称方式的外部引用改为完全限定名方式;拆分Java编译单元,使每个Java编译单元只包含一个成员定义;对Java编译单元及成员进行更名;Java编译单元迁移至缺省包;为Java编译单元生成导入列表;生成C++头文件的包含语句和前置声明;生成C++源文件的包含语句。本发明在保证代码功能性不变的前提下,提供了一种自动化的、高可靠性的Java到C++语言程序翻译中外部引用的翻译方法,具有较好的运行效率。
Description
技术领域
本发明涉及计算机领域高级语言代码翻译中的关键技术,为一种应用于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++语言又有许多差别,下面将重点对与本发明相关的Java语言和C++语言这两种语言之间的差别进行描述。
在编译处理方法方面:Java语言和C++语言都采用独立编译技术,对每个文件或编译单元进行单独编译,但在处理编译单元对外部引用的查找和处理方面,有较大差异。Java编译器可以查看其它文件或编译单元,Java编译器会根据需要找到当前编译单元所需要的外部引用的具体位置并进行编译处理;C++编译器在编译的过程中只处理当前文件或编译单元,不查看和处理当前编译单元之外的任何文件,采用包含编译预处理命令(#include)将外部引用加载到当前文件或编译单元,形成独立的编译环境。
在头文件方面:Java不支持头文件,所有的字段及方法等定义均以类成员的形式封装在类体之内,所有源程序文件后缀均以.java结尾;C++语言中用头文件来定义类的原型、全局变量、库函数等,以帮助编译单元的外部引用的实现,头文件的后缀以.h结尾。
在编译预处理方面:Java不支持预处理功能,Java编译器没有预处理模块和预处理过程;C++在编译过程中都有一个预编译阶段,即众所周知的预处理器,C++语言通过包含编译预处理命令(#include)用包含头文件的方式将外部引用加载到当前文件或编译单元,在C++语言程序编译过程中的预处理阶段,由包含编译预处理命令(#include)所指定的头文件,将被加载到当前文件或编译单元。
在包(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程序设计在实际应用中相当普遍,因此,需要一种应用于Java到C++语言程序翻译中外部引用的翻译方法。
因为Java与C++语言之间语言本身和语法上的差别,导致了Java到C++语言程序的翻译相当困难,存在很多关键的技术难点,Java到C++语言程序翻译中外部引用的翻译是其中的重要组成部分。本发明所述的方法将着重解决Java到C++语言程序翻译过程中外部引用翻译中的重点、难点。
发明内容
本发明的目的是提供一种应用于Java到C++语言程序翻译中外部引用的翻译方法,能有效地解决因为Java语言和C++语言之间的差异给Java到C++语言程序翻译过程中尤其是外部引用的翻译造成的困难,从而解决背景技术中的问题。
为了实现上述发明目的,本发明采用以下技术方案,它包括以下步骤:
步骤1)、将Java编译单元中简单名称方式的外部引用改为完全限定名方式;
步骤2)、使用编译单元拆分装置拆分Java编译单元,使每个编译单元只包含一个成员,即只包含一个类或接口的定义;
步骤3)、使用成员更名装置对Java编译单元及成员进行更名;
步骤4)、使用编译单元迁移装置将各Java编译单元迁移至缺省包;
步骤5)、使用导入列表生成装置为每个Java编译单元生成导入列表;
步骤6)、使用C++头文件中头文件导出装置为翻译后生成的C++头文件生成包含语句和前置声明;
步骤7)、使用C++源文件中头文件导出装置为翻译后生成的C++源文件生成包含语句。
在采用上述技术方案的同时,本发明还可采用或组合采用以下进一步的技术方案:
使用编译单元拆分装置拆分Java编译单元,具体操作包括:
a、创建新的编译单元;
b、组织在原来的包中;
c、复制内容到新的编译单元中;
d、删除原编译单元中所有非公有的成员。
使用成员更名装置对Java编译单元及成员进行更名,具体操作包括:
a、生成自定义规则的新成员名;
b、对成员进行改名;
c、对编译单元进行改名;
d、将所有原成员的引用更新为新成员名。
在对Java编译单元及成员进行更名操作步骤中成员更名装置所采用的第一自定义规则为:新的名称由包名与成员名共同组成,包名中以点字符分隔的各部分之间以及包名与成员名之间采用编译器和集成开发环境允许的分隔符进行分隔。
使用编译单元迁移装置进行编译单元迁移操作,具体操作包括:
a、判断命名冲突;
b、如果存在命名冲突,则使用成员更名装置进行成员更名;
c、移动编译单元;
d、原包名改为新的包名;
e、将所有原包名引用处更新为新包名。
使用成员更名装置进行成员更名操作中成员更名装置所采用的第二自定义规则为::新的名称由原成员名加上一个随机数组成,其之间采用编译器和集成开发环境允许的分隔符进行分隔。
使用C++头文件中头文件导出装置为翻译后生成的C++头文件生成包含语句和前置声明,具体操作包括:
a、对父类或父接口的处理;
b、对实现的接口的处理;
c、对Java标准API类库和第三方类库中的类或接口的外部引用的处理;
d、对其它导入项的处理;
e、生成C++头文件包含语句和前置声明。
其中对Java标准API类库和第三方类库中的类或接口的外部引用的处理方法如下:使用Java标准API类库和第三方类库对应的头文件查找装置查找映射表,将得到的对应的C++头文件列表添加到C++头文件的头文件列表中。
使用C++源文件中头文件导出装置为翻译后生成的C++源文件生成包含语句,具体操作包括:
a、对父类或父接口的处理;
b、对实现的接口的处理;
c、对Java标准API类库和第三方类库中的类或接口的外部引用的处理;
d、对其它导入项的处理;
e、将同名头文件添加到头文件列表中;
f、生成C++源文件包含语句。
其中对Java标准API类库和第三方类库中的类或接口的外部引用的处理方法如下:使用Java标准API类库和第三方类库对应的头文件查找装置查找映射表,将得到的对应的C++头文件列表添加到C++源文件的头文件列表中。
本发明提出了一种应用于Java到C++语言程序翻译中外部引用的翻译方法,解决Java到C++语言程序翻译过程中外部引用的翻译问题,在从Java到C++语言程序的翻译中,针对Java程序中的外部引用进行相应处理,从而使得包含了外部引用的Java程序,经过程序翻译得到C++程序之后可由C++编译器正确编译,从而扩大了Java到C++语言程序翻译所能处理的Java程序的类型和应用范围,保证了Java到C++语言程序翻译的正确率,节省了大量的需要程序员手工改动的额外工作和大量的时间,提高了Java到C++语言程序翻译的翻译效率。
为了更好的理解本发明,下面简要介绍一下本发明说明书中采用的部分术语的含义:编译单元、完全限定名、简单名称、Java编译单元的成员、导入列表、导入记录、头文件列表、前置声明列表、哈希映射表、键、值等。
编译单元:Java语言和C++语言均采用的是独立编译技术,编译单元指的是编译器进行编译处理时的文件对象。
完全限定名:在Java编译单元中,以包名为前缀的成员名叫做该成员的完全限定名。
简单名称:在Java编译单元中,当采用了导入(import)方式对外部引用进行导入之后,即可对外部引用的成员采用不加包名前缀的成员名进行使用,不加包名前缀的成员名叫做该成员的简单名称。
Java编译单元的成员:为Java编译单元中定义的类或者接口。
导入列表:是对Java编译单元所使用的外部引用的成员名称进行记录的一种数据结构。该数据结构由导入记录构成,可进行导入记录的查找、插入、删除等操作。
导入记录:导入列表的组成部分,是外部引用的类或接口的名称的记录。
头文件列表:是对C++编译单元全部外部引用需要包含的头文件的名称进行记录的一种数据结构。该数据结构由头文件名称记录构成,可进行头文件名称记录的查找、插入、删除等操作。
前置声明列表:是对C++编译单元中需要进行前置声明的成员名称进行记录的一种数据结构。该数据结构由前置声明的成员名称记录构成,可进行前置声明的成员名称记录的查找、插入、删除等操作。
哈希映射表(Hash table):是根据关键码值(Key value)而直接进行访问的数据结构。通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
键:关键码值(Key value)。
值:表中的位置,即哈希地址。
上述技术方案中,所使用的各装置表述如下:
a、编译单元拆分装置
该装置将遍历欲拆分编译单元,查找所有的成员定义,首先为每个非公有(非public)的成员创建一个新的编译单元,新的编译单元的文件名与其所包含的非公有的成员的名字保持一致,然后,将这些单独的编译单元组织在原来的包中,即包名均使用原公有(public)成员的包名,新生成编译单元保存在与原编译单元同一文件夹中,最后从原编译单元中复制非公有成员的内容到新的编译单元中,并删除原编译单元中所有非公有的成员,仅保留原公有(public)的成员。
b、成员更名装置
根据自定义规则自动生成新成员名,得到新成员名后,首先对将要改名的成员进行更改成员名操作,更改其成员名为新成员名;然后将该成员所在的编译单元的文件名同步更新为新成员名;最后遍历全部Java源代码,查找所有对将要改名成员的引用,将所有其引用更新为新成员名。
c、编译单元迁移装置
完成编译单元在不同包之间的迁移,首先该装置遍历迁移后的新包中的文件并判断是否有和欲迁移编译单元的命名冲突,如果有冲突,则使用成员更名装置对欲迁移的成员进行成员更名,成员更名装置所采用的第二自定义规则为:新的名称由原成员名加上一个随机数组成,其之间采用编译器和集成开发环境允许的分隔符进行分隔。在无命名冲突情况下,将对应的编译单元从原来的目录结构中移动到新的包目录结构中,然后将原包名改为新的包名,最后,遍历所有编译单元,对所有原来旧的包名的引用处,均更新为新的包名。
d、导入列表生成装置
该装置首先为该编译单元建立导入列表,然后在该编译单元中查找并处理每个对外部类或外部接口以及其成员的引用,如果在导入列表中,尚不存在该外部类或外部接口的导入记录,则将该外部引用的类或接口添加到导入列表中。对于编译单元本包中的类或接口引用和集成开发环境默认的类或接口的外部引用同样生成对应的导入记录并添加到导入列表中。对于Java标准API类库和第三方类库中的类或接口的外部引用,生成其对应的完全限定名的导入记录并添加到导入列表中。对于静态导入形式的引用的处理,与对外部类或外部接口的成员的引用处理方法相同,并将其引用到的Java编译单元的成员添加到导入列表中。
e、Java标准API类库和第三方类库对应的头文件查找装置
该装置包含一个存储Java标准API类库和第三方类库成员名和C++头文件列表的对应关系映射表,通过查找该映射表,可以得到Java标准API类库和第三方类库成员对应的C++编译单元所需要包含的C++头文件列表。该关系映射表的数据结构为哈希映射表,键为Java标准API类库和第三方类库成员名字符串,值为需要包含的C++头文件列表。在查找该哈希映射表时,以Java标准API类库和第三方类库成员名字符串作为输入,即可得到需要包含的C++头文件列表。
f、C++头文件中头文件导出装置
该装置以导入列表为依据,对Java编译单元中的Java成员,判断其是否有父类或父接口,如果有父类或父接口,继续判断该父类或父接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++头文件的头文件列表中;如果该父类或父接口不属于Java标准API类库或第三方类库,则直接使用该父类或父接口的名称加.h构建新的包含(include)项,添加到C++头文件的头文件列表中;从导入列表中删除该父类或父接口的导入记录。
处理完父类或父接口后,继续判断该Java成员是否有实现接口,如果有实现接口,则对全部实现的接口进行与父类或父接口操作类似的操作。判断该接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++头文件的头文件列表中;如果该接口不属于Java标准API类库或第三方类库,则直接使用该接口名加.h构建新的包含(include)项,添加到C++头文件的头文件列表中;从导入列表中删除该接口的导入记录。
处理完接口后,查看导入列表,查找Java标准API类库或第三方类库中的类或接口的外部引用的导入记录,对全部的Java标准API类库或第三方类库中的类或接口,使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++头文件的头文件列表中,从导入列表中删除Java标准API类库或第三方类库中的类或接口的导入记录。
然后对导入列表中剩余的每个导入记录,逐项记录并生成前置声明列表。
最后该装置先将为C++头文件的头文件列表中的每一项,生成C++头文件(.h)中的标准包含(include)语句,并放置到C++头文件(.h)顶部区域,然后为前置声明列表中的每一项生成其外部引用的标准前置声明表达式,并放置在C++头文件(.h)的包含(include)语句之后。
g、C++源文件中头文件导出装置
该装置以导入列表为依据,对Java编译单元中的Java成员,判断其是否有父类或父接口,如果有父类或父接口,继续判断该父类或父接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++源文件的头文件列表中;如果该父类或父接口不属于Java标准API类库或第三方类库,则直接使用该父类或父接口的名称加.h构建新的包含(include)项,添加到C++源文件的头文件列表中;从导入列表中删除该父类或父接口的导入记录。
处理完父类或父接口后,继续判断该Java成员是否有实现接口,如果有实现接口,则对全部实现的接口进行与父类或父接口操作类似的操作。判断该接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++源文件的头文件列表中;如果该接口不属于Java标准API类库或第三方类库,则直接使用该接口名加.h构建新的包含(include)项,添加到C++源文件的头文件列表中,从导入列表中删除该接口的导入记录。
处理完接口后,对导入列表中剩余的每个导入记录,判断该导入记录是否存在于Java标准API类库或第三方类库,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++源文件的头文件列表中,如果不属于Java标准API类库或第三方类库,则直接使用该成员名加.h构建新的包含(include)项,添加到C++源文件的头文件列表中。
处理完剩余的导入项后,将与该源文件(.cpp)同名的头文件(.h)添加到该源文件的头文件列表中。
最后该装置将为C++源文件的头文件列表中的每一项,生成C++源文件(.cpp)中的标准包含(include)语句,并放置到C++源文件的顶部区域。
附图说明
图1示出了编译单元拆分装置的处理流程图;
图2示出了成员更名装置的处理流程图;
图3示出了编译单元迁移装置的处理流程图;
图4示出了C++头文件中头文件导出装置的处理流程图;
图5示出了C++源文件中头文件导出装置的处理流程图;
图6为实施例中的将Java编译单元中简单名称方式的外部引用改为完全限定名方式的操作示意图;
图7为实施例中的拆分Java编译单元的操作示意图;
图8为实施例中的对Java编译单元及成员进行更名操作的操作示意图;
图9为实施例中的将Java编译单元迁移至缺省包的操作示意图;
图10为实施例中的为翻译后生成的C++头文件生成包含语句和前置声明的操作示意图;
图11为实施例中的为翻译后生成的C++源文件生成包含语句的操作示意图;
图12示出了本发明方法的总体流程图。
具体实施方式
下面结合附图对本发明的方法的具体实施方式做进一步说明。
参照附图,本发明包括以下步骤:
步骤101)、将Java编译单元中简单名称方式的外部引用改为完全限定名方式。遍历每个Java编译单元,查找因导入了特定成员而采用简单名称方式的外部引用,并将简单名称方式改写为完全限定名方式。对于当前编译单元所在包中的类或接口简单名称方式的外部引用和系统默认的类或接口的简单名称方式的外部引用,进行相同处理,将简单名称方式改写为完全限定名方式。本步骤处理仅针对本项目各编译单元中的类或接口的外部引用,对于Java标准API类库和第三方类库中的类或接口的外部引用,在步骤105-107中由其它装置进行处理。
步骤102)、拆分Java编译单元,使每个编译单元只包含一个成员,即只包含一个类或接口的定义。遍历每个Java编译单元,首先查找在一个编译单元中包含了多个成员的编译单元,接着将该编译单元通过编译单元拆分装置拆分为多个单独的编译单元,使得每个单独的编译单元只包含原编译单元中的一个成员。从而保证将每个单独的Java编译单元翻译为对应的C++头文件和C++源文件后,在C++头文件中只包含一个类或者接口的定义,在C++源文件中只包含一个类的实现。本步骤显著而有效地避免了可能出现的关联性问题,使得代码结构更清晰,更利于应用转换和引用等操作。
步骤103)、对Java编译单元及成员进行更名。遍历每个Java编译单元,对每个编译单元通过成员更名装置进行更名,此处采用第一自定义规则为:新的名称由包名与成员名共同组成,包名中以点字符分隔的各部分之间以及包名与成员名之间采用编译器和集成开发环境允许的分隔符进行分隔,从而保证名称的唯一性。
步骤104)、Java编译单元迁移至缺省包。遍历每个Java编译单元,将各编译单元通过编译单元迁移装置全部迁移到缺省包中。所述的缺省包,为集成开发环境默认的无显示包声明情况下编译单元所处的包,其在目录结构中为集成开发环境默认的源代码文件夹。
步骤105)、为Java编译单元生成导入列表。遍历每个Java编译单元,通过导入列表生成装置为每个编译单元生成导入列表。
步骤106)、使用C++头文件中头文件导出装置为翻译后生成的C++头文件(.h)生成包含(include)语句和前置声明。遍历每个Java编译单元,生成C++头文件,复制一个步骤105生成的导入列表的拷贝,并以该拷贝列表为依据,通过C++头文件中头文件导出装置为Java到C++语言程序翻译后生成的C++头文件(.h)生成包含(include)语句和前置声明,其中生成的C++头文件的文件名与Java编译单元名是一致的。由于Java语言程序中类对象的使用是一种等同于指针的方式,因此在翻译为对应的C++语言程序后,可以等价翻译为类指针的定义形式,由此对于类的交叉引用的问题,本发明中的C++头文件中头文件导出装置采用了添加前置声明的方法进行处理。本发明方法采用的是C++程序中成员定义及声明与成员的具体实现分开存放的处理方式,因此本发明方法中的头文件(.h),仅包含成员定义和声明,不包含成员的具体实现,成员的具体实现部分位于本发明方法生成的源文件(.cpp)中。
步骤107)、使用C++源文件中头文件导出装置为翻译后生成的C++源文件(.cpp)生成包含(include)语句。遍历每个Java编译单元,生成C++源文件,复制一个步骤105生成的导入列表的拷贝,并以该拷贝列表为依据,通过C++源文件中头文件导出装置为Java到C++语言程序翻译后生成的C++源文件(.cpp)生成包含(include)语句,其中生成的C++源文件的文件名与Java编译单元名是一致的。本发明方法采用的是C++程序中成员定义及声明与成员的具体实现分开存放的处理方式,因此本发明方法中的头文件(.h),仅包含成员定义和声明,不包含成员的具体实现,成员的具体实现部分位于本发明方法生成的源文件(.cpp)中。
本发明为实现技术方案,可采用以下装置:
a、编译单元拆分装置
如图1所示,该装置将遍历欲拆分编译单元,查找所有的成员定义,首先为每个非公有(非public)的成员创建一个新的编译单元,新的编译单元的文件名与其所包含的非公有的成员的名字保持一致,然后,将这些单独的编译单元组织在原来的包中,即包名均使用原公有(public)成员的包名,新生成编译单元保存在与原编译单元同一文件夹中,最后从原编译单元中复制非公有成员的内容到新的编译单元中,并删除原编译单元中所有非公有的成员,仅保留原公有(public)的成员。该装置可在本发明的步骤102中被调用。
b、成员更名装置
如图2所示,根据自定义规则自动生成新成员名,得到新成员名后,首先对将要改名的成员进行更改成员名操作,更改其成员名为新成员名;然后将该成员所在的编译单元的文件名同步更新为新成员名;最后遍历全部Java源代码,查找所有对将要改名成员的引用,将所有其引用更新为新成员名。该装置可在本发明的步骤103中被调用。
c、编译单元迁移装置
如图3所示,完成编译单元在不同包之间的迁移,首先该装置遍历迁移后的新包中的文件并判断是否有和欲迁移编译单元的命名冲突,如果有冲突,则使用成员更名装置对欲迁移的成员进行成员更名,成员更名装置所采用的第二自定义规则为:新的名称由原成员名加上一个随机数组成,其之间采用编译器和集成开发环境允许的分隔符进行分隔。在无命名冲突情况下,将对应的编译单元从原来的目录结构中移动到新的包目录结构中,然后将原包名改为新的包名,最后,遍历所有编译单元,对所有原来旧的包名的引用处,均更新为新的包名。该装置可在本发明的步骤104中被调用。
d、导入列表生成装置
该装置首先为该编译单元建立导入列表,然后在该编译单元中查找并处理每个对外部类或外部接口以及其成员的引用,如果在导入列表中,尚不存在该外部类或外部接口的导入记录,则将该外部引用的类或接口添加到导入列表中。对于编译单元本包中的类或接口引用和集成开发环境默认的类或接口的外部引用同样生成对应的导入记录并添加到导入列表中。对于Java标准API类库和第三方类库中的类或接口的外部引用,生成其对应的完全限定名的导入记录并添加到导入列表中。对于静态导入形式的引用的处理,与对外部类或外部接口的成员的引用处理方法相同,并将其引用到的Java编译单元的成员添加到导入列表中。该装置可在本发明的步骤105中被调用。
e、Java标准API类库和第三方类库对应的头文件查找装置
该装置包含一个存储Java标准API类库和第三方类库成员名和C++头文件列表的对应关系映射表,通过查找该映射表,可以得到Java标准API类库和第三方类库成员对应的C++编译单元所需要包含的C++头文件列表。该关系映射表的数据结构为哈希映射表,键为Java标准API类库和第三方类库成员名字符串,值为需要包含的C++头文件列表。在查找该哈希映射表时,以Java标准API类库和第三方类库成员名字符串作为输入,即可得到需要包含的C++头文件列表。该装置可在本发明的步骤106、107中被调用。
f、C++头文件中头文件导出装置
如图4所示,该装置以导入列表为依据,对Java编译单元中的Java成员,判断其是否有父类或父接口,如果有父类或父接口,继续判断该父类或父接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++头文件的头文件列表中;如果该父类或父接口不属于Java标准API类库或第三方类库,则直接使用该父类或父接口的名称加.h构建新的包含(include)项,添加到C++头文件的头文件列表中;从导入列表中删除该父类或父接口的导入记录。
处理完父类或父接口后,继续判断该Java成员是否有实现接口,如果有实现接口,则对全部实现的接口进行与父类或父接口操作类似的操作。判断该接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++头文件的头文件列表中;如果该接口不属于Java标准API类库或第三方类库,则直接使用该接口名加.h构建新的包含(include)项,添加到C++头文件的头文件列表中;从导入列表中删除该接口的导入记录。
处理完接口后,查看导入列表,查找Java标准API类库或第三方类库中的类或接口的外部引用的导入记录,对全部的Java标准API类库或第三方类库中的类或接口,使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++头文件的头文件列表中,从导入列表中删除Java标准API类库或第三方类库中的类或接口的导入记录。
然后对导入列表中剩余的每个导入记录,逐项记录并生成前置声明列表。
最后该装置先将为C++头文件的头文件列表中的每一项,生成C++头文件(.h)中的标准包含(include)语句,并放置到C++头文件(.h)顶部区域,然后为前置声明列表中的每一项生成其外部引用的标准前置声明表达式,并放置在C++头文件(.h)的包含(include)语句之后。该装置可在本发明的步骤106中被调用。
g、C++源文件中头文件导出装置
如图5所示,该装置以导入列表为依据,对Java编译单元中的Java成员,判断其是否有父类或父接口,如果有父类或父接口,继续判断该父类或父接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++源文件的头文件列表中;如果该父类或父接口不属于Java标准API类库或第三方类库,则直接使用该父类或父接口的名称加.h构建新的包含(include)项,添加到C++源文件的头文件列表中;从导入列表中删除该父类或父接口的导入记录。
处理完父类或父接口后,继续判断该Java成员是否有实现接口,如果有实现接口,则对全部实现的接口进行与父类或父接口操作类似的操作。判断该接口是否存在于Java标准API类库或第三方类库中,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++源文件的头文件列表中;如果该接口不属于Java标准API类库或第三方类库,则直接使用该接口名加.h构建新的包含(include)项,添加到C++源文件的头文件列表中,从导入列表中删除该接口的导入记录。
处理完接口后,对导入列表中剩余的每个导入记录,判断该导入记录是否存在于Java标准API类库或第三方类库,如果是,则使用Java标准API类库和第三方类库对应的头文件查找装置查找其对应的C++头文件列表并添加到C++源文件的头文件列表中,如果不属于Java标准API类库或第三方类库,则直接使用该成员名加.h构建新的包含(include)项,添加到C++源文件的头文件列表中。
处理完剩余的导入项后,将与该源文件(.cpp)同名的头文件(.h)添加到该源文件的头文件列表中。
最后该装置将为C++源文件的头文件列表中的每一项,生成C++源文件(.cpp)中的标准包含(include)语句,并放置到C++源文件的顶部区域。该装置可在本发明的步骤107中被调用。
如图6所示,标号601为一个Java编译单元,其名称为ClassA.java,它可以包含如下程序语句:
import com.yoray.graphics.Rectangle;
……
Rectangle myRect=null;
……
标号602为一个Java编译单元,其名称为ClassA.java。
Java编译单元601经步骤101处理后,得到Java编译单元602。具体的说,601中所包含的简单名称方式的外部引用:
Rectangle myRect=null;
经过步骤101处理后,被改为Java编译单元602中完全限定名方式的外部引用:
com.yoray.graphics.Rectangle myRect=null;
如图7所示,标号701为一个拆分前的Java编译单元,其名称为ClassA.java,它可以包含如下程序语句:
package com.yoray.java2cpp
public class ClassA{
……
}
class ClassD{
……
}
标号702为拆分后的Java编译单元,其名称为ClassA.java;标号703为拆分后的Java编译单元,其名称为ClassD.java,703保存在与702同一文件夹中。
拆分前的Java编译单元701经步骤102处理后,得到拆分后的Java编译单元702和703。具体的说,701中所包含的成员:
class ClassD{
……
}
经步骤102处理后,得到新的编译单元703,它可以包含如下程序语句:
package com.yoray.java2cpp
class ClassD{
……
}
701本身经步骤102处理后,得到编译单元702,它可以包含如下程序语句:
package com.yoray.java2cpp
public class ClassA {
……
}
如图8所示,标号801为一个Java编译单元,其名称为ClassA.java,它可以包含如下程序语句:
package com.yoray.java2cpp
public class ClassA{
……
}
标号802为一个Java编译单元,其名称为com_yoray_java2cpp_ClassA.java。
更名前的Java编译单元801经步骤103处理后,得到更名后的Java编译单元802。具体的说,801中所包含的成员ClassA,经步骤103处理后,其成员名转换为802中的新成员名com_yoray_java2cpp_ClassA;801的文件名,经步骤103处理后,转换为802的文件名com_yoray_java2cpp_ClassA.java。802中包含如下程序语句:
package com.yoray.java2cpp
public class com_yoray_java2cpp_ClassA{
……
}
如图9所示,标号901为一个Java编译单元,其名称为com_yoray_java2cpp_ClassA.java,它可以包含如下程序语句:
package com.yoray.java2cpp
public class com_yoray_java2cpp_ClassA{
com.yoray.graphics.com_yoray_graphics_Rectangle myRect=null;
……
}
标号902为一个Java编译单元,其名称为com_yoray_java2cpp_ClassA.java。
迁移前的Java编译单元901经步骤104处理后,得到迁移至缺省包后的Java编译单元902。具体的说,901中可以包含如下程序语句:
com.yoray.graphics.com_yoray_graphics_Rectangle myRect=null;
该语句在601中的形式为:Rectangle myRect=null;
经过步骤101的处理,被改写为:
com.yoray.graphics.Rectangle myRect=null;
经过步骤103的处理,该语句在802中的形式为:
com.yoray.graphics.com_yoray_graphics_Rectangle myRect=null;
经过步骤104的处理,该语句在902中的形式为:
com_yoray_graphics_Rectangle myRect=null;
在902中可以包含如下程序语句:
public class com_yoray_java2cpp_ClassA{
com_yoray_graphics_Rectangle myRect=null;
……
}
然后使用导入列表生成装置为每个Java编译单元生成导入列表。在一个迁移至缺省包后的Java编译单元com_yoray_java2cpp_ClassA.java中可以包含如下程序语句:
import com_yoray_graphics_Rectangle;
import com_yoray_java2cpp_test_ClassB;
import java.lang.Runnable;
public class com_yoray_java2cpp_ClassA extends com_yoray_java2cpp_test_ClassB
implements com_yoray_java2cpp_InterfaceC,Runnable{
……
com_yoray_graphics_Rectangle myRect=null;
……
}
经步骤105处理后,得到com_yoray_java2cpp_ClassA.java编译单元的导入列表,其中包含的内容为:
com_yoray_java2cpp_test_ClassB
com_yoray_java2cpp_InterfaceC
java.lang.Runnable
com_yoray_graphics_Rectangle
如图10所示,标号1001为一个已迁移至缺省包的Java编译单元,其名称为com_yoray_java2cpp_ClassA.java,它可以包含如下程序语句:
import com_yoray_graphics_Rectangle;
import com_yoray_java2cpp_test_ClassB;
import java.lang.Runnable;
public class com_yoray_java2cpp_ClassA extends com_yoray_java2cpp_test_ClassB
implements com_yoray_java2cpp_InterfaceC,Runnable{
……
com_yoray_graphics_Rectangle myRect=null;
……
}
标号1002为Java编译单元com_yoray_java2cpp_ClassA.java的导入列表,其中包含的内容为:
com_yoray_java2cpp_test_ClassB
com_yoray_java2cpp_InterfaceC
java.lang.Runnable
com_yoray_graphics_Rectangle
标号1003为C++头文件的包含语句和前置声明,C++头文件的名称为:com_yoray_java2cpp_ClassA.h。
Java编译单元1001及其导入列表1002经步骤106处理后,得到C++头文件的包含(include)语句和前置声明1003。具体的说,1001中的类com_yoray_java2cpp_ClassA其父类com_yoray_java2cpp_test_ClassB经步骤106处理后,得到1003中的包含语句:
#include″com_yoray_java2cpp_test_ClassB.h″
1001中的类com_yoray_java2cpp_ClassA实现的接口com_yoray_java2cpp_InterfaceC和Runnable经步骤106处理后,得到1003中的包含语句:
#include″com_yoray_java2cpp_InterfaceC.h″
#include″java_lang_Runnable.h″
其中,在处理实现的接口时,对于导入列表中的Java标准API类库和第三方类库中的成员:java.lang.Runnable,使用Java标准API类库和第三方类库对应的头文件查找装置查找哈希映射表得到其对应的C++头文件列表为:java_lang_Runnable.h,并将其添加到C++头文件的头文件列表中,经步骤106的处理得到1003中的包含语句:
#include″java_lang_Runnable.h″
1002中的com_yoray_graphics_Rectangle经步骤106处理后,得到1003中的前置声明:
class com_yoray_graphics_Rectangle;
1003可以包含如下语句和前置声明:
#include″com_yoray_java2cpp_test_ClassB.h″
#include″com_yoray_java2cpp_InterfaceC.h″
#include″java_lang_Runnable.h″
class com_yoray_graphics_Rectangle;
……
如图11所示,标号1101为一个已迁移至缺省包的Java编译单元,其名称为com_yoray_java2cpp_ClassA.java,它可以包含如下程序语句:
import com_yoray_graphics_Rectangle;
import com_yoray_java2cpp_test_ClassB;
import java.lang.Runnable;
public class com_yoray_java2cpp_ClassA extends com_yoray_java2cpp_test_ClassB
implements com_yoray_java2cpp_InterfaceC,Runnable{
……
com_yoray_graphics_Rectangle myRect=null;
……
}
标号1102为Java编译单元com_yoray_java2cpp_ClassA.java的导入列表,其中包含的内容为:
com_yoray_java2cpp_test_ClassB
com_yoray_java2cpp_InterfaceC
java.lang.Runnable
com_yoray_graphics_Rectangle
标号1103为C++源文件的包含语句,C++源文件的名称为com_yoray_java2cpp_ClassA.cpp。
Java编译单元1101及其导入列表1102经步骤107处理后,得到C++源文件的包含语句1103。具体的说,1101中的类com_yoray_java2cpp_ClassA其父类com_yoray_java2cpp_test_ClassB经步骤107处理后,得到1103中的包含语句:
#include″com_yoray_java2cpp_test_ClassB.h″
1101中的类com_yoray_java2cpp_ClassA实现的接口com_yoray_java2cpp_InterfaceC和Runnable经步骤107处理后,得到1103中的包含语句:
#include″com_yoray_java2cpp_InterfaceC.h″
#include″java_lang_Runnable.h″
其中,在处理实现的接口时,对于导入列表中的Java标准API类库和第三方类库中的成员:java.lang.Runnable,使用Java标准API类库和第三方类库对应的头文件查找装置查找哈希映射表得到其对应的C++头文件列表为:java_lang_Runnable.h,并将其添加到C++源文件的头文件列表中,经步骤107的处理得到1103中的包含语句:
#include″java_lang_Runnable.h″
1102中的com_yoray_graphics_Rectangle经步骤107处理后,得到1103中的包含语句:
#include″com_yoray_graphics_Rectangle.h″
此外,步骤107将得到与1103同名的头文件的包含语句:
#include″com_yoray_java2cpp_ClassA.h″
1103可以包含如下语句:
#include″com_yoray_java2cpp_test_ClassB.h″
#include″com_yoray_java2cpp_InterfaceC.h″
#include″java_lang_Runnable.h″
#include″com_yoray_graphics_Rectangle.h″
#include″com_yoray_java2cpp_ClassA.h″
……
对于C++程序中重复包含(include)的问题,现已经有很多方法可以解决这个问题,针对不同的编译环境,如采用增加条件编译命令或者采用编译预处理命令(#pragma once)等方法予以解决,因不属于本发明研究范畴,这里仅简略介绍。
以上所述的实施例,仅为本发明的优选实施例之一,并不用于限制本发明。对于本领域的技术人员而言,本发明的实施例可以有多种表现形式上的变化,凡在本发明的思想、方法和原则之内,所作的任何修改、等同替换、改进等任何表现形式上的变化,均应包含在本发明的保护范围之内。
Claims (10)
1.一种应用于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、移动编辑单元;
d、原包名改为新的包名;
e、将所有原包名引用处更新为新包名。
6.如权利要求5所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法,其特征为:使用成员更名装置进行成员更名操作中成员更名装置所采用的第二自定义规则为:新的名称由原成员名加上一个随机数组成,其之间采用编译器和集成开发环境允许的分隔符进行分隔。
7.如权利要求1所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法,其特征为:使用C++头文件中头文件导出装置为翻译后生成的C++头文件生成包含语句和前置声明,具体操作包括:
a、对父类或父接口的处理;
b、对实现的接口的处理;
c、对Java标准API类库和第三方类库中的类或接口的外部引用的处理;
d、对其它导入项的处理;
e、生成C++头文件包含语句和前置声明。
8.如权利要求7所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法,其特征为:对Java标准API类库和第三方类库中的类或接口的外部引用的处理为:使用Java标准API类库和第三方类库对应的头文件查找装置查找映射表,将得到的对应的C++头文件列表添加到C++头文件的头文件列表中。
9.如权利要求1所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法,其特征为:使用C++源文件中头文件导出装置为翻译后生成的C++源文件生成包含语句,具体操作包括:
a、对父类或父接口的处理;
b、对实现的接口的处理;
c、对Java标准API类库和第三方类库中的类或接口的外部引用的处理;
d、对其它导入项的处理;
e、将同名头文件添加到头文件列表中;
f、生成C++源文件包含语句。
10.如权利要求9所述的一种应用于Java到C++语言程序翻译中外部引用的翻译方法,其特征为:对Java标准API类库和第三方类库中的类或接口的外部引用的处理为:使用Java标准API类库和第三方类库对应的头文件查找装置查找映射表,将得到的对应的C++头文件列表添加到C++源文件的头文件列表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102800126A CN101968736A (zh) | 2010-09-13 | 2010-09-13 | 一种应用于Java到C++语言程序翻译中外部引用的翻译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102800126A CN101968736A (zh) | 2010-09-13 | 2010-09-13 | 一种应用于Java到C++语言程序翻译中外部引用的翻译方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101968736A true CN101968736A (zh) | 2011-02-09 |
Family
ID=43547896
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010102800126A Pending CN101968736A (zh) | 2010-09-13 | 2010-09-13 | 一种应用于Java到C++语言程序翻译中外部引用的翻译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101968736A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103886095A (zh) * | 2014-04-03 | 2014-06-25 | 北京深思数盾科技有限公司 | 跨平台目标文件复用方法 |
CN106528171A (zh) * | 2016-11-24 | 2017-03-22 | 郑州云海信息技术有限公司 | 一种异构计算平台子系统间的接口设计方法、装置及系统 |
CN107810474A (zh) * | 2015-07-10 | 2018-03-16 | 谷歌有限责任公司 | 大规模源代码存储库中的自动导入及依赖性 |
CN109542447A (zh) * | 2017-08-16 | 2019-03-29 | 深圳市道通科技股份有限公司 | 一种otx程序文件执行方法及装置 |
CN109542424A (zh) * | 2018-11-28 | 2019-03-29 | 上海大汉三通无线通信有限公司 | 一种补丁文件的生成方法、装置、设备及可读存储介质 |
CN110119274A (zh) * | 2018-02-05 | 2019-08-13 | 北京智明星通科技股份有限公司 | 一种数据编译的方法、装置以及电子终端、计算机可读存储介质 |
CN113031963A (zh) * | 2021-03-24 | 2021-06-25 | 北京字节跳动网络技术有限公司 | 条件编译的实现方法、装置、设备及存储介质 |
CN114327415A (zh) * | 2022-03-17 | 2022-04-12 | 武汉天喻信息产业股份有限公司 | 一种用于编译java文件的编译方法及装置 |
-
2010
- 2010-09-13 CN CN2010102800126A patent/CN101968736A/zh active Pending
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103886095B (zh) * | 2014-04-03 | 2017-10-24 | 北京深思数盾科技股份有限公司 | 跨平台目标文件复用方法 |
CN103886095A (zh) * | 2014-04-03 | 2014-06-25 | 北京深思数盾科技有限公司 | 跨平台目标文件复用方法 |
CN107810474A (zh) * | 2015-07-10 | 2018-03-16 | 谷歌有限责任公司 | 大规模源代码存储库中的自动导入及依赖性 |
CN107810474B (zh) * | 2015-07-10 | 2020-12-29 | 谷歌有限责任公司 | 大规模源代码存储库中的自动导入及依赖性 |
CN106528171B (zh) * | 2016-11-24 | 2019-09-24 | 郑州云海信息技术有限公司 | 一种异构计算平台子系统间的接口设计方法、装置及系统 |
CN106528171A (zh) * | 2016-11-24 | 2017-03-22 | 郑州云海信息技术有限公司 | 一种异构计算平台子系统间的接口设计方法、装置及系统 |
CN109542447A (zh) * | 2017-08-16 | 2019-03-29 | 深圳市道通科技股份有限公司 | 一种otx程序文件执行方法及装置 |
CN110119274A (zh) * | 2018-02-05 | 2019-08-13 | 北京智明星通科技股份有限公司 | 一种数据编译的方法、装置以及电子终端、计算机可读存储介质 |
US11231916B2 (en) | 2018-02-05 | 2022-01-25 | Beijing Elex Technology Co., Ltd. | Method and apparatus for data compilation using intermediate class files, electronic device and non-transitory computer readable storage medium |
CN109542424A (zh) * | 2018-11-28 | 2019-03-29 | 上海大汉三通无线通信有限公司 | 一种补丁文件的生成方法、装置、设备及可读存储介质 |
CN113031963A (zh) * | 2021-03-24 | 2021-06-25 | 北京字节跳动网络技术有限公司 | 条件编译的实现方法、装置、设备及存储介质 |
CN113031963B (zh) * | 2021-03-24 | 2023-09-12 | 北京字节跳动网络技术有限公司 | 条件编译的实现方法、装置、设备及存储介质 |
CN114327415A (zh) * | 2022-03-17 | 2022-04-12 | 武汉天喻信息产业股份有限公司 | 一种用于编译java文件的编译方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101968736A (zh) | 一种应用于Java到C++语言程序翻译中外部引用的翻译方法 | |
US7131110B2 (en) | Method and apparatus for generating a code bridge | |
Baclawski et al. | Extending UML to support ontology engineering for the semantic web | |
US9965259B2 (en) | System for translating diverse programming languages | |
Lee | DYMOS: A dynamic modification system | |
US20140157243A1 (en) | System for Translating Diverse Programming Languages | |
Damji et al. | Learning Spark | |
CA2753626A1 (en) | Packed data objects | |
Miller et al. | Function passing: A model for typed, distributed functional programming | |
Su et al. | Changing engines in midstream: A Java stream computational model for big data processing | |
Stepanek | Thinking in Pandas | |
Nanard et al. | IUHM: a hypermedia-based model for integrating open services, data and metadata | |
Goldstein et al. | The object binary interface: C++ objects for evolvable shared class libraries | |
Dearle | On the construction of persistent programming environments | |
O’Connor et al. | Bringing Effortless Refinement of Data Layouts to C ogent | |
Morales et al. | Lightweight compilation of (C) LP to JavaScript | |
Jenness | Reimplementing the Hierarchical Data system using HDF5 | |
Tran et al. | On the role and application of ontologies in information systems | |
Levin et al. | owlcpp: a C++ library for working with OWL ontologies | |
Egenhofer et al. | Panda: An extensible DBMS supporting object-oriented software techniques | |
Gautier | An intuitive Python interface for Bioconductor libraries demonstrates the utility of language translators | |
CN101639827A (zh) | 图书元数据生成方法 | |
Hurd | Composable Packages for Higher Order Logic Theories. | |
Opmanis et al. | Multilevel data repository for ontological and metamodeling | |
Jordan | Mastering the SAS DS2 Procedure: Advanced Data-Wrangling Techniques, (Hardcover edition) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
DD01 | Delivery of document by public notice |
Addressee: Hangzhou Yuanrui Information Technology Co., Ltd. Document name: Notification of Publication of the Application for Invention |
|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
DD01 | Delivery of document by public notice |
Addressee: Hangzhou Yuanrui Information Technology Co., Ltd. Document name: Notification of Passing Examination on Formalities |
|
DD01 | Delivery of document by public notice |
Addressee: Hangzhou Yuanrui Information Technology Co., Ltd. Document name: Notification that Application Deemed to be Withdrawn |
|
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110209 |