一种代码转换方法及装置与流程

文档序号:12362787阅读:167来源:国知局
一种代码转换方法及装置与流程

本发明涉及计算机技术领域,尤其涉及一种代码转换方法及装置。



背景技术:

当前,计算机领域中存在各种各样的计算机语言的平台,例如JS(JavaScript,直译式脚本语言)语言的平台、PHP(Professional Hypertext Preprocessor,专业超文本预处理)语言的平台和C#(面向对象编程语言)语言的平台等,每种计算机语言的平台都具有各自的计算机语言编码格式,且各个计算机语言的平台对应的计算机语言编码格式不同。

对于任一种计算机语言的平台,在该计算机语言的平台上只能应用由该计算机语言的平台对应的计算机语言编码格式编写的代码。例如,JS语言的平台上只能应用由JS语言的平台对应的JS语言编码格式编写的代码,PHP语言的平台上只能应用由PHP语言的平台对应的PHP语言编码格式编写的代码。

其中,当技术人员根据一个计算机语言编码格式编写了一段具有某一功能的代码时,就可以在该一个计算机语言编码格式对应的计算机语言的平台上应用该一段代码,如果技术人员需要在另一个计算机语言编码格式对应的计算机语言的平台上应用具有该功能的代码时,必须根据该另一个计算机语言编码格式编写一段具有该功能的代码,但是这样会增加技术人员的工作量,导致人工成本较高。



技术实现要素:

为克服相关技术中存在的问题,本发明提供一种代码转换方法及装置。

根据本发明实施例的第一方面,提供一种代码转换方法,所述方法包括:

接收用户输入的对源编码格式的源代码进行格式转换的请求;所述请求中携带有所述源代码和目标编码格式的标识,所述目标编码格式的标识对应的编码格式与所述源编码格式不同;

根据所述源编码格式对所述源代码进行分析,得到所述源代码中包含的数据字符串和所述源编码格式的语法字符串;

将所述源编码格式的语法字符串转换为目标编码格式对应的语法字符串;所述目标 编码格式为目标编码格式的标识对应的编码格式;

将所述数据字符串和所述目标编码格式对应的语法字符串结合生成目标编码格式的目标代码。

其中,所述根据所述源编码格式对所述源代码进行分析,得到所述源代码中包含的数据字符串和所述源编码格式的语法字符串,包括:

对所述源代码进行正则匹配;

在所述源代码中获取所述源编码格式对应的第一预设字符串和第二预设字符串;获取的第一预设字符串的个数与获取的第二预设字符串的个数相同;

将获取到的第一预设字符串按照获取的时间顺序进行排序,以及将获取到的第二预设字符串按照获取的时间顺序进行排序;

将次序相同第一预设字符串和第二预设字符串组成预设字符串组;

对于每一个预设字符串组,将所述预设字符串组中的第一预设字符串、第二预设字符串以及位于所述预设字符串组中的第一预设字符串和第二预设字符串之间的字符串分别确定为所述源编码格式的语法字符串;

将所述源代码中的除确定出的源编码格式的语法字符串之外的字符串确定为数据字符串。

其中,所述根据所述源编码格式对所述源代码进行分析,得到所述源代码中包含的数据字符串和所述源编码格式的语法字符串,包括:

构建所述源代码对应的抽象语法树;

从所述抽象语法树中获取所述源代码中的数据字符串和所述源编码格式的语法字符串。

其中,所述构建所述源代码对应的抽象语法树,包括:

获取预设分析法;

根据所述预设分析法创建状态机;

将所述源代码中的所有字符串依次输入状态机;

检测是否将所述源代码中的所有字符串全部输入至所述状态机;

当将所述源代码中的所有字符串全部输入至所述状态机时,根据所述状态机输出的字符串生成所述源代码对应的抽象语法树。

其中,所述将所述源编码格式的语法字符串转换为目标编码格式对应的语法字符串,包括:

获取预先设置的源编码格式的语法字符串与目标编码格式的语法字符串之间的对 应关系;

在所述对应关系中获取每个所述源编码格式的语法字符串对应的目标编码格式的语法字符串;

对于获取的每一个目标编码格式的语法字符串,在所述抽象语法树中,利用所述目标编码格式的语法字符串替换与所述目标编码格式的语法字符串对应的源编码格式的语法字符串。

根据本发明实施例的第二方面,提供一种代码转换装置,所述装置包括:

接收模块,用于接收用户输入的对源编码格式的源代码进行格式转换的请求;所述请求中携带有所述源代码和目标编码格式的标识,所述目标编码格式的标识对应的编码格式与所述源编码格式不同;

分析模块,用于根据所述源编码格式对所述源代码进行分析,得到所述源代码中包含的数据字符串和所述源编码格式的语法字符串;

转换模块,用于将所述源编码格式的语法字符串转换为目标编码格式对应的语法字符串;所述目标编码格式为目标编码格式的标识对应的编码格式;

结合模块,用于将所述数据字符串和所述目标编码格式对应的语法字符串结合生成目标编码格式的目标代码。

其中,所述分析模块包括:

正则匹配单元,用于对所述源代码进行正则匹配;

第一获取单元,用于在所述源代码中获取所述源编码格式对应的第一预设字符串和第二预设字符串;获取的第一预设字符串的个数与获取的第二预设字符串的个数相同;

排序单元,用于将获取到的第一预设字符串按照获取的时间顺序进行排序,以及将获取到的第二预设字符串按照获取的时间顺序进行排序;

组成单元,用于将次序相同第一预设字符串和第二预设字符串组成预设字符串组;

第一确定单元,用于对于每一个预设字符串组,将所述预设字符串组中的第一预设字符串、第二预设字符串以及位于所述预设字符串组中的第一预设字符串和第二预设字符串之间的字符串分别确定为所述源编码格式的语法字符串;

第二确定单元,用于将所述源代码中的除确定出的源编码格式的语法字符串之外的字符串确定为数据字符串。

其中,所述分析模块包括:

构建单元,用于构建所述源代码对应的抽象语法树;

第二获取单元,用于从所述抽象语法树中获取所述源代码中的数据字符串和所述源 编码格式的语法字符串。

其中,所述构建单元包括:

获取子单元,用于获取预设分析法;

创建子单元,用于根据所述预设分析法创建状态机;

输入子单元,用于将所述源代码中的所有字符串依次输入状态机;

检测子单元,用于检测是否将所述源代码中的所有字符串全部输入至所述状态机;

生成子单元,用于当将所述源代码中的所有字符串全部输入至所述状态机时,根据所述状态机输出的字符串生成所述源代码对应的抽象语法树。

其中,所述转换模块包括:

第三获取单元,用于获取预先设置的源编码格式的语法字符串与目标编码格式的语法字符串之间的对应关系;

第四获取单元,用于在所述对应关系中获取每个所述源编码格式的语法字符串对应的目标编码格式的语法字符串;

替换单元,用于对于获取的每一个目标编码格式的语法字符串,在所述抽象语法树中,利用所述目标编码格式的语法字符串替换与所述目标编码格式的语法字符串对应的源编码格式的语法字符串。

本发明的实施例提供的技术方案可以包括以下有益效果:通过本发明的方法,当技术人员事先根据源编码格式编写了一段具有某一功能的源代码时,如果要在某一语言的平台上应用具有该功能的代码,该语言支持的编码格式与源编码格式不同,只需将源代码的源编码格式转化为该语言支持的编码格式,这样就可以将转换后的代码应用至该语言的平台上,无需使得技术人员再根据该语言的平台支持的编码格式编写一段具有该功能的代码,从而可以降低人工成本。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1是根据一示例性实施例示出的一种代码转换方法的流程图。

图2是根据一示例性实施例示出的一种代码转换方法的流程图。

图3是根据一示例性实施例示出的一种代码转换方法的流程图。

图4是根据一示例性实施例示出的一种抽象语法树的示意图。

图5是根据一示例性实施例示出的一种代码转换方法的流程图。

图6是根据一示例性实施例示出的一种代码转换装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

图1是根据一示例性实施例示出的一种代码转换方法的流程图,如图1所示,该方法包括以下步骤。

在步骤S101中,接收用户输入的对源编码格式的源代码进行格式转换的请求;

该请求中携带有源代码和目标编码格式的标识;目标编码格式的标识对应的编码格式与所述源编码格式不同;

目标编码格式的标识为目标编码格式的名称或编号等,本发明对此不加以限定。

其中,目标编码格式可以为JS语言支持的编码格式,PHP语言支持的编码格式,velocity语言支持的编码格式,或者asp语言支持的编码格式等。

源编码格式为预先设置的DSL(domain specific language,领域特定语言)语言支持的编码格式。

例如,在预先设置的DSL语言支持的编码格式可以为:变量定义语法字符串“set”,输出字面量语法字符串“$+变量名”,判断流程控制语法字符串“if”、“elseif”和“else”,循环流程控制语法字符串“each val,index in items”、“$val”和“/each”。嵌套语法字符串“include'foo.tpl',data”,中断定义语法字符串“stop”,注释定义语法字符串“comment”,第一预设标识符以及第二预设标识符等。第一预设标识符以及第二预设标识符可以将语法字符串与其他字符串进行区分。例如,第一预设标识符紧挨在一个语法字符串之前且第二预设标识符紧挨在该一个语法字符串之后,这样,第一预设标识符和第二预设标识符就可以将该一个语法字符串与其他字符串进行区分。

例如,第一预设标识符可以为“<#”,以及第二标预设识符可以为“#>”;或者,第一预设标识符也可以为“<%”,以及第二预设标识符也可以为“%>”,本发明对比不加以限定。

其中,在本发明实施例中,以第一预设标识符为“<#”以及第二标识符为“#>”进 行举例说明,但不作为对本发明保护范围的限制。

例如,假设获取用户输入的该请求中的源编码格式的源代码为:

“<h1><#$header#></h1>

<#each val,index in$items#>

<#if$val.first#>”,以及用户输入的该请求中的目标编码格式的标识为PHP语言支持的编码格式的标识。

在步骤S102中,根据源编码格式对源代码进行分析,得到源代码中包含的数据字符串和源编码格式的语法字符串;

其中,在上述源代码中,“<#”为第一预设字符串,“#>”为第二预设字符串,第一预设字符串、第二预设字符串和位于第一预设字符串与第二预设字符串之间的字符串为语法字符串;除语法字符串以外的其他字符串为数据字符串。

在步骤S103中,将源编码格式的语法字符串转换为目标编码格式对应的语法字符串;

其中,目标编码格式为目标编码格式的标识对应的编码格式。

在步骤S104中,将数据字符串和目标编码格式对应的语法字符串结合生成目标编码格式的目标代码。

通过本发明图1所示的实施例的方法,当技术人员事先根据源编码格式编写了一段具有某一功能的源代码时,如果要在某一语言的平台上应用具有该功能的代码,该语言支持的编码格式与源编码格式不同,只需将源代码的源编码格式转化为该语言支持的编码格式,这样就可以将转换后的代码应用至该语言的平台上,无需使得技术人员再根据该语言的平台支持的编码格式编写一段具有该功能的代码,从而可以降低人工成本。

在本发明另一实施例中,参见图2,步骤S102包括:

在步骤S201中,对源代码进行正则匹配;

例如,对源代码“<h1><#$header#></h1>

<#each val,index in$items#>

<#if$val.first#>”进行正则匹配。

在步骤S202中,在源代码中获取源编码格式对应的第一预设字符串和第二预设字符串;

其中,获取的第一预设字符串的个数与获取的第二预设字符串的个数相同;第一预 设字符串为“<#”,第二预设字符串为“#>”。

例如,首先获取“<#$header#>”中的第一预设字符串“<#”,以及第二预设字符串“#>”,然后获取“<#each val,index in$items#>”中的第一预设字符串“<#”,以及第二预设字符串“#>”,最后获取“<#if$val.first#>”中的第一预设字符串“<#”,以及第二预设字符串“#>”。

在步骤S203中,将获取到的第一预设字符串按照获取的时间顺序进行排序,以及将获取到的第二预设字符串按照获取的时间顺序进行排序;

其中,获取的“<#$header#>”中的第一预设字符串“<#”和第二预设字符串“#>”分别为排序第一的第一预设字符串和排序第一的第二预设字符串。

获取的“<#each val,index in$items#>”中的第一预设字符串“<#”和第二预设字符串“#>”分别为排序第二的第一预设字符串和排序第二的第二预设字符串。

获取的“<#if$val.first#>”中的第一预设字符串“<#”和第二预设字符串“#>”分别为排序第三的第一预设字符串和排序第三的第二预设字符串。

在步骤S204中,将次序相同第一预设字符串和第二预设字符串组成预设字符串组;

其中,将排序第一的第一预设字符串和排序第一的第二预设字符串组成第一预设字符串组;将排序第二的第一预设字符串和排序第二的第二预设字符串组成第二预设字符串组;将排序第三的第一预设字符串和排序第三的第二预设字符串组成第三预设字符串组;

在步骤S205中,对于每一个预设字符串组,将该预设字符串组中的第一预设字符串、第二预设字符串以及位于该预设字符串组中的第一预设字符串和第二预设字符串之间的字符串分别确定为源编码格式的语法字符串;

例如,对于第一预设字符串组,将第一预设字符串组中的第一预设字符串“<#”、第二预设字符串“#>”以及位于第一预设字符串组中的第一预设字符串“<#”与第二预设字符串“#>”之间的字符“$header”分别确定为源编码格式的语法字符串。

对于第二预设字符串组,将第二预设字符串组中的第一预设字符串“<#”、第二预设字符串“#>”以及位于第二预设字符串组中的第一预设字符串“<#”与第二预设字符串“#>”之间的字符“each val,index in$items”分别确定为源编码格式的语法字符串。

对于第三预设字符串组,将第三预设字符串组中的第一预设字符串“<#”、第二预设字符串“#>”以及位于第三预设字符串组中的第一预设字符串“<#”与第二预设字符串“#>”之间的字符“if$val.first”分别确定为源编码格式的语法字符串。

在步骤S206中,将源代码中的除确定出的源编码格式的语法字符串之外的字符串 确定为数据字符串。

其中,在上述源代码中,可以确定出除源编码格式的语法字符串之外的其他字符串分别:位于排序第一的第一预设字符串“<#”之前的字符串“<h1>”、以及位于排序第一的第二预设字符串“#>”与排序第二的第一预设字符串“<#”之间的字符串“</h1>”,因此,可以将位于排序第一的第一预设字符串“<#”之前的字符串“<h1>”、以及位于排序第一的第二预设字符串“#>”与排序第二的第一预设字符串“<#”之间的字符串“</h1>”分别确定为数据字符串。

在本发明又一实施例中,参见图3,步骤S102包括:

在步骤S301中,构建源代码对应的抽象语法树;

具体地,本步骤可以通过如下流程实现,包括:

11)、获取预设分析法;

预设分析法可以为LR(1)分析法,LR(0)分析法或SLR分析法等,本发明对此不加以限定。

在本发明实施例中,优先采用LR(1)分析法。

12)、根据预设分析法创建状态机;

13)、将源代码中的所有字符串依次输入状态机;

例如,将源代码“<h1><#$header#></h1>

<#each val,index in$items#>

<#if$val.first#>”依次输入状态机。

14)、检测是否将源代码中的所有字符串全部输入至状态机;

15)、当将源代码中的所有字符串全部输入至状态机时,根据状态机输出的字符串生成源代码对应的抽象语法树。

例如源代码中的“<#if$val.first#>”对应的抽象语法树可以如图4所示。

在步骤S302中,从抽象语法树中获取源代码中的数据字符串和源编码格式的语法字符串。

从图4所示的抽象语法树中获取源编码格式的语法字符串“<#”、“if$val.first”和“#>”。

在本发明又一实施例中,参见图5,步骤S103包括:

在步骤S401中,获取预先设置的源编码格式的语法字符串与目标编码格式的语法 字符串之间的对应关系;

其中,为了可以高效率地将源代码中的源编码格式的语法字符串替换为目标编码格式的语法字符串,技术人员事先在本地设置了源编码格式的语法字符串与目标编码格式的语法字符串之间的对应关系,在上述对应关系中,每一个源编码格式的语法字符串都对应的一个目标编码格式的语法字符串。

例如,在本发明实施例中,源编码格式为DSL语言支持的编码格式,目标编码格式为PHP语言支持的编码格式。

获取的DSL语言支持的编码格式的语法字符串与PHP语言支持的编码格式的语法字符串之间的对应关系可以如下表1所示。

表1

其中,本地还存储有DSL语言支持的编码格式的语法字符串与JS语言支持的编码格式的语法字符串之间的对应关系,DSL语言支持的编码格式的语法字符串与velocity语言支持的编码格式的语法字符串之间的对应关系,DSL语言支持的编码格式的语法字符串与asp语言支持的编码格式的语法字符串之间的对应关系等。

在步骤S402中,在上述对应关系中获取每一个源编码格式的语法字符串对应的目标编码格式的语法字符串;

对于任一个源编码格式的语法字符串,在上述对应关系中查找与该源编码格式的语法字符串对应的目标编码格式的语法字符串。对于其他每一源编码格式的语法字符串,均执行上述操作,如此实现在对应关系中获取每一个源编码格式的语法字符串对应的目标编码格式的语法字符串。

例如,对于源代码中的“<#each val,index in$items#>”,其中,源编码格式的语法字符串包括“<#”、“each val,index in$items”和“#>”,因此可以首先在表1所示的对应关系中查找源编码格式的字符串“<#”对应的目标编码格式的语法字符串“<?PHP”,然后在表1所示的对应关系中查找源编码格式的字符串“each val,index in$items”对应的目标编码格式的语法字符串“foreach($items as$val=>$index)”,最后在表1所示的对 应关系中查找源编码格式的字符串“#>”对应的目标编码格式的语法字符串“?>”。

在步骤S403中,对于获取的每一个目标编码格式的语法字符串,在抽象语法树中,利用目标编码格式的语法字符串替换与目标编码格式的语法字符串对应的源编码格式的语法字符串。

具体的,遍历上述抽象语法树,当遍历到一个字符串时,由于抽象语法树中已经标记了每个字符串是数据字符串还是源编码格式的语法字符串,因此,可以根据标记直接确定出遍历到的字符串是源编码格式的语法字符串还是数据字符串;当遍历到的字符串为源编码格式的语法字符串时,从上述对应关系中获取遍历到的源编码格式的语法字符串对应的目标编码格式的语法字符串,直至遍历完抽象语法树为止。

其中,在遍历上述抽象语法树时可以采用深度遍历策略,也可以采用广度遍历策略,本发明对此不加以限定。优选地,本发明实施例采用深度遍历策略遍历上述抽象语法树。

图6是根据一示例性实施例示出的一种代码转换装置的框图。参照图6,该装置包括:

接收模块11,用于接收用户输入的对源编码格式的源代码进行格式转换的请求;所述请求中携带有所述源代码和目标编码格式的标识,所述目标编码格式的标识对应的编码格式与所述源编码格式不同;

分析模块12,用于根据所述源编码格式对所述源代码进行分析,得到所述源代码中包含的数据字符串和所述源编码格式的语法字符串;

转换模块13,用于将所述源编码格式的语法字符串转换为目标编码格式对应的语法字符串;所述目标编码格式为目标编码格式的标识对应的编码格式;

结合模块14,用于将所述数据字符串和所述目标编码格式对应的语法字符串结合生成目标编码格式的目标代码。

通过本发明图6所示的实施例的方法,当技术人员事先根据源编码格式编写了一段具有某一功能的源代码时,如果要在某一语言的平台上应用具有该功能的代码,该语言支持的编码格式与源编码格式不同,只需将源代码的源编码格式转化为该语言支持的编码格式,这样就可以将转换后的代码应用至该语言的平台上,无需使得技术人员再根据该语言的平台支持的编码格式编写一段具有该功能的代码,从而可以降低人工成本。

其中,所述分析模块12包括:

正则匹配单元,用于对所述源代码进行正则匹配;

第一获取单元,用于在所述源代码中获取所述源编码格式对应的第一预设字符串和 第二预设字符串;获取的第一预设字符串的个数与获取的第二预设字符串的个数相同;

排序单元,用于将获取到的第一预设字符串按照获取的时间顺序进行排序,以及将获取到的第二预设字符串按照获取的时间顺序进行排序;

组成单元,用于将次序相同第一预设字符串和第二预设字符串组成预设字符串组;

第一确定单元,用于对于每一个预设字符串组,将所述预设字符串组中的第一预设字符串、第二预设字符串以及位于所述预设字符串组中的第一预设字符串和第二预设字符串之间的字符串分别确定为所述源编码格式的语法字符串;

第二确定单元,用于将所述源代码中的除确定出的源编码格式的语法字符串之外的字符串确定为数据字符串。

其中,所述分析模块12包括:

构建单元,用于构建所述源代码对应的抽象语法树;

第二获取单元,用于从所述抽象语法树中获取所述源代码中的数据字符串和所述源编码格式的语法字符串。

其中,所述构建单元包括:

获取子单元,用于获取预设分析法;

创建子单元,用于根据所述预设分析法创建状态机;

输入子单元,用于将所述源代码中的所有字符串依次输入状态机;

检测子单元,用于检测是否将所述源代码中的所有字符串全部输入至所述状态机;

生成子单元,用于当将所述源代码中的所有字符串全部输入至所述状态机时,根据所述状态机输出的字符串生成所述源代码对应的抽象语法树。

其中,所述转换模块13包括:

第三获取单元,用于获取预先设置的源编码格式的语法字符串与目标编码格式的语法字符串之间的对应关系;

第四获取单元,用于在所述对应关系中获取每个所述源编码格式的语法字符串对应的目标编码格式的语法字符串;

替换单元,用于对于获取的每一个目标编码格式的语法字符串,在所述抽象语法树中,利用所述目标编码格式的语法字符串替换与所述目标编码格式的语法字符串对应的源编码格式的语法字符串。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1