CN111240681A - 一种不同编程语言的转换方法及装置 - Google Patents
一种不同编程语言的转换方法及装置 Download PDFInfo
- Publication number
- CN111240681A CN111240681A CN201911400722.5A CN201911400722A CN111240681A CN 111240681 A CN111240681 A CN 111240681A CN 201911400722 A CN201911400722 A CN 201911400722A CN 111240681 A CN111240681 A CN 111240681A
- Authority
- CN
- China
- Prior art keywords
- metadata
- programming language
- class
- code
- codes
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种不同编程语言的转换方法及装置。该方法包括:获取初始功能代码中每个类对应的元数据;其中,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据;对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;将目标元数据录入预设模板中,生成目标功能代码。本发明实施例可以将符合第一程序语言规范的功能代码,自动转换为符合第二编程语言规范的功能代码,整个转换过程方便简单,同时也解决了人工转换带来的各种问题。
Description
技术领域
本发明涉及编程语言转换领域,尤其涉及一种不同编程语言的转换方法及装置。
背景技术
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。也因此使得Java成为目前最为流行的编程语言之一。PHP(超文本预处理器,PHP:HypertextPreprocessor)是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。
目前好多软件项目采用Java编写,其中部分功能代码有时候需要应用到其他编程语言的环境中。例如在Java编写的RPC(远程过程调用,Remote Procedure Call)服务中的客户端代码。
然而采用Java编写的客户端代码在PHP编程语言的环境中是无法直接被使用的。所以通常是由PHP软件工程师人工编写PHP版本的客户端代码。但人工编写的方式对软件工程师要求比较高,编写难度大、编写耗时长,同时也需要极大的学习成本。
发明内容
本发明实施例提供一种不同编程语言的转换方法及装置,以解决现有技术中人工实现Java代码转PHP代码,导致的难度大、耗时长、出错率高的问题。
第一方面,本发明实施例提供了一种不同编程语言的转换方法,所述方法包括:
获取初始功能代码中每个类对应的元数据;其中,所述初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;
检测所述元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的所述元数据中是否存在相同的方法名代码;并将与所述关键字相同的代码调整为与所述关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,所述预设信息表中包括第二编程语言中的多个关键字;
对所述中间元数据中的类进行注册,并对所述中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;
将所述目标元数据录入预设模板中,生成目标功能代码,其中所述预设模板为根据所述初始功能代码生成的、符合所述第二编程语言规范的模板。
可选地,所述获取初始功能代码中每个类对应的元数据的步骤包括:
根据所述第一编程语言规范中的反射机制,获取所述初始功能代码中每个类的元数据,并建立元数据与类的对应关系。
可选地,所述检测所述元数据中是否存在与预设信息表中的关键字相同的代码的步骤包括:
依次获取所述预设信息表中的每个关键字,根据预设正则表达式,在所述元数据中查询与每个关键字相同的代码。
可选地,对所述中间元数据中的类进行注册,并对所述中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据的步骤包括:
将所述中间元数据中除差异类型外的类转换为符合第二编程语言规范的数据结构,得到第一转换元数据,其中所述差异类型为泛型、基类和枚举类;
对所述中间元数据中的实体类进行注册,生成符合第二编程语言规范的注册信息;
分别针对所述泛型和所述基类,在所述注册信息中添加标识字段并进行赋值,将添加有标识字段并赋值的注册信息作为第二转换元数据;
根据预先生成的符合第二编程语言规范的枚举单例,将所述中间元数据中的枚举类转换为第二编程语言枚举,并将所述第二编程语言枚举作为第三转换元数据;
根据所述第一转换元数据、所述第二转换元数据以及所述第三转换元数据,生成目标元数据。
可选地,所述第一编程语言为Java编程语言;所述第二编程语言为PHP编程语言。
可选地,在将所述目标元数据录入预设模板中,生成目标功能代码的步骤之后,所述方法还包括:
根据所述第一编程语言中的注释规则,生成注释提取正则表达式;
根据所述注释提取正则表达式,提取所述元数据中的注释信息;
根据提取的所述注释信息,生成注释文档。
第二方面,本发明实施例还提供了一种不同编程语言的转换装置,所述装置包括:
获取模块,用于获取初始功能代码中每个类对应的元数据;其中,所述初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;
第一处理模块,用于检测所述元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的所述元数据中是否存在相同的方法名代码;并将与所述关键字相同的代码调整为与所述关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,所述预设信息表中包括第二编程语言中的多个关键字;
第二处理模块,用于对所述中间元数据中的类进行注册,并对所述中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;
生成模块,用于将所述目标元数据录入预设模板中,生成目标功能代码,其中所述预设模板为根据所述初始功能代码生成的,符合所述第二编程语言规范的模板。
可选地,所述获取模块,具体用于根据所述第一编程语言规范中的反射机制,获取所述初始功能代码中每个类的元数据,并建立元数据与类的对应关系。
可选地,第一处理模块,具体用于依次获取所述预设信息表中的每个关键字,根据预设正则表达式,在所述元数据中查询与每个关键字相同的代码。
可选地,第二处理模块包括:
第一转换单元,用于将所述中间元数据中除差异类型外的类转换为符合第二编程语言规范的数据结构,得到第一转换元数据,其中所述差异类型为泛型、基类和枚举类;
注册单元,用于对所述中间元数据中的实体类进行注册,生成符合第二编程语言规范的注册信息;
第二转换单元,用于分别针对所述泛型和所述基类,在所述注册信息中添加标识字段并进行赋值,将添加有标识字段并赋值的注册信息作为第二转换元数据;
第三转换单元,用于根据预先生成的符合第二编程语言规范的枚举单例,将所述中间元数据中的枚举类转换为第二编程语言枚举,并将所述第二编程语言枚举作为第三转换元数据;
生成单元,用于根据所述第一转换元数据、所述第二转换元数据以及所述第三转换元数据,生成目标元数据。
可选地,所述第一编程语言为Java编程语言;所述第二编程语言为PHP编程语言。
可选地,所述装置还包括:
正则表达式模块,用于根据所述第一编程语言中的注释规则,生成注释提取正则表达式;
提取模块,用于根据所述注释提取正则表达式,提取所述元数据中的注释信息;
注释模块,用于根据提取的所述注释信息,生成注释文档。
第三方面,本发明实施例还提供一种电子设备,该电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的不同编程语言的转换方法中的步骤。
第四方面,本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的不同编程语言的转换方法中的步骤。
在本发明实施例中,首先获取初始功能代码中每个类对应的元数据;其中,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;检测元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的元数据中是否存在相同的方法名代码;并将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,预设信息表中包括第二编程语言中的多个关键字。由于中间元数据中不包含第二编程语言中的关键字,因此在符合第二编程语言规范的代码中直接使用中间元数据时,不会因为关键字产生问题;并且中间元数据中同一类对应的方法名中不存在重复现象,使得中间元数据中的方法名符合第二编程语言的规范。对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;基于第一编程语言和第二编程语言中泛型、基类以及枚举类的差异,进行差异化处理,使得处理之后得到的目标元数据符合第二编程语言的规范。将目标元数据录入预设模板中,生成目标功能代码,其中预设模板为根据初始功能代码生成的、符合第二编程语言规范的模板。本发明实施例可以将符合第一程序语言规范的功能代码,自动转换为符合第二编程语言规范的功能代码,解决了现有技术中人工实现Java代码转PHP代码,导致的难度大、耗时长、出错率高的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的不同编程语言的转换方法的步骤流程图;
图2为本发明实施例提供的差异化处理步骤流程图;
图3为本发明实施例提供的不同编程语言的转换方法应用示意图;
图4为本发明实施例的特殊语法处理过程示意图;
图5为本发明实施例提供的的不同编程语言的转换装置的结构框图;
图6为本发明实施例提供的第二处理模块的结构框图;
图7为本发明实施例提供的电子设备的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
在本发明的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
参见图1,本发明实施例提供了一种不同编程语言的转换方法,该方法包括:
步骤101,获取初始功能代码中每个类对应的元数据。
应当说明的是,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;较佳的,第一编程语言为Java编程语言;第二编程语言为PHP编程语言。初始功能代码为Java编程语言编写的RPC client(客户端)。元数据主要包括代码注释、类的元数据信息以及RPC框架定义的元数据信息;获取的元数据与类之间具有关联关系,类为编程语言中Class。
可以利用Java编程语言中的反射机制获取元数据,具体的,获取初始功能代码中每个类对应的元数据的步骤包括:根据第一编程语言规范中的反射机制,获取初始功能代码中每个类的元数据,并建立元数据与类的对应关系。
步骤102,检测元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的元数据中是否存在相同的方法名代码;并将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据。
应当说明的是,预设信息表中包括第二编程语言中的多个关键字。在程序代码中为避免元数据中的代码被识别为第二编程语言中的关键字,需要将元数据中与第二编程语言的关键字相同的代码修改为,不同于第二编程语言的关键字的代码,例如可以加一下划线然后紧邻下划线再添加一数字序号,但不限于此。由于PHP中的语法限制,同一个类中不能有同名的方法,因此需要将元数据中同一类下相同的方法名代码调整为不同的方法名代码。从而中间元数据中不存在与第二编程语言中的关键字相同的代码;并且同一类对应的方法名中没有重名的。
较佳的,检测元数据中是否存在与预设信息表中的关键字相同的代码的步骤包括:依次获取预设信息表中的每个关键字,根据预设正则表达式,在元数据中查询与每个关键字相同的代码。检测同一类对应的元数据中是否存在相同的方法名代码时,同样可以利用正则表达式,在此不再赘述。
步骤103,对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据。
应当说明的是,PHP编程语言是弱语言,一方面参数可以不指定类型而Java是所有的参数必须指定类型,另一方面是PHP定义的基本类型和Java的基本类型不能一一对应。因此需要针对这些差异进行差异化处理。
步骤104,将目标元数据录入预设模板中,生成目标功能代码。
应当说明的是,预设模板为根据初始功能代码生成的、符合第二编程语言规范的模板。可以根据初始功能代码预先编写预设模板。
本发明实施例中,首先获取初始功能代码中每个类对应的元数据;其中,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;检测元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的元数据中是否存在相同的方法名代码;并将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,预设信息表中包括第二编程语言中的多个关键字。由于中间元数据中不包含第二编程语言中的关键字,因此在符合第二编程语言规范的代码中直接使用中间元数据时,不会因为关键字产生问题;并且中间元数据中同一类对应的方法名中不存在重复现象,使得中间元数据中的方法名符合第二编程语言的规范。对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;基于第一编程语言和第二编程语言中泛型、基类以及枚举类的差异,进行差异化处理,使得处理之后得到的目标元数据符合第二编程语言的规范。将目标元数据录入预设模板中,生成目标功能代码,其中预设模板为根据初始功能代码生成的、符合第二编程语言规范的模板。本发明实施例可以将符合第一程序语言规范的功能代码,自动转换为符合第二编程语言规范的功能代码,解决了现有技术中人工实现Java代码转PHP代码,导致的难度大、耗时长、出错率高的问题。
如图2所示,为了实现差异化处理,在上述发明实施例的基础上,本发明实施例中,对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据的步骤包括:
步骤201,将中间元数据中除差异类型外的类转换为符合第二编程语言规范的数据结构,得到第一转换元数据。
应当说明的是,差异类型若直接转换为符合第二编程语言规范的数据结构,在程序运行时将会出现错误,因此,在进行转换时,需要额外处理差异类型。较佳的,差异类型为泛型、基类和枚举类。
步骤202,对中间元数据中的实体类进行注册,生成符合第二编程语言规范的注册信息。
步骤203,分别针对泛型和基类,在注册信息中添加标识字段并进行赋值,将添加有标识字段并赋值的注册信息作为第二转换元数据。
应当说明的是,泛型和基类为Java编程语言中的泛型和基类,在此不再赘述。
步骤204,根据预先生成的符合第二编程语言规范的枚举单例,将中间元数据中的枚举类转换为第二编程语言枚举,并将第二编程语言枚举作为第三转换元数据。
应当说明的是,预先编写PHP编程语言中的枚举类模型,然后将Java编程语言中的枚举类利用该枚举类模型进行转换。
步骤205,根据第一转换元数据、第二转换元数据以及第三转换元数据,生成目标元数据。
应当说明的是,目标元数据为符合第二编程语言规范的元数据,可以直接录入第二编程语言编写的模板中。
为了方便程序人员查看目标功能代码,在上述各发明实施例的基础上,本发明实施例中,在将目标元数据录入预设模板中,生成目标功能代码的步骤之后,方法还包括:
根据第一编程语言中的注释规则,生成注释提取正则表达式;
根据注释提取正则表达式,提取元数据中的注释信息;
根据提取的注释信息,生成注释文档。
应当说明的是,可以根据PSR(PHP Standards Recommendation)规范,生成符合PSR规范的注释文档。
如图3所示,为本发明实施例提供的不同编程语言的转换方法应用示意图;包括:
步骤301,开始。
步骤302,Maven(麦文)Config(配置)。提供一个Maven插件工具,生成PHP client。首先配置生成参数,包括是否初始化实体默认值,是否处理重载,序列化版本,版本信息等。
步骤303,is jar(Java归档),判断是否为jar格式文件,若是则执行步骤304,若否则执行步骤306。主要是提供两种支持,一种是Java服务方直接在当前项目仓库下运行插件生成,另一种是为了支持第三方服务的生成,需要通过maven下载jar,source(资源)信息
步骤304,下载jar。
步骤305,下载source。
步骤306,提取元数据,通过反射技术,结合RPC自定义的注解,提取所有的元数据信息。
步骤307,特殊语法,要是处理两种编程语言之间的差异,包括类型差异,关键字差异,枚举支持,重载支持,Map key类型转换等;利用预先提炼的模板以及特殊语法处理之后的元数据生成client。
步骤308,根据预先提炼的Regex(正则表达式)以及生成的client,生成注释信息。
步骤309,生成其他,为了方便调试,同时生成所有RPC的对应的单元测试,开发只需要极少的配置,就能实现对远程方法的调用。并生成合法的composer结构,接口代理类,使用方可以直接基于composer依赖client进行远程调用,不需要其他额外的编码。以及生成版本信息,作者信息等,方便追溯问题。
步骤310,提交git(分布式版本控制系统),支持基于配置的git直接提交远程仓库。实现一键完成所有PHP client相关的工作。
步骤311,结束。
如图4所示,为本发明实施例提供的特殊语法处理过程示意图;包括:
步骤401,开始。
步骤402,检测元数据中是否存在与关键字相同的代码,若是则执行步骤403,若否则执行步骤404。其中,关键字为PHP编程语言中的所有关键字。
步骤403,映射处理,将与关键字相同的代码修改为与关键字不同的代码。
步骤404,重载,检测同一类对应的元数据中是否存在相同的方法名代码;若是则执行步骤405,若否则执行步骤406。
步骤405,别名处理,将同一类对应的元数据中相同的方法名代码修改为不同的方法名代码。
步骤406,注册类型。
步骤407,检测元数据中是否存在泛型,若是则执行步骤408,若否则执行步骤409。
步骤408,参数类型,对泛型添加标识信息,并进行赋值。
步骤409,动态类型,检测元数据中是否存在基类,若是则执行步骤410,若否则执行步骤411。
步骤410,注册类型,对基类添加标识信息,并进行赋值。
步骤411,is Map,检测元数据中是否存在枚举类,若是则执行步骤412,若否则执行步骤413。
步骤412,key tosrting,重写_toSrting方法。
步骤413,包装参数。
步骤414,结束。
以上介绍了本发明实施例提供的不同编程语言的转换方法,下面将结合附图介绍本发明实施例提供的不同编程语言的转换装置。
参见图5和图6,本发明实施例还提供了一种不同编程语言的转换装置,该装置包括:
获取模块51,用于获取初始功能代码中每个类对应的元数据;其中,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;
第一处理模块52,用于检测元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的元数据中是否存在相同的方法名代码;并将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,预设信息表中包括第二编程语言中的多个关键字;
第二处理模块53,用于对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;
生成模块54,用于将目标元数据录入预设模板中,生成目标功能代码,其中预设模板为根据初始功能代码生成的、符合第二编程语言规范的模板。
可选地,获取模块51,具体用于根据第一编程语言规范中的反射机制,获取初始功能代码中每个类的元数据,并建立元数据与类的对应关系。
可选地,第一处理模块52,具体用于依次获取预设信息表中的每个关键字,根据预设正则表达式,在元数据中查询与每个关键字相同的代码。
可选地,第二处理模块53包括:
第一转换单元531,用于将中间元数据中除差异类型外的类转换为符合第二编程语言规范的数据结构,得到第一转换元数据,其中差异类型为泛型、基类和枚举类;
注册单元532,用于对中间元数据中的实体类进行注册,生成符合第二编程语言规范的注册信息;
第二转换单元533,用于分别针对泛型和基类,在注册信息中添加标识字段并进行赋值,将添加有标识字段并赋值的注册信息作为第二转换元数据;
第三转换单元534,用于根据预先生成的符合第二编程语言规范的枚举单例,将中间元数据中的枚举类转换为第二编程语言枚举,并将第二编程语言枚举作为第三转换元数据;
生成单元535,用于根据第一转换元数据、第二转换元数据以及第三转换元数据,生成目标元数据。
可选地,第一编程语言为Java编程语言;第二编程语言为PHP编程语言。
可选地,该装置还包括:
正则表达式模块,用于根据第一编程语言中的注释规则,生成注释提取正则表达式;
提取模块,用于根据注释提取正则表达式,提取元数据中的注释信息;
注释模块,用于根据提取的注释信息,生成注释文档。
本发明实施例提供的不同编程语言的转换装置能够实现图1和图2的方法实施例中不同编程语言的转换方法实现的各个过程,为避免重复,这里不再赘述。
本发明的实施例中,首先获取初始功能代码中每个类对应的元数据;其中,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;检测元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的元数据中是否存在相同的方法名代码;并将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,预设信息表中包括第二编程语言中的多个关键字。由于中间元数据中不包含第二编程语言中的关键字,因此在符合第二编程语言规范的代码中直接使用中间元数据时,不会因为关键字产生问题;并且中间元数据中同一类对应的方法名中不存在重复现象,使得中间元数据中的方法名符合第二编程语言的规范。对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;基于第一编程语言和第二编程语言中泛型、基类以及枚举类的差异,进行差异化处理,使得处理之后得到的目标元数据符合第二编程语言的规范。将目标元数据录入预设模板中,生成目标功能代码,其中预设模板为根据初始功能代码生成的、符合第二编程语言规范的模板。本发明实施例可以将符合第一程序语言规范的功能代码,自动转换为符合第二编程语言规范的功能代码,解决了现有技术中人工实现Java代码转PHP代码,导致的难度大、耗时长、出错率高的问题。
另一方面,本发明实施例还提供了一种电子设备,包括存储器、处理器、总线以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述不同编程语言的转换方法中的步骤。
举个例子如下,图7示出了一种电子设备的实体结构示意图。
如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(Communications Interface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储器730中的逻辑指令,以执行如下方法:
获取初始功能代码中每个类对应的元数据;其中,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;
检测元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的元数据中是否存在相同的方法名代码;并将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,预设信息表中包括第二编程语言中的多个关键字;
对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;
将目标元数据录入预设模板中,生成目标功能代码,其中预设模板为根据初始功能代码生成的、符合第二编程语言规范的模板。
此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
再一方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的不同编程语言的转换方法,例如包括:
获取初始功能代码中每个类对应的元数据;其中,初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;
检测元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的元数据中是否存在相同的方法名代码;并将与关键字相同的代码调整为与关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,预设信息表中包括第二编程语言中的多个关键字;
对中间元数据中的类进行注册,并对中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;
将目标元数据录入预设模板中,生成目标功能代码,其中预设模板为根据初始功能代码生成的、符合第二编程语言规范的模板。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种不同编程语言的转换方法,其特征在于,所述方法包括:
获取初始功能代码中每个类对应的元数据;其中,所述初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;
检测所述元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的所述元数据中是否存在相同的方法名代码;并将与所述关键字相同的代码调整为与所述关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,所述预设信息表中包括第二编程语言中的多个关键字;
对所述中间元数据中的类进行注册,并对所述中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;
将所述目标元数据录入预设模板中,生成目标功能代码,其中所述预设模板为根据所述初始功能代码生成的、符合所述第二编程语言规范的模板。
2.根据权利要求1所述的方法,其特征在于,所述获取初始功能代码中每个类对应的元数据的步骤包括:
根据所述第一编程语言规范中的反射机制,获取所述初始功能代码中每个类的元数据,并建立元数据与类的对应关系。
3.根据权利要求1所述的方法,其特征在于,所述检测所述元数据中是否存在与预设信息表中的关键字相同的代码的步骤包括:
依次获取所述预设信息表中的每个关键字,根据预设正则表达式,在所述元数据中查询与每个关键字相同的代码。
4.根据权利要求1所述的方法,其特征在于,对所述中间元数据中的类进行注册,并对所述中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据的步骤包括:
将所述中间元数据中除差异类型外的类转换为符合第二编程语言规范的数据结构,得到第一转换元数据,其中所述差异类型为泛型、基类和枚举类;
对所述中间元数据中的实体类进行注册,生成符合第二编程语言规范的注册信息;
分别针对所述泛型和所述基类,在所述注册信息中添加标识字段并进行赋值,将添加有标识字段并赋值的注册信息作为第二转换元数据;
根据预先生成的符合第二编程语言规范的枚举单例,将所述中间元数据中的枚举类转换为第二编程语言枚举,并将所述第二编程语言枚举作为第三转换元数据;
根据所述第一转换元数据、所述第二转换元数据以及所述第三转换元数据,生成目标元数据。
5.根据权利要求1所述的方法,其特征在于,所述第一编程语言为Java编程语言;所述第二编程语言为超文本预处理器PHP编程语言。
6.根据权利要求1所述的方法,其特征在于,在将所述目标元数据录入预设模板中,生成目标功能代码的步骤之后,所述方法还包括:
根据所述第一编程语言中的注释规则,生成注释提取正则表达式;
根据所述注释提取正则表达式,提取所述元数据中的注释信息;
根据提取的所述注释信息,生成注释文档。
7.一种不同编程语言的转换装置,其特征在于,所述装置包括:
获取模块,用于获取初始功能代码中每个类对应的元数据;其中,所述初始功能代码为包括多个不同类型的类的符合第一编程语言规范的代码;
第一处理模块,用于检测所述元数据中是否存在与预设信息表中的关键字相同的代码,以及同一类对应的所述元数据中是否存在相同的方法名代码;并将与所述关键字相同的代码调整为与所述关键字不同的代码,将相同的方法名代码调整为不同的方法名代码,得到中间元数据,其中,所述预设信息表中包括第二编程语言中的多个关键字;
第二处理模块,用于对所述中间元数据中的类进行注册,并对所述中间元数据中的泛型、基类以及枚举类分别进行差异化处理,得到符合第二编程语言规范的目标元数据;
生成模块,用于将所述目标元数据录入预设模板中,生成目标功能代码,其中所述预设模板为根据所述初始功能代码生成的、符合所述第二编程语言规范的模板。
8.根据权利要求7所述的装置,其特征在于,所述获取模块,具体用于根据所述第一编程语言规范中的反射机制,获取所述初始功能代码中每个类的元数据,并建立元数据与类的对应关系。
9.一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述计算机程序被所述处理器执行时实现如权利要求1至6中任一项所述的不同编程语言的转换方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的不同编程语言的转换方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911400722.5A CN111240681B (zh) | 2019-12-30 | 2019-12-30 | 一种不同编程语言的转换方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911400722.5A CN111240681B (zh) | 2019-12-30 | 2019-12-30 | 一种不同编程语言的转换方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111240681A true CN111240681A (zh) | 2020-06-05 |
CN111240681B CN111240681B (zh) | 2023-08-15 |
Family
ID=70864955
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911400722.5A Active CN111240681B (zh) | 2019-12-30 | 2019-12-30 | 一种不同编程语言的转换方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111240681B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112764763A (zh) * | 2020-12-31 | 2021-05-07 | 亿企赢网络科技有限公司 | 一种代码转换方法、系统、设备及计算机可读存储介质 |
CN113377638A (zh) * | 2021-06-11 | 2021-09-10 | 北京百度网讯科技有限公司 | 性能测试工具的生成方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050055681A1 (en) * | 2003-09-08 | 2005-03-10 | Makarand Gadre | Compiling source code using generic classes |
CN101169718A (zh) * | 2006-10-23 | 2008-04-30 | 国际商业机器公司 | 用于实例化抽象类的系统和方法 |
CN105426711A (zh) * | 2015-11-18 | 2016-03-23 | 北京理工大学 | 一种计算机软件源代码相似度检测方法 |
CN109271168A (zh) * | 2018-08-09 | 2019-01-25 | 上海鲸鱼机器人科技有限公司 | 一种代码转换方法、装置及设备、存储介质 |
-
2019
- 2019-12-30 CN CN201911400722.5A patent/CN111240681B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050055681A1 (en) * | 2003-09-08 | 2005-03-10 | Makarand Gadre | Compiling source code using generic classes |
CN101169718A (zh) * | 2006-10-23 | 2008-04-30 | 国际商业机器公司 | 用于实例化抽象类的系统和方法 |
CN105426711A (zh) * | 2015-11-18 | 2016-03-23 | 北京理工大学 | 一种计算机软件源代码相似度检测方法 |
CN109271168A (zh) * | 2018-08-09 | 2019-01-25 | 上海鲸鱼机器人科技有限公司 | 一种代码转换方法、装置及设备、存储介质 |
Non-Patent Citations (1)
Title |
---|
马强;刘佩林;: "基于编程语言结构的通用配置代码生成方法" * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112764763A (zh) * | 2020-12-31 | 2021-05-07 | 亿企赢网络科技有限公司 | 一种代码转换方法、系统、设备及计算机可读存储介质 |
CN112764763B (zh) * | 2020-12-31 | 2024-01-26 | 亿企赢网络科技有限公司 | 一种代码转换方法、系统、设备及计算机可读存储介质 |
CN113377638A (zh) * | 2021-06-11 | 2021-09-10 | 北京百度网讯科技有限公司 | 性能测试工具的生成方法和装置 |
CN113377638B (zh) * | 2021-06-11 | 2023-10-27 | 北京百度网讯科技有限公司 | 性能测试工具的生成方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111240681B (zh) | 2023-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8091071B2 (en) | Method and system for template-based code generation | |
US8495568B2 (en) | System and method of identifying and tracking software pattern software recipes | |
WO2020015191A1 (zh) | 业务规则的发布管理方法、电子装置及可读存储介质 | |
US9405518B2 (en) | Leveraging legacy applications for use with modern applications | |
WO2018113096A1 (zh) | 一种食谱程序代码生成方法及食谱编译云平台系统 | |
CN110007926B (zh) | 语言转换方法及装置 | |
CN112000320A (zh) | 自动化代码生成方法、装置、设备及存储介质 | |
CN111240681A (zh) | 一种不同编程语言的转换方法及装置 | |
CN112069456A (zh) | 一种模型文件的生成方法、装置、电子设备及存储介质 | |
CN110674083A (zh) | 工作流迁移方法、装置、设备及计算机可读存储介质 | |
CN110554857B (zh) | JavaBean生成方法、装置、系统及可读存储介质 | |
Rinner et al. | Creating ISO/EN 13606 archetypes based on clinical information needs | |
US20110296373A1 (en) | Command line shell command generation based on schema | |
CN109299005B (zh) | 测试脚本的生成方法及装置 | |
CN116450194A (zh) | 一种python安装包的生成方法、装置、电子设备及可读存储介质 | |
CN115562989A (zh) | 一种自动化测试序列转化方法、系统、设备和介质 | |
CN114416099A (zh) | 一种基于信息物理系统的模型集成方法及相关组件 | |
CN114064601B (zh) | 存储过程转换方法、装置、设备和存储介质 | |
CN109597638B (zh) | 基于实时计算引擎解决数据处理、设备联动的方法及装置 | |
CN114021133A (zh) | 代码处理方法、装置、电子设备和存储介质 | |
CN111151008B (zh) | 游戏运营数据的校验方法、装置、配置后台及介质 | |
CN113821195A (zh) | 目标语言的可执行程序的生成方法、装置及设备 | |
US20040046793A1 (en) | Program generation method | |
CN117971236B (zh) | 基于词法和语法分析的算子解析方法、装置、设备及介质 | |
CN115496217B (zh) | 一种推理验证方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |