CN111209004A - 代码转换方法及装置 - Google Patents
代码转换方法及装置 Download PDFInfo
- Publication number
- CN111209004A CN111209004A CN201911396096.7A CN201911396096A CN111209004A CN 111209004 A CN111209004 A CN 111209004A CN 201911396096 A CN201911396096 A CN 201911396096A CN 111209004 A CN111209004 A CN 111209004A
- Authority
- CN
- China
- Prior art keywords
- file
- source code
- ast
- target
- code file
- 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
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Abstract
本发明实施例公开了一种代码转换方法及装置,其中,该方法包括:获取源代码文件;根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;将所述AST发送至目标平台,其中,所述目标平台用于将所述AST转换为所述目标平台的目标代码。通过本发明实施例,解决了相关技术中不同平台的代码不兼容的技术问题,从而降低了不同平台代码开发、维护成本。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种代码转换方法及装置。
背景技术
目前,不同操作系统或者平台下的可执行文件格式可能不同,导致通用的业务代码无法在不同操作系统或者平台上运行,增加了代码开发成本和维护成本。
相关技术中,通过设计一种开源的小程序框架,将一套代码转化成不同小程序端和客户端的框架;执行对应的打包命令之后,执行多端的代码编译;在编译过程中,首先将代码解析成抽象语法树,然后对抽象语法树进行遍历和替换,最后生成新的抽象语法树来适配各种平台,然而该方法只能针对特定的平台,没有通用性。还有的通过嵌入代码转换工具,将特定的高版本语法转换成低版本平台支持的语法,该方法不仅增加了平台的耦合性和负荷,也没有通用性。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
发明内容
为了解决相关技术中不同平台的代码不兼容的技术问题,本发明提供了一种代码转换方法及装置。
根据本发明的一个实施例,提供了一种代码转换方法,包括:获取源代码文件;根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;将所述AST发送至多个目标平台,其中,所述目标平台用于将所述AST转换为所述目标平台的目标代码。
可选的,根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST包括:识别所述源代码文件的语法结构信息;根据所述语法结构信息构建所述AST。
可选的,识别所述源代码文件的语法结构信息包括:根据预设环境变量在所述源代码文件的config配置文件夹中选择目标配置文件夹,其中,所述config配置文件夹至少包括:开发环境配置文件夹,产品环境配置文件夹,测试环境配置文件夹;读取所述目标配置文件夹中的依赖文件中的字符串;根据所述字符串的字符特征识别所述源代码文件的语法结构信息。
可选的,根据所述语法结构信息构建所述AST包括:在启动编译所述源代码文件的编译命令时,确定起始文件,其中,所述编译命令携带有所述目标平台的平台名称;从所述起始文件开始构建所述AST。
可选的,确定起始文件包括:执行所述源代码文件中目标配置文件夹的配置文件,以查找所述配置文件中的索引文件;将所述索引文件作为所述起始文件。
可选的,从所述起始文件开始构建所述AST包括:将所述起始文件作为依赖进行编译,以查找所述源代码文件中除所述起始文件之外的依赖文件;将所述依赖文件中语法结构信息的字符串转换为Token序列,其中,所述Token序列中的每个字符串对应一个树节点;将所述Token序列转换成所述AST,其中,所述AST中的每个树节点对应所述目标代码中的一个字符串。
根据本发明的另一个实施例,提供了一种代码转换方法,包括:接收源平台发送的抽象语法树AST,其中,所述AST是由所述源平台基于源代码文件的语法结构信息编译而成,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;将所述AST转换为目标平台的目标代码。
可选的,将所述AST转换为目标平台的目标代码包括:读取所述AST的字符串;根据所述字符串的字符特征比较所述AST与所述目标平台之间的语法差异信息,其中,所述语法差异信息至少包括:所述目标平台的语法标签,所述目标平台的语法属性,所述目标平台的语法格式;根据所述语法差异信息将所述AST转换为所述目标平台适用的目标代码。
根据本发明的一个实施例,提供了一种代码转换装置,包括:获取模块,用于获取源代码文件;转换模块,用于根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;发送模块,用于将所述AST发送至多个目标平台,其中,所述目标平台用于将所述AST转换为所述目标平台的目标代码。
可选的,所述转换模块,具体用于:识别所述源代码文件的语法结构信息;根据所述语法结构信息构建所述AST。
可选的,所述转换模块用于识别所述源代码文件的语法结构信息时,具体用于:根据预设环境变量在所述源代码文件的config配置文件夹中选择目标配置文件夹,其中,所述config配置文件夹至少包括:开发环境配置文件夹,产品环境配置文件夹,测试环境配置文件夹;读取所述目标配置文件夹中的依赖文件中的字符串;根据所述字符串的字符特征识别所述源代码文件的语法结构信息。
可选的,所述转换模块用于根据所述语法结构信息构建所述AST时,具体用于:在启动编译所述源代码文件的编译命令时,确定起始文件,其中,所述编译命令携带有所述目标平台的平台名称;从所述起始文件开始构建所述AST。
可选的,所述转换模块用于确定起始文件时,具体用于:执行所述源代码文件中目标配置文件夹的配置文件,以查找所述配置文件中的索引文件;将所述索引文件作为所述起始文件。
可选的,所述转换模块用于从所述起始文件开始构建所述AST时,具体用于:将所述起始文件作为依赖进行编译,以查找所述源代码文件中除所述起始文件之外的依赖文件;将所述依赖文件中语法结构信息的字符串转换为Token序列,其中,所述Token序列中的每个字符串对应一个树节点;将所述Token序列转换成所述AST,其中,所述AST中的每个树节点对应所述目标代码中的一个字符串。
根据本发明的另一个实施例,提供了一种代码转换装置,包括:接收模块,用于接收源平台发送的抽象语法树AST,其中,所述AST是由所述源平台基于源代码文件的语法结构信息编译而成,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;转换模块,用于将所述AST转换为目标平台的目标代码。
可选的,所述转换模块,具体用于:读取所述AST的字符串;根据所述字符串的字符特征比较所述AST与所述目标平台之间的语法差异信息,其中,所述语法差异信息至少包括:所述目标平台的语法标签,所述目标平台的语法属性,所述目标平台的语法格式;根据所述语法差异信息将所述AST转换为所述目标平台适用的目标代码。
根据本发明的又一个实施例,还提供了一种代码转换系统,包括:源平台和多个目标平台,其中,所述源平台包括:获取模块,用于获取源代码文件;第一转换模块,用于根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;发送模块,用于将所述AST发送至多个目标平台;所述目标平台包括:接收模块,用于接收所述AST;第二转换模块,用于将所述AST转换为所述目标平台的目标代码。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,将源代码文件转换为多个目标平台通用的抽象语法树,发送给多个目标平台,各个目标平台将抽象语法树转换为自身适用的目标代码,解决了相关技术中不同平台代码不兼容的技术问题,从而降低了不同平台代码开发、维护成本。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例提供的一种代码转换方法应用于移动终端的硬件结构框图;
图2是本发明实施例的一种代码转换方法的流程图;
图3是本发明实施例的另一种代码转换方法的流程图;
图4是根据本发明实施例的一种代码转换装置的结构框图;
图5是本发明实施例提供的另一种代码转换装置的结构框图;
图6是本发明实施例提供的一种代码转换系统的结构框图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本发明实施例可以应用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统、大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
本发明实施例一所提供的方法实施例可以在计算机、终端或者类似的运算装置中执行。以运行在终端上为例,图1是本发明实施例提供的一种代码转换方法应用于移动终端的硬件结构框图。如图1所示,终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的一种代码转换方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种代码转换方法,图2是本发明实施例的一种代码转换方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,获取源代码文件;
本实施例中的源代码文件是源平台上可执行的代码文件,为通用的业务代码文件。
步骤S204,根据源代码文件的语法结构信息将源代码文件编译成抽象语法树AST,其中,语法结构信息至少包括:源代码文件的语法,源代码文件的格式,源代码文件的标签;
其中,抽象语法树AST(全称为Abstract Syntax Tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。AST不依赖于具体的文法,不依赖于语言的细节,将源代码转化为AST后,可以对AST做很多的操作,实现各种各样形形色色的功能,在很多领域都有广泛的应用。
本实施例中,通过对源代码文件的语法结构信息进行识别和处理,将源代码转为多个目标平台通用的语法格式,生成抽象语法树形式的中间代码,其中,中间代码为字节码或汇编代码。
步骤S206,将AST发送至目标平台,其中,目标平台用于将AST转换为目标平台的目标代码。
通过上述实施例,将源代码文件转换为多个目标平台都能识别的抽象语法树,并发送给多个目标平台,目标平台将抽象语法树转换为自身适用的目标代码,解决了相关技术中不同平台代码不兼容的技术问题,从而降低了不同平台代码开发、维护成本。
在一个可选的实施例中,根据源代码文件的语法结构信息将源代码文件编译成抽象语法树AST包括:识别源代码文件的语法结构信息;根据语法结构信息构建AST。
在本实施例中,根据源代码的语法结构信息将源代码转换为通用的语法格式,即转换为AST。
可选的,识别源代码文件的语法结构信息包括:根据预设环境变量在源代码文件的config配置文件夹中选择目标配置文件夹,其中,config配置文件夹至少包括:开发环境配置文件夹,产品环境配置文件夹,测试环境配置文件夹;读取目标配置文件夹中的依赖文件中的字符串;根据字符串的字符特征识别源代码文件的语法结构信息。
在本实施例中,在源代码的目录文件中,基于源代码的环境变量执行目录文件中的config配置文件夹下面的配置文件,例如,config配置文件夹中包括以下文件:dev.config.js(即上述开发环境配置文件夹),用来配置开发环境的代码;prd.config.js(即上述产品环境配置文件夹),产品需求文档,用来配置产品环境的代码;test.config.js(即上述测试环境配置文件夹),用来开发测试环境的代码。在明确源代码文件的配置文件后,通过检测配置文件中的字符串的字符特征检测源代码文件的语法结构信息。
在本案的一个可选实施例中,根据语法结构信息构建AST包括:在启动编译源代码文件的编译命令时,确定起始文件,其中,编译命令携带有目标平台的平台名称;从起始文件开始构建AST。
本实施例中,源平台在确定目标平台后,能够将源代码文件转化为不同操作系统或不同平台可执行的代码文件。
根据上述实施例,确定起始文件包括:执行源代码文件中目标配置文件夹的配置文件,以查找配置文件中的索引文件;将索引文件作为起始文件。在本实施例中,启动编译命令,执行目标平台系统名,然后预设根据环境变量去执行配置文件;再以src(源代码)目录下面的index.js文件作为起始文件,即入口文件,从入口文件开始构建AST。
优选地,在构建完AST之后对AST进行缓存;启动打包命令会对之前缓存的AST进行比较,重新patch改动后的内容,从而提高编译速度。
在一个可选的实施例中,从起始文件开始构建AST包括:将起始文件作为依赖进行编译,以查找源代码文件中除起始文件之外的依赖文件;将依赖文件中语法结构信息的字符串转换为Token序列,其中,Token序列中的每个字符串对应一个树节点;将Token序列转换成AST,其中,AST中的每个树节点对应目标代码中的一个字符串。
在本实施例中,查找到除入口文件之外的其他依赖文件后,对依赖文件进行编译。先解析出依赖文件的代码字符串,以add(求和)函数的代码块为例,可以查找它的id(即标签):add(函数名称);add的参数:[a,b];一个body(即主体):return a+b。其中,add(求和)函数的代码块如下:
function add(a,b){
return a+b
}
在一个实施例中,采用babel编译器对依赖文件进行编译,babel是一个JavaScript编译器,编译的过程分三个阶段:解析(parsing),转译(transforming),生成(generation)。进一步地,通过将字符串转换为Token序列,然后将Token序列转换成AST,从而实现将代码字符串转换为AST抽象语法树的树结构;对抽象语法树进行变换操作。例如,给babel一段js代码,babel创建AST,遍历树,修改tokens,最后从AST中生成新的代码字符串,即形成中间代码。
例如,以index文件作为依赖进行编译,寻找到目录中的其他依赖文件(例如main.js(程序入口文件)、template.js(模板引擎));判断依赖文件中的语法结构,比如,有高版本浏览器,会使用utils/lib/demote.js(降级函数)文件对其语法进行一个降级操作。再比如,有一些特性语法,如果业务有一些语法特性(例如自定义模板、webComponent(即Web组件)),会使用utils/lib/character.js(特征处理函数)对其语法进行一个处理,变成通用的语法格式,从而构建出源代码的抽象语法树。
其中,源代码文件目录如下:
在本实施例中还提供了另一种代码转换方法,图3是本发明实施例的另一种代码转换方法的流程图,如图3所示,该流程包括如下步骤:
步骤S302;接收源平台发送的抽象语法树AST,其中,AST是由源平台基于源代码文件的语法结构信息编译而成,语法结构信息至少包括:源代码文件的语法,源代码文件的格式,源代码文件的标签;
本实施例中的源平台的源代码文件为通用的业务代码。
步骤S302;将AST转换为目标平台的目标代码。
其中,目标代码为目标平台上可执行的代码文件。
通过上述实施例,任一目标平台在接收到源平台发送的抽象语法树后,都能够根据自身的语法特性和抽象语法树的语法结构将抽象语法树转换为自身适用的目标代码,解决了相关技术中不同平台的代码不兼容的技术问题,从而降低了不同平台代码开发、维护成本。
在一个可选的实施例中,将AST转换为目标平台的目标代码包括:读取AST的字符串;根据字符串的字符特征比较AST与目标平台之间的语法差异信息,其中,语法差异信息至少包括:目标平台的语法标签,目标平台的语法属性,目标平台的语法格式;根据语法差异信息将AST转换为目标平台适用的目标代码。
在本实施例中,在生成抽象语法树之后,对需要编译的目标操作系统或不同平台做一个对比,针对不同操作系统或不同平台的特性进行特定的语法转换,保证逻辑和页面的一致性。
例如,根据指令判断目标操作系统或平台,然后进行一个编译的工作,根据utils/lib/platform.js(平台)做一个系统语言层级上的转换。还可以根据utils/lib/transform.js(转换)在目标平台做一个语法的转换。
通过上述实施例,对于语法树上特定的数据结构以及各操作系统或平台的特定的语法结构进行语法兼容,将抽象语法树转换为目标平台或操作系统自身适用的目标代码,从而达到了功能逻辑一致的目的,降低了不同平台或不同操作系统的代码开发、维护成本。
实施例2
在本实施例中还提供了一种代码转换装置,用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图4是根据本发明实施例的一种代码转换装置的结构框图,如图4所示,该装置包括:获取模块40,用于获取源代码文件;转换模块42,连接至上述获取模块40,用于根据源代码文件的语法结构信息将源代码文件编译成抽象语法树AST,其中,语法结构信息至少包括:源代码文件的语法,源代码文件的格式,源代码文件的标签;发送模块44,连接至上述转换模块42,用于将AST发送至多个目标平台,其中,目标平台用于将AST转换为目标平台的目标代码。
可选的,转换模块42,具体用于:识别源代码文件的语法结构信息;根据语法结构信息构建AST。
可选的,转换模块42用于识别源代码文件的语法结构信息时,具体用于:根据预设环境变量在源代码文件的config配置文件夹中选择目标配置文件夹,其中,config配置文件夹至少包括:开发环境配置文件夹,产品环境配置文件夹,测试环境配置文件夹;读取目标配置文件夹中的依赖文件中的字符串;根据字符串的字符特征识别源代码文件的语法结构信息。
可选的,转换模块42用于根据语法结构信息构建AST时,具体用于:在启动编译源代码文件的编译命令时,确定起始文件,其中,编译命令携带有目标平台的平台名称;从起始文件开始构建AST。
可选的,转换模块42用于确定起始文件时,具体用于:执行源代码文件中目标配置文件夹的配置文件,以查找配置文件中的索引文件;将索引文件作为起始文件。
可选的,转换模块42用于从起始文件开始构建AST时,具体用于:将起始文件作为依赖进行编译,以查找源代码文件中除起始文件之外的依赖文件;将依赖文件中语法结构信息的字符串转换为Token序列,其中,Token序列中的每个字符串对应一个树节点;将Token序列转换成AST,其中,AST中的每个树节点对应目标代码中的一个字符串。
根据本发明的另一个实施例,提供了一种代码转换装置,如图5所示,图5是本发明实施例提供的另一种代码转换装置的结构框图,该装置包括:接收模块50,用于接收源平台发送的抽象语法树AST,其中,AST是由源平台基于源代码文件的语法结构信息编译而成,语法结构信息至少包括:源代码文件的语法,源代码文件的格式,源代码文件的标签;转换模块52,连接至上述接收模块50,用于将AST转换为目标平台的目标代码。
可选的,转换模块52,具体用于:读取AST的字符串;根据字符串的字符特征比较AST与目标平台之间的语法差异信息,其中,语法差异信息至少包括:目标平台的语法标签,目标平台的语法属性,目标平台的语法格式;根据语法差异信息将AST转换为目标平台适用的目标代码。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
在本实施例中还提供了一种代码转换系统,用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
根据本发明的另一个实施例,提供了一种代码转换系统,图6是本发明实施例提供的一种代码转换系统的结构框图,如图6所示,该系统包括:源平台60和多个目标平台62,其中,源平台60包括:获取模块,用于获取源代码文件;第一转换模块,用于根据源代码文件的语法结构信息将源代码文件编译成抽象语法树AST,其中,语法结构信息至少包括:源代码文件的语法,源代码文件的格式,源代码文件的标签;发送模块,用于将AST发送至多个目标平台;目标平台62包括:接收模块,用于分别接收AST;第二转换模块,用于将AST转换为目标平台的目标代码。
实施例4
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,获取源代码文件;
S2,根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
S3,将所述AST发送至目标平台,其中,所述目标平台用于将所述AST转换为所述目标平台的目标代码。
可选地,在本实施例中,上述存储介质还可以被设置为存储用于执行以下步骤的计算机程序:
S1,接收源平台发送的抽象语法树AST,其中,所述AST是由所述源平台基于源代码文件的语法结构信息编译而成,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
S2,将所述AST转换为目标平台的目标代码。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,获取源代码文件;
S2,根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
S3,将所述AST发送至目标平台,其中,所述目标平台用于将所述AST转换为所述目标平台的目标代码。
可选地,在本实施例中,上述处理器还可以被设置为通过计算机程序执行以下步骤:
S1,接收源平台发送的抽象语法树AST,其中,所述AST是由所述源平台基于源代码文件的语法结构信息编译而成,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
S2,将所述AST转换为目标平台的目标代码。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本发明所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (17)
1.一种代码转换方法,其特征在于,包括:
获取源代码文件;
根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
将所述AST发送至多个目标平台,其中,所述目标平台用于将所述AST转换为所述目标平台的目标代码。
2.根据权利要求1所述的方法,其特征在于,根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST包括:
识别所述源代码文件的语法结构信息;
根据所述语法结构信息构建所述AST。
3.根据权利要求2所述的方法,其特征在于,识别所述源代码文件的语法结构信息包括:
根据预设环境变量在所述源代码文件的config配置文件夹中选择目标配置文件夹,其中,所述config配置文件夹至少包括:开发环境配置文件夹,产品环境配置文件夹,测试环境配置文件夹;
读取所述目标配置文件夹中的依赖文件中的字符串;
根据所述字符串的字符特征识别所述源代码文件的语法结构信息。
4.根据权利要求2所述的方法,其特征在于,根据所述语法结构信息构建所述AST包括:
在启动编译所述源代码文件的编译命令时,确定起始文件,其中,所述编译命令携带有所述目标平台的平台名称;
从所述起始文件开始构建所述AST。
5.根据权利要求4所述的方法,其特征在于,确定起始文件包括:
执行所述源代码文件中目标配置文件夹的配置文件,以查找所述配置文件中的索引文件;
将所述索引文件作为所述起始文件。
6.根据权利要求4所述的方法,其特征在于,从所述起始文件开始构建所述AST包括:
将所述起始文件作为依赖进行编译,以查找所述源代码文件中除所述起始文件之外的依赖文件;
将所述依赖文件中语法结构信息的字符串转换为Token序列,其中,所述Token序列中的每个字符串对应一个树节点;
将所述Token序列转换成所述AST,其中,所述AST中的每个树节点对应所述目标代码中的一个字符串。
7.一种代码转换方法,其特征在于,包括:
接收源平台发送的抽象语法树AST,其中,所述AST是由所述源平台基于源代码文件的语法结构信息编译而成,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
将所述AST转换为目标平台的目标代码。
8.根据权利要求7所述的方法,其特征在于,将所述AST转换为目标平台的目标代码包括:
读取所述AST的字符串;
根据所述字符串的字符特征比较所述AST与所述目标平台之间的语法差异信息,其中,所述语法差异信息至少包括:所述目标平台的语法标签,所述目标平台的语法属性,所述目标平台的语法格式;
根据所述语法差异信息将所述AST转换为所述目标平台适用的目标代码。
9.一种代码转换装置,其特征在于,包括:
获取模块,用于获取源代码文件;
转换模块,用于根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
发送模块,用于将所述AST发送至多个目标平台,其中,所述目标平台用于将所述AST转换为所述目标平台的目标代码。
10.根据权利要求9所述的装置,其特征在于,所述转换模块,具体用于:
识别所述源代码文件的语法结构信息;
根据所述语法结构信息构建所述AST。
11.根据权利要求10所述的装置,其特征在于,所述转换模块用于识别所述源代码文件的语法结构信息时,具体用于:
根据预设环境变量在所述源代码文件的config配置文件夹中选择目标配置文件夹,其中,所述config配置文件夹至少包括:开发环境配置文件夹,产品环境配置文件夹,测试环境配置文件夹;
读取所述目标配置文件夹中的依赖文件中的字符串;
根据所述字符串的字符特征识别所述源代码文件的语法结构信息。
12.根据权利要求10所述的装置,其特征在于,所述转换模块用于根据所述语法结构信息构建所述AST时,具体用于:
在启动编译所述源代码文件的编译命令时,确定起始文件,其中,所述编译命令携带有所述目标平台的平台名称;
从所述起始文件开始构建所述AST。
13.根据权利要求12所述的装置,其特征在于,所述转换模块用于确定起始文件时,具体用于:
执行所述源代码文件中目标配置文件夹的配置文件,以查找所述配置文件中的索引文件;
将所述索引文件作为所述起始文件。
14.根据权利要求12所述的装置,其特征在于,所述转换模块用于从所述起始文件开始构建所述AST时,具体用于:
将所述起始文件作为依赖进行编译,以查找所述源代码文件中除所述起始文件之外的依赖文件;
将所述依赖文件中语法结构信息的字符串转换为Token序列,其中,所述Token序列中的每个字符串对应一个树节点;
将所述Token序列转换成所述AST,其中,所述AST中的每个树节点对应所述目标代码中的一个字符串。
15.一种代码转换装置,其特征在于,包括:
接收模块,用于接收源平台发送的抽象语法树AST,其中,所述AST是由所述源平台基于源代码文件的语法结构信息编译而成,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;
转换模块,用于将所述AST转换为目标平台的目标代码。
16.根据权利要求15所述的装置,其特征在于,所述转换模块,具体用于:
读取所述AST的字符串;
根据所述字符串的字符特征比较所述AST与所述目标平台之间的语法差异信息,其中,所述语法差异信息至少包括:所述目标平台的语法标签,所述目标平台的语法属性,所述目标平台的语法格式;
根据所述语法差异信息将所述AST转换为所述目标平台适用的目标代码。
17.一种代码转换系统,其特征在于,包括:源平台和多个目标平台,其中,
所述源平台包括:获取模块,用于获取源代码文件;第一转换模块,用于根据所述源代码文件的语法结构信息将所述源代码文件编译成抽象语法树AST,其中,所述语法结构信息至少包括:所述源代码文件的语法,所述源代码文件的格式,所述源代码文件的标签;发送模块,用于将所述AST发送至多个目标平台;
所述目标平台包括:接收模块,用于接收所述AST;第二转换模块,用于将所述AST转换为所述目标平台的目标代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911396096.7A CN111209004B (zh) | 2019-12-30 | 2019-12-30 | 代码转换方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911396096.7A CN111209004B (zh) | 2019-12-30 | 2019-12-30 | 代码转换方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111209004A true CN111209004A (zh) | 2020-05-29 |
CN111209004B CN111209004B (zh) | 2023-09-01 |
Family
ID=70789438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911396096.7A Active CN111209004B (zh) | 2019-12-30 | 2019-12-30 | 代码转换方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111209004B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111708539A (zh) * | 2020-06-17 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 一种应用程序代码转换方法、装置、电子设备和存储介质 |
CN111796832A (zh) * | 2020-06-30 | 2020-10-20 | 苏州三六零智能安全科技有限公司 | 热补丁文件生成方法、装置、设备及存储介质 |
CN111857709A (zh) * | 2020-06-12 | 2020-10-30 | 北京三快在线科技有限公司 | React组件和Flutter组件的映射方法、装置、电子设备及存储介质 |
CN111966358A (zh) * | 2020-07-30 | 2020-11-20 | 上海泛微网络科技股份有限公司 | 代码打包方法、装置、电子设备和计算机可读存储介质 |
CN112328257A (zh) * | 2020-11-24 | 2021-02-05 | 中国工商银行股份有限公司 | 代码转换方法及装置 |
CN112346730A (zh) * | 2020-11-04 | 2021-02-09 | 星环信息科技(上海)股份有限公司 | 一种中间表示的生成方法、计算机设备及存储介质 |
CN112612470A (zh) * | 2021-01-05 | 2021-04-06 | 北京城市网邻信息技术有限公司 | 用户界面文件生成方法及装置 |
CN113254023A (zh) * | 2021-05-14 | 2021-08-13 | 网易(杭州)网络有限公司 | 对象读取方法、装置和电子设备 |
CN113553064A (zh) * | 2021-07-07 | 2021-10-26 | 北京计算机技术及应用研究所 | 一种web前端代码转换方法 |
CN113703779A (zh) * | 2021-09-06 | 2021-11-26 | 武汉市字节码科技有限公司 | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 |
CN113741900A (zh) * | 2021-08-31 | 2021-12-03 | 广州数励科技有限公司 | 一种前端页面应用的开发方法、装置及相关设备 |
CN113961242A (zh) * | 2020-07-20 | 2022-01-21 | 荣耀终端有限公司 | 布局文件的转换方法、装置、电子设备及存储介质 |
TWI801836B (zh) * | 2021-04-01 | 2023-05-11 | 台達電子工業股份有限公司 | 將程式碼於不同程式語言間進行轉換及優化的方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2513186A1 (en) * | 2004-12-14 | 2006-06-14 | Axiomatic Solutions Sdn Bhd | Compile time linking via hashing technique |
KR101051600B1 (ko) * | 2010-03-29 | 2011-07-22 | 주식회사 소프트 포 소프트 | 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템 |
US20140282444A1 (en) * | 2013-03-15 | 2014-09-18 | ArtinSoft Corporation | Programming language transformations with abstract syntax tree extensions |
CN106293677A (zh) * | 2015-06-08 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 一种代码转换方法及装置 |
CN108170435A (zh) * | 2018-01-16 | 2018-06-15 | 优视科技新加坡有限公司 | 一种源代码转换方法、装置及设备 |
CN109255209A (zh) * | 2017-07-13 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN110096264A (zh) * | 2019-04-29 | 2019-08-06 | 珠海豹好玩科技有限公司 | 一种代码运行方法及装置 |
CN110187885A (zh) * | 2019-06-10 | 2019-08-30 | 合肥本源量子计算科技有限责任公司 | 一种量子程序编译的中间代码生成方法及装置 |
-
2019
- 2019-12-30 CN CN201911396096.7A patent/CN111209004B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2513186A1 (en) * | 2004-12-14 | 2006-06-14 | Axiomatic Solutions Sdn Bhd | Compile time linking via hashing technique |
KR101051600B1 (ko) * | 2010-03-29 | 2011-07-22 | 주식회사 소프트 포 소프트 | 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템 |
US20140282444A1 (en) * | 2013-03-15 | 2014-09-18 | ArtinSoft Corporation | Programming language transformations with abstract syntax tree extensions |
CN106293677A (zh) * | 2015-06-08 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 一种代码转换方法及装置 |
CN109255209A (zh) * | 2017-07-13 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN108170435A (zh) * | 2018-01-16 | 2018-06-15 | 优视科技新加坡有限公司 | 一种源代码转换方法、装置及设备 |
CN110096264A (zh) * | 2019-04-29 | 2019-08-06 | 珠海豹好玩科技有限公司 | 一种代码运行方法及装置 |
CN110187885A (zh) * | 2019-06-10 | 2019-08-30 | 合肥本源量子计算科技有限责任公司 | 一种量子程序编译的中间代码生成方法及装置 |
Non-Patent Citations (2)
Title |
---|
SAMUEL NDICHU: "《A machine learning approach to detection of JavaScript-based attacks using AST features and paragraph vectors》", 《APPLIED SOFT COMPUTING》, pages 1 * |
刘楠: "《一种改进的基于抽象语法树的软件源代码比对算法》", 《信息网络安全》, no. 1, pages 38 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111857709A (zh) * | 2020-06-12 | 2020-10-30 | 北京三快在线科技有限公司 | React组件和Flutter组件的映射方法、装置、电子设备及存储介质 |
CN111708539A (zh) * | 2020-06-17 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 一种应用程序代码转换方法、装置、电子设备和存储介质 |
CN111708539B (zh) * | 2020-06-17 | 2021-07-06 | 腾讯科技(深圳)有限公司 | 一种应用程序代码转换方法、装置、电子设备和存储介质 |
CN111796832A (zh) * | 2020-06-30 | 2020-10-20 | 苏州三六零智能安全科技有限公司 | 热补丁文件生成方法、装置、设备及存储介质 |
CN111796832B (zh) * | 2020-06-30 | 2022-11-04 | 苏州三六零智能安全科技有限公司 | 热补丁文件生成方法、装置、设备及存储介质 |
CN113961242A (zh) * | 2020-07-20 | 2022-01-21 | 荣耀终端有限公司 | 布局文件的转换方法、装置、电子设备及存储介质 |
CN113961242B (zh) * | 2020-07-20 | 2022-09-20 | 荣耀终端有限公司 | 布局文件的转换方法、装置、电子设备及存储介质 |
CN111966358A (zh) * | 2020-07-30 | 2020-11-20 | 上海泛微网络科技股份有限公司 | 代码打包方法、装置、电子设备和计算机可读存储介质 |
CN111966358B (zh) * | 2020-07-30 | 2022-06-07 | 上海泛微网络科技股份有限公司 | 代码打包方法、装置、电子设备和计算机可读存储介质 |
CN112346730A (zh) * | 2020-11-04 | 2021-02-09 | 星环信息科技(上海)股份有限公司 | 一种中间表示的生成方法、计算机设备及存储介质 |
CN112328257A (zh) * | 2020-11-24 | 2021-02-05 | 中国工商银行股份有限公司 | 代码转换方法及装置 |
CN112612470A (zh) * | 2021-01-05 | 2021-04-06 | 北京城市网邻信息技术有限公司 | 用户界面文件生成方法及装置 |
TWI801836B (zh) * | 2021-04-01 | 2023-05-11 | 台達電子工業股份有限公司 | 將程式碼於不同程式語言間進行轉換及優化的方法 |
CN113254023A (zh) * | 2021-05-14 | 2021-08-13 | 网易(杭州)网络有限公司 | 对象读取方法、装置和电子设备 |
CN113254023B (zh) * | 2021-05-14 | 2023-08-11 | 网易(杭州)网络有限公司 | 对象读取方法、装置和电子设备 |
CN113553064A (zh) * | 2021-07-07 | 2021-10-26 | 北京计算机技术及应用研究所 | 一种web前端代码转换方法 |
CN113741900A (zh) * | 2021-08-31 | 2021-12-03 | 广州数励科技有限公司 | 一种前端页面应用的开发方法、装置及相关设备 |
CN113741900B (zh) * | 2021-08-31 | 2024-03-19 | 广州数励科技有限公司 | 一种前端页面应用的开发方法、装置及相关设备 |
CN113703779A (zh) * | 2021-09-06 | 2021-11-26 | 武汉市字节码科技有限公司 | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 |
CN113703779B (zh) * | 2021-09-06 | 2024-04-16 | 王喆 | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 |
Also Published As
Publication number | Publication date |
---|---|
CN111209004B (zh) | 2023-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111209004B (zh) | 代码转换方法及装置 | |
CN110968325B (zh) | 一种小程序转换方法及装置 | |
CN106970820B (zh) | 代码存储方法及代码存储装置 | |
US6859810B2 (en) | Declarative specification and engine for non-isomorphic data mapping | |
US20110219357A1 (en) | Compressing source code written in a scripting language | |
WO2007144853A2 (en) | Method and apparatus for performing customized paring on a xml document based on application | |
EP1678629B1 (en) | Extensible framework for handling different mark up language parsers and generators in a computing device | |
JP4997777B2 (ja) | デリミタを減少させる方法及びシステム | |
CN111190594B (zh) | Vue组件的文档生成方法及装置 | |
US8849673B2 (en) | Rule generation | |
CA2454610A1 (en) | Programming language extensions for processing data representation language objects and related applications | |
JP2005018777A (ja) | 共通問い合わせ実行時システムおよびアプリケーションプログラミングインターフェイス | |
JP5044942B2 (ja) | 文書分析において受付状態を決定するシステム及び方法 | |
CN108563629B (zh) | 一种日志解析规则自动生成方法和装置 | |
CN112363695B (zh) | Pmml文件及其运行时环境与工业软件的集成方法 | |
JP2006323821A (ja) | コンパイル済みスキーマに順次アクセスする方法とシステム | |
CN111831384A (zh) | 语言切换方法和装置、设备及存储介质 | |
CN115016793A (zh) | 基于语法树的代码生成方法和装置、电子设备、存储介质 | |
JP5044943B2 (ja) | データ文書の高速符号化方法及びシステム | |
JP5789236B2 (ja) | 構造化文書分析方法、構造化文書分析プログラム、および構造化文書分析システム | |
JP4776389B2 (ja) | 符号化文書復号方法及びシステム | |
CN109408577B (zh) | Oracle数据库json解析方法、系统、装置及可存储介质 | |
CN115576603B (zh) | 一种获取代码片段中的变量值的方法及装置 | |
CN117008918A (zh) | 领域特定语言的处理方法、装置、介质及电子设备 | |
KR102407941B1 (ko) | Rpc에 기반하여 외부 장치의 함수 또는 프로시저를 호출하는 전자 장치가 사용자 인터페이스를 생성하는 방법, 그 컴퓨터 프로그램 및 그 전자 장치 |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100102 201 / F, block C, 2 lizezhong 2nd Road, Chaoyang District, Beijing Applicant after: Beijing Shuidi Technology Group Co.,Ltd. Address before: Room 4103, room 101, floor 1, building 2, No. 208, Lize Zhongyuan, Chaoyang District, Beijing 100102 Applicant before: Beijing Health Home Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |