一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种代码翻译方法、装置及设备与流程

2022-04-13 12:38:07 来源:中国专利 TAG:


1.本技术涉及应用开发技术领域,尤其涉及一种代码翻译方法、装置、设备以及计算机可读存储介质。


背景技术:

2.应用是一种通过计算机语言编写的、在硬件平台上运行的可执行计算机程序。其中,硬件平台是指根据指令集进行数据处理的平台。硬件平台采用的指令集不同,则硬件平台是不同的。例如两个硬件平台分别采用x86架构下的不同复杂指令集,则两个硬件平台是不同的。又例如,两个硬件平台分别采用不同架构下的指令集,例如分别采用x86架构下的复杂指令集和高级精简指令集机器(advanced risc machines,arm)架构下的精简指令集,则两个硬件平台是不同的。
3.针对某个硬件平台上的应用,开发人员可以采用平台依赖语言(具体为与硬件平台强相关的计算机语言)进行开发。随着硬件平台的不断增加,跨平台间进行代码迁移的需求逐渐增加。例如,随着arm芯片在移动通信领域和通用计算领域的崛起,将应用的代码由x86平台翻译至arm平台的需求,或者是将应用的代码由arm平台的一个版本(如arm v8)迁移至arm平台的另一个版本(如arm v9)的需求不断增加。
4.目前,基于平台依赖语言编写的应用的跨平台翻译主要是通过人工进行翻译。然而,这种翻译方法的效率较低,并且对于翻译人员的要求较高,进一步增加了翻译成本,难以满足业务需求。


技术实现要素:

5.本技术提供了一种代码编译方法,该方法利用预先创建的翻译规则实现了代码自动跨平台翻译,解决了人工迁移效率低、迁移周期长、迁移门槛高且容易出错的问题,降低了代码迁移的成本,能够满足业务需求。本技术还提供了上述方法对应的装置、设备、计算机可读存储介质以及计算机程序产品。
6.第一方面,本技术提供了一种代码翻译方法。该方法可以由代码翻译装置执行。其中,代码翻译装置是具有跨平台翻译功能的装置。该装置可以是软件模块,通过在计算机等硬件设备上运行该从而提供代码翻译服务。在一些可能的实现方式中,代码翻译装置也可以是具有代码翻译功能的硬件模块。
7.具体地,代码翻译装置可以获取第一代码,该第一代码基于源平台的平台依赖语言编写,然后代码翻译装置确定与上述第一代码匹配的至少一个翻译规则,该翻译规则用于将一个平台的代码直接翻译为另一个平台的代码,接着代码翻译装置利用翻译规则对第一代码进行翻译,得到适用于目标平台的第二代码。
8.该方法通过利用预先创建的规则库中的规则实现了代码自动跨平台翻译,解决了人工迁移效率低、迁移周期长、迁移门槛高且容易出错的问题,降低了代码迁移的成本,能够满足业务需求。并且,该方法可以实现适用于源平台的第一代码到适用于目标平台的第
二代码的直接翻译,无需经过其他中间模型或对象,提高了翻译效率以及翻译精度。
9.在一些可能的实现方式中,代码翻译装置可以软件包的形式提供给用户使用。具体地,代码翻译装置器的所有方可以发布代码翻译装置器的软件包,用户可以通过计算装置获取该软件包,然后计算装置运行该软件包,从而实现对适用于源平台的第一代码进行自动地跨平台翻译。
10.在一些可能的实现方式中,代码翻译装置可以云服务的形式提供给用户使用。用户可以将适用于源平台的第一代码上传至云端,云端的代码翻译装置可以对第一代码进行自动地跨平台翻译,得到适用于目标平台的第二代码,然后向用户返回适用于目标平台的第二代码。由于翻译过程主要在云端中进行,本地的计算装置主要协助进行翻译,因而对本地的计算装置的性能要求较低,具有较高可用性。
11.在一些可能的实现方式中,代码翻译装置可以直接接收用户导入的翻译规则,以便从中确定与第一代码匹配的至少一个翻译规则。具体地,在确定与第一代码匹配的至少一个翻译规则之前,代码翻译装置可以先接收用户通过用户界面,例如是图形用户界面(graphical user interface,gui)输入的翻译规则。在一些实施例中,用户也可以通过gui对已有的翻译规则进行修改,对应地,代码翻译装置还可以接收用户通过gui修改的翻译规则。
12.基于此,代码翻译装置可以移植已有的翻译规则实现代码自动跨平台翻译,由此提高代码翻译的效率。
13.在一些可能的实现方式中,代码翻译装置也可以生成翻译规则,以便根据该翻译规则进行代码翻译。具体地,当源平台的指令在目标平台没有对应的指令时,例如x86平台中读取时间标签计数器(rdtsc)指令,在高级精简指令集机器(advanced risc machine,arm)平台中没有对应的指令。代码翻译装置可以通过人工干预的方式生成该指令对应的翻译规则,例如是源平台独有的指令对应的翻译规则。
14.具体地,在确定与第一代码匹配的至少一个翻译规则之前,代码翻译装置可以接收用户输入的辅助信息,该辅助信息可以是与指令具有相同语义的函数,例如x86平台中读取时间标签计数器(rdtsc)指令在arm平台中没有对应的指令,用户可以通过高级语言的函数实现相同的语义,如人工编写一个函数rdtsconarm(),然后代码翻译装置根据辅助信息(例如是具有相同语义的函数)生成对应的翻译规则。
15.需要说明的是,生成翻译规则的过程可以是代码翻译装置实现,也可以是独立的规则生成装置实现,本技术实施例对此不作限定。
16.在一些可能的实现方式中,当源平台的指令在目标平台具有对应的指令时,还可以基于源平台的平台依赖语言和目标语言的映射关系,自动生成对应的翻译规则,由此可以提高翻译规则的生成效率,进而提升翻译效率。
17.具体地,在确定与第一代码匹配的至少一个翻译规则之前,代码翻译装置获取适用于源平台的历史代码,该历史代码是基于源平台的平台依赖语言编写,然后代码翻译装置根据历史代码中影响语义的特征以及源平台的平台依赖语言和目标语言的映射关系,生成翻译规则。
18.其中,影响语义的特征是指对语义产生的影响的特征。具体实现时,代码翻译装置可以根据平台依赖语言的语法规则识别影响语义的特征。对于上述特征中的任意一个特
征,如果该特征出现在语法规则的条件语句中,则代码翻译装置可以确定该特征为影响语义的特征。例如,语法规则包括if xx
……
,then
……
,则代码翻译装置可以确定特征xx为影响语义的特征。
19.根据源平台的平台依赖语言和目标语言的映射关系可以构建不同规则索引对应的规则模板,例如或指令、异或指令对应的规则模板。该规则模板中包括占位符。该占位符具体与在不同平台中产生差异的位置对应。例如,不同平台操作数的表达式不同,则可以在规则模板中用占位符代替操作数的表达式。
20.代码翻译装置可以根据响应语义的特征识别能够生成的翻译规则的规则索引,然后根据规则索引确定对应的规则模板,根据规则模板生成相应的翻译规则。具体地,代码翻译装置可以采用指令语句中的指令在目标平台对应的指令替换规则模板的指令,从而得到翻译规则。
21.类似地,上述规则生成方法可以由代码翻译装置实现,也可以由独立的规则生成装置实现,本技术实施例对此不作限定。
22.在一些可能的实现方式中,翻译规则可以以表的形式存储在规则库中。其中,用于存储翻译规则的表(也可以称作规则表)可以包括规则索引和规则内容。规则索引可以是规则的标识,如规则的名称或编号等。规则的名称有助于用户记忆。规则内容用于生成目标平台的代码。具体地,规则内容可以包括目标平台中对应指令的指令模板,该指令模板中包括占位符。占位符用于对指令差异之处进行占位,以便于代码翻译时根据该占位符进行修改。
23.基于上述规则索引,可以快速匹配到与代码片段对应的翻译规则,由此可以提高代码翻译的效率。
24.在一些可能的实现方式中,代码翻译装置可以从第一代码中提取特征,然后从特征中识别影响语义的特征,例如根据语法规则从特征中识别影响语义的特征,接着根据影响语义的特征从规则库中确定至少一个翻译规则。由此可以实现通过翻译规则对代码的自动跨平台翻译,提高代码翻译的效率。
25.在一些可能的实现方式中,代码翻译装置可以从第一代码中提取至少一个语句的结构特征或变量属性特征。其中,结构特征包括前缀(prefix)、后缀(suffix)、约束和修饰符中的任意一种或多种。变量属性特征可以包括变量类型和变量数量。例如变量为指令的操作数时,变量属性特征可以为操作数的类型和操作数的数量。操作数的类型具体可以包括立即数(immediate,i)、寄存器操作数(register,r)、内存操作数(memory,m)等类型。
26.其中,从代码片段中提取语句的结构特征或变量属性特征,可以便于根据结构特征快速确定对应的翻译规则,由此可以提高代码翻译的效率。
27.在一些可能的实现方式中,代码翻译装置可以根据第一代码中提取的特征填充翻译规则中的占位符,得到适用于目标平台的第二代码。由此实现通过翻译规则自动地跨平台翻译代码,提高了代码翻译的效率。
28.在一些可能的实现方式中,第二代码包括基于目标平台的平台依赖语言的代码片段或者高级程序语言的代码片段。例如,第二代码可以是基于arm平台的汇编语言的代码片段,或者是基于java语言的代码片段。
29.在一些可能的实现方式中,代码翻译装置可以通过用户界面,如图形用户界面(graphical user interface,gui),向用户呈现代码文件中的代码,用户可以通过gui选择
代码,代码翻译装置可以接收用户通过gui选择的代码,从而获得第一代码。
30.该方法支持对用户选定的代码,例如是整个代码文件。或者是代码文件中的片段,进行代码翻译,满足了个性化的需求,提高了用户体验。
31.在一些可能的实现方式中,代码翻译装置提供的用户界面如gui还可以承载平台选择控件,用户可以通过平台选择控件选择一个平台为目标平台,代码翻译装置可以接收用户选择的目标平台,启动将源平台的代码翻译至目标平台的操作。
32.基于此,代码翻译装置可以提供将源平台的代码翻译至不同平台的服务,能够满足用户个性化的翻译需求,提高用户体验。
33.在一些可能的实现方式中,代码翻译装置可以获取第一代码对应的源平台,并且识别运行该代码翻译装置的平台,将运行该代码翻译装置的平台确定为目标平台,无需用户手动选择,即可触发将源平台的代码翻译至目标平台,简化了用户操作,提高了用户体验。
34.在一些可能的实现方式中,代码翻译装置还可以对源平台与目标平台之间的差异进行提示。具体地,代码翻译装置可以通过gui对源平台与目标平台之间的差异进行提示。
35.在一些实施例中,代码翻译装置可以在呈现第二代码时,对适用于目标平台的第二代码与适用于源平台的第一代码的差异之处进行高亮显示,从而实现对源平台与目标平台之间的差异进行提示。
36.在另一些实施例中,代码翻译装置也可以在呈现第二代码时,以提示框的方式对源平台与目标平台之间的差异进行提示。其中,提示框中可以包括源平台与目标平台的差异之处,例如,可以包括函数调用约定差异、指令差异等等。
37.通过对源平台与目标平台之间的差异进行提示,可以帮助用户对代码进行优化,由此可以提高开发效率。
38.第二方面,本技术提供了一种代码翻译装置。该装置具体包括:
39.通信模块,用于获取第一代码,该第一代码基于源平台的平台依赖语言编写;
40.确定模块,用于确定与第一代码匹配的至少一个翻译规则,该翻译规则用于将一个平台的代码直接翻译为另一个平台的代码;
41.翻译模块,用于利用上述翻译规则对第一代码进行翻译,得到适用于目标平台的第二代码。
42.在一些可能的实现方式中,通信模块还用于:
43.在确定与第一代码匹配的至少一个翻译规则之前,接收用户通过图形用户界面输入或修改的翻译规则。
44.在一些可能的实现方式中,通信模块还用于:
45.在确定与第一代码匹配的至少一个翻译规则之前,接收用户输入的辅助信息;
46.该装置还包括:
47.生成模块,用于根据辅助信息生成源平台独有的指令对应的翻译规则。
48.在一些可能的实现方式中,通信模块还用于:
49.在确定与第一代码匹配的至少一个翻译规则之前,获取适用于源平台的历史代码,历史代码基于源平台的平台依赖语言编写;
50.该装置还包括:
51.根据历史代码中影响语义的特征以及源平台的平台依赖语言和目标语言的映射关系,生成翻译规则。
52.在一些可能的实现方式中,翻译规则以表的形式存储在规则库中。
53.在一些可能的实现方式中,确定模块具体用于:
54.从第一代码中提取特征;
55.从特征中识别影响语义的特征;
56.根据影响语义的特征从规则库中确定至少一个翻译规则。
57.在一些可能的实现方式中,该装置还包括:
58.显示模块,用于通过图形用户界面向用户呈现代码文件中的代码;
59.通信模块具体用于:
60.接收用户通过图形用户界面选择的第一代码。
61.在一些可能的实现方式中,该装置还包括:
62.提示模块,用于对源平台和目标平台之间的差异进行提示。
63.第三方面,本技术提供一种设备,所述设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得设备执行如第一方面或第一方面的任一种实现方式中的代码翻译方法。
64.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示设备执行上述第一方面或第一方面的任一种实现方式所述的代码翻译方法。
65.第五方面,本技术提供了一种包含指令的计算机程序产品,当其在设备上运行时,使得设备执行上述第一方面或第一方面的任一种实现方式所述的代码翻译方法。
66.本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
67.为了更清楚地说明本技术实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
68.图1为本技术实施例提供的一种代码编译方法的系统架构图;
69.图2为本技术实施例提供的一种代码编译方法的系统架构图;
70.图3为本技术实施例提供的一种代码编译方法的流程图;
71.图4为本技术实施例提供的一种通过gui呈现代码的示意图;
72.图5为本技术实施例提供的一种规则表的示意图;
73.图6为本技术实施例提供的一种确定与第一代码匹配的翻译规则的流程图;
74.图7为本技术实施例提供的一种生成翻译规则的方法的流程图;
75.图8为本技术实施例提供的一种代码编译方法的流程示意图;
76.图9为本技术实施例提供的一种生成翻译规则的方法的流程示意图;
77.图10为本技术实施例提供的一种代码编译装置的结构示意图;
78.图11为本技术实施例提供的一种计算设备的结构示意图。
具体实施方式
79.本技术实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
80.首先对本技术实施例中所涉及到的一些技术术语进行介绍。
81.编程语言(programming language),是用来定义计算机程序的形式语言,因此编程语言也被称作计算机语言。开发人员在开发应用时,具体是通过上述编程语言编写代码文件实现的。
82.编程语言可以根据是否依赖平台分为平台依赖语言和非平台依赖语言。其中,平台依赖语言是指对平台具有依赖性的语言。基于某种平台依赖语言编写的代码通常难以在另一种平台上直接使用。非平台依赖语言是独立于平台的语言。基于非平台依赖语言编写的代码通常可以在另一种平台上直接使用。一般情况下,平台依赖语言包括低级程序语言,例如汇编语言、机器语言等等,非平台依赖语言包括高级程序语言,例如java、python等语言。
83.所谓平台是指根据指令集进行数据处理的计算架构。当指令集不同,则平台是不同的。需要说明,不同平台可以是同一类型下的不同平台,例如x86平台(英特尔公司主导开发的通用计算平台)下的pentium ii和pentium iii(引入了新的sse指令集)为x86类型下的不同平台,又例如,arm平台(由arm公司主导开发的计算平台)下的arm v8和arm v9为arm类型下的不同平台。当然,不同平台也可以是不同类型下的平台,例如,x86平台下的pentium ii和arm平台下的arm v8显然是不同平台。
84.随着平台的不断增加,跨平台间进行代码迁移的需求逐渐增加。例如,随着arm平台在移动通信领域和通用计算领域的崛起,将应用的代码由x86平台翻译至arm平台的需求,将应用的代码由arm平台的一个版本(如arm v8)翻译至arm平台的另一个版本(如arm v9)的需求不断增加。
85.目前,基于平台依赖语言编写的应用的跨平台翻译主要是通过人工进行翻译。然而,这种翻译方法的效率较低,并且对于翻译人员的要求较高,进一步增加了翻译成本,难以满足业务需求。
86.有鉴于此,本技术实施例提供了一种代码翻译方法,该方法可以由代码翻译装置执行。其中,代码翻译装置可以是软件模块,通过在计算机等硬件设备上运行从而提供代码翻译服务。在一些可能的实现方式中,代码翻译装置也可以是具有代码翻译功能的硬件模块。本技术实施例对此不作限定。
87.具体地,代码翻译装置获取第一代码,该第一代码是基于源平台的平台依赖语言编写的代码,例如是基于x86平台的汇编语言编写的代码,然后代码翻译装置确定与上述第一代码匹配的至少一个翻译规则,该翻译规则用于将一个平台的代码直接翻译为另一个平台的代码,如此,代码翻译装置可以利用翻译规则对第一代码进行翻译,得到适用于目标平台的第二代码,例如是基于arm平台的汇编语言的代码。
88.该方法通过利用预先创建的规则库中的规则实现了代码自动跨平台翻译,解决了人工迁移效率低、迁移周期长、迁移门槛高且容易出错的问题,降低了代码迁移的成本,能够满足业务需求。并且,该方法可以实现适用于源平台的第一代码到适用于目标平台的第
二代码的直接翻译,无需经过其他中间模型或对象,提高了翻译效率以及翻译精度。
89.需要说明,本技术实施例提供的代码翻译装置可以软件包的形式提供给用户使用。具体地,代码翻译装置器的所有方可以发布代码翻译装置器的软件包,用户获取该软件包,然后运行该软件包,从而实现对适用于源平台的第一代码进行自动地跨平台翻译。
90.在一些可能的实现方式中,本技术实施例提供的代码翻译装置器可以云服务的形式提供给用户使用。用户可以将适用于源平台的第一代码上传至云端,云端的代码翻译装置可以对第一代码进行自动地跨平台翻译,得到适用于目标平台的第二代码,然后向用户返回适用于目标平台的第二代码。
91.为了使得本技术的技术方案更加清楚、易于理解,下面结合附图对代码翻译装置的部署方式进行详细说明。
92.参见图1所示的代码翻译方法的系统架构图,代码翻译方法可以应用于如图1所示的系统。该系统包括计算装置200。代码翻译装置100部署在计算装置200上。计算装置200包括但不限于台式机、笔记本电脑等设备。其中,代码翻译装置100可以是独立的,也可以与其他开发工具进行集成,例如可以与编辑器、编译器、调试器等进行集成,形成集成开发环境(integrated development environment,ide)。
93.具体地,用户可以向计算装置200上运行的代码翻译装置100提交适用于源平台的第一代码,代码翻译装置100确定与上述第一代码匹配的至少一个翻译规则,然后利用翻译规则对第一代码进行翻译,从而得到适用于目标平台的第二代码。由此实现在本地(例如是本地的计算装置200)对第一代码进行跨平台翻译。
94.接着,参见图2所示的代码翻译方法的系统架构图,代码翻译方法可以应用于如图2所示的系统。该系统包括计算装置200和云环境300。代码翻译装置100部署在云环境300中,用户通过计算装置200访问云环境300中的代码翻译装置100,从而实现远程地对第一代码进行跨平台翻译。
95.其中,云环境300指示云服务提供商拥有的,用于提供计算、存储、通信资源的云计算集群。该云计算集群根据在网络拓扑中的位置可以分为中心云和边缘云。云计算集群中包括至少一个云计算设备,例如包括至少一个中心服务器,或者包括至少一个边缘服务器。
96.用户可以通过计算装置200上的浏览器或者是专用于代码翻译的客户端,访问云环境300中代码翻译装置100的实例。代码翻译装置100可以提供接口,如提供图形用户界面(graphical user interface,gui)、命令用户界面(command user interface,cui)等,用户可以通过gui或者cui等接口输入第一代码,代码翻译装置100确定与上述第一代码匹配的至少一个翻译规则,然后利用翻译规则对第一代码进行翻译,从而得到适用于目标平台的第二代码。由于翻译过程主要在云环境300中进行,计算装置200主要协助进行翻译,因而对装置200的性能要求较低,具有较高可用性。
97.其中,图1和图2仅仅是示例性地描述了代码翻译装置100的一些部署方式,在本技术实施例其他可能的实现方式中,代码翻译装置100还可以采用其他方式部署。本技术实施例对此不作限定。
98.接下来,结合附图,从代码翻译装置100的角度对本技术实施例提供的代码翻译方法进行详细介绍。
99.参见图3所示的代码翻译方法的流程图,该方法包括:
100.s302:代码翻译装置100获取第一代码。
101.第一代码具体是基于源平台的平台依赖语言编写的代码。其中,源平台可以是x86平台、arm平台等平台中的任意一种。源平台的平台依赖语言是对该平台具有依赖性的语言。例如,对于x86平台而言,平台依赖语言可以是x86平台下的汇编语言,尤其是嵌入式汇编语言。在一些实施例中,平台依赖语言也可以是x86平台下的机器语言。
102.在一些可能的实现方式中,代码翻译装置100可以通过用户界面,如gui或者cui等,向用户呈现代码文件中的代码。然后,代码翻译装置100可以接收用户选择的代码片段,从而获得第一代码。
103.为了便于理解,下面结合一具体示例进行说明。参见图4所示的代码翻译装置100通过gui呈现代码的示意图,如图4所示,代码翻译装置100通过gui向用户呈现代码文件中的代码402,用户可以通过gui选中代码402中的第一代码404,并通过gui上承载的翻译组件406触发跨平台翻译操作。
104.其中,翻译组件406包括平台选择控件4062和语言选择控件4064。用户可以通过该平台选择控件4062选择一个平台作为目标平台。例如源平台为x86平台时,用户可以选择arm平台或powerpc平台为目标平台。此外,用户可以通过语言选择控件4064选择一种语言作为目标语言。在一些实施例中,用户可以选择汇编语言或者机器语言作为目标语言。在另一些实施例中,用户也可以通过语言选择控件4064选择c语言、java语言、python语言等作为目标语言。即目标语言可以是目标平台下的低级程序语言,也可以是能够适用于不同平台的高级程序语言。
105.在一些可能的实现方式中,代码翻译装置200也可以获取第一代码对应的源平台,然后识别运行该代码翻译装置200的平台,将运行该代码翻译装置200的平台确定为目标平台。
106.对应地,代码翻译装置200接收用户通过gui选中的第一代码404,然后启动对第一代码404的跨平台翻译,对适用于源平台的第一代码进行翻译得到适用于目标平台的代码。
107.需要说明的是,上述第一代码可以是代码文件中的部分代码形成的代码片段,也可以是代码文件中的所有代码形成的代码片段。本技术实施例对此不作限定。
108.s304:代码翻译装置100确定与第一代码匹配的至少一个翻译规则。
109.该翻译规则用于将一个平台的代码直接翻译为另一个平台的代码。该翻译规则为规则库中的规则。其中,规则库包括至少一个翻译规则,翻译规则具体可以是以表的形式存储在规则库中。
110.其中,用于存储翻译规则的表(也可以称作规则表)可以包括规则索引和规则内容。规则索引可以是规则的标识,如规则的名称或编号等。规则的名称有助于用户记忆。规则内容用于生成目标平台的代码。具体地,规则内容可以包括目标平台中对应指令的指令模板,该指令模板中包括占位符。其中,占位符用于对指令差异之处进行占位,以便于代码翻译时根据该占位符进行修改。
111.为了便于理解,本技术还提供了规则表的示例。图5示出了规则表的示意图,规则表500中包括若干条翻译规则502,每条翻译规则502包括规则索引5022和规则内容5024。例如,对于指令“对寄存器进行异或,且约束不为零”,即xorq @ccnz,规则表500中存储的翻译规则502的规则标识5022为trans_rule(lock_or_nz),规则内容5024如下所示:
112.rule("__atomic_fetch_or({1},{0},__atomic_seq_cst);
113.{2}=((*({3}*){1})==0)?1:0;"
114.,"e0,e1p,cc,wt")
115.其中,规则内容5024中的{}为占位符。在上述示例中,{0}、{1}、{2}、{3}均为占位符。e0、e1p、cc、wt为特征标识,如特征名称。其中,e0的值与{0}对应,e1p中的p代表指针(pointer),e1p指向的值与{1}对应,cc(表征约束)、wt(表征宽度类型width type,属于指令后缀)分别与{2}、{3}对应。
116.由于规则库中通常存储至少一个规则,为了实现代码翻译,代码翻译装置100可以从规则库中确定与第一代码匹配的至少一个规则。具体地,代码翻译装置100可以从第一代码中提取特征,然后从特征中识别响应语义的特征,根据影响语义的特征从规则库中确定至少一个翻译规则。
117.参见图6所示的确定翻译规则的示意图,代码翻译装置100可以先从第一代码中提取特征。具体地,代码翻译装置100可以提取至少一个语句(如指令语句)的结构特征,其中,结构特征可以包括前缀(prefix)、后缀(suffix)、约束和修饰符中的任意一种或多种。
118.前缀可以为空值,也可以是其他值,例如可以是lock。lock前缀导致处理器在执行指令时会置上lock#信号,于是该指令就被作为一个原子指令(atomic instruction)执行。在多处理器环境下,置上lock#信号可以确保任何一个处理器能独占使用任何共享内存。
119.后缀可以用于指示操作数的宽度。基于此,后缀可以为空值,也可以为其他值,如可以为b、w、l、q等。其中,b、w、l、q依次表征宽度为8、16、32、64。当后缀为空值时,处理器可以按照默认值进行处理。
120.约束是指对指令的约束。例如约束可以是结果不为零,该约束具体可以表示为cc:nz-》res。其中,nz是指not zero,res是指result。
121.修饰符通常用于限定访问的寄存器的位宽。修饰符可以是空值,也可以是其他值,例如可以为b或h等等。其中,b可以表示寄存器中的低8位,h可以表示寄存器中的高8位。
122.在一些实施例中,代码翻译装置100可以从第一代码中提取变量属性特征。该变量属性特征可以包括变量类型和变量数量。例如变量为指令的操作数时,变量属性特征可以为操作数的类型和操作数的数量。操作数的类型具体可以包括立即数(immediate,i)、寄存器操作数(register,r)、内存操作数(memory,m)等类型。
123.当操作数为一个时,可以采用上述类型符号形成的一个字符表示操作数的类型和数量。例如r表示操作数的数量为一个,且操作数的类型为寄存器操作数。当操作数为多个时,可以采用上述类型符号形成的字符串表示操作数的类型和数量。例如ir表示两个操作数,且操作数类型分别为立即数、寄存器操作数。
124.接着,代码翻译装置100可以从上述特征中识别影响语义的特征。影响语义的特征是指对语义产生影响的特征。具体实现时,代码翻译装置100可以根据平台依赖语言的语法规则识别影响语义的特征。对于上述特征中的任意一个特征,如果该特征出现在语法规则的条件语句中,则代码翻译装置100可以确定该特征为影响语义的特征。例如,语法规则包括if xx
……
,then
……
,则代码翻译装置100可以确定特征xx为影响语义的特征。
125.代码翻译装置100可以根据影响语义的特征从规则库中确定与第一代码匹配的至少一个翻译规则。具体地,代码翻译装置100可以将影响语义的特征与规则库中规则索引进
行匹配,从而确定与第一代码匹配的至少一个翻译规则。
126.例如,第一代码中影响语义的特征为prefix:lock,cc:nz-》res,则代码翻译装置100可以确定与该第一代码匹配的翻译规则是规则索引为trans_rule(lock_or_nz)的翻译规则。又例如,第一代码中影响语义的特征还包括:prefix:lock,cc:null,则代码翻译装置100可以确定与该第一代码匹配的翻译规则是规则索引为trans_rule(lock or)的翻译规则。
127.s306:代码翻译装置100利用翻译规则对第一代码进行翻译,得到适用于目标平台的第二代码。
128.具体地,代码翻译装置100可以根据第一代码中提取的特征填充翻译规则中的占位符,由此可以实现跨平台差异处理,得到适用于目标平台的第二代码。
129.其中,代码翻译装置100确定出与第一代码匹配的翻译规则对应于不同语言时,代码翻译装置100翻译得到的第二代码可以是不同语言的代码片段。翻译规则为由源平台的平台依赖语言翻译至目标平台的平台依赖语言的规则时,第二代码为基于目标平台的平台依赖语言的代码片段。翻译规则为由源平台的平台依赖语言翻译至高级程序语言的规则时,第二代码为高级程序语言的代码片段。
130.为了便于理解,仍以图5中所示的翻译规则trans_rule(lock_or_nz)进行示例说明。在上述规则中,特征e0、e1p、cc、wt分别与{0}、{1}、{2}、{3}对应,代码翻译装置100可以根据上述对应关系,利用第一代码中与e0对应的v填充占位符{0},利用第一代码中与e1对应的s的取值(具体为&s)替换占位符{1}。类似地,代码翻译装置100采用res替换占位符{2}。wt为q时表示变量宽度为64位,因此,代码翻译装置100采用unsigned long long替换占位符{3}。代码翻译装置100翻译得到的第二代码如下所示:
131.__atomic_fetch_or(&s,v,__atomic_seq_cst);
132.res=((*(unsigned long long*)&s)==0)?1:0;
133.代码翻译装置100对第一代码进行翻译,得到第二代码后,还可以输出该第二代码。在一些实施例中,代码翻译装置100可以通过文件的方式输出该第二代码。在另一些实施例中,代码翻译装置100也可以通过用户界面,如gui或cui向用户呈现第二代码。
134.进一步地,代码翻译装置100还可以对源平台与目标平台之间的差异进行提示。具体地,代码翻译装置100可以通过gui对源平台与目标平台之间的差异进行提示。
135.在一些实施例中,代码翻译装置100可以在呈现第二代码时,对适用于目标平台的第二代码与适用于源平台的第一代码的差异之处进行高亮显示,从而实现对源平台与目标平台之间的差异进行提示。
136.在另一些实施例中,代码翻译装置100也可以在呈现第二代码时,以提示框的方式对源平台与目标平台之间的差异进行提示。其中,提示框中可以包括源平台与目标平台的差异之处,例如,可以包括函数调用约定差异、指令差异等等。
137.基于上述内容描述,本技术实施例提供了一种代码翻译方法。该方法通过利用预先创建的规则库中的规则实现了代码自动跨平台翻译,解决了人工迁移效率低、迁移周期长、迁移门槛高且容易出错的问题,降低了代码迁移的成本,能够满足业务需求。并且,该方法可以实现第一代码到第二代码的直接翻译,无需经过其他中间模型或对象,提高了翻译效率以及翻译精度。
138.图3所示实施例主要是通过翻译规则实现自动跨平台翻译代码。为此,代码翻译装置100在进行代码翻译之前,需要预先获得翻译规则。在一些实施例中,代码翻译装置100可以通过用户界面,如gui接收用户输入的翻译规则。进一步地,代码翻译装置100也可以通过用户界面,如gui接收用户对已有翻译规则进行修改所得的翻译规则。
139.在一些可能的实现方式中,代码翻译装置100也可以获取实时生成的翻译规则。本技术实施例还提供了一种生成翻译规则的方法。其中,生成翻译规则的方法可以由独立的规则生成装置执行,也可以由具有生成翻译规则功能的代码翻译装置100执行。
140.为了便于描述,本技术实施例以规则生成装置执行生成翻译规则的方法进行示例说明。
141.参见图7所示的生成翻译规则的方法的流程图,该方法包括:
142.s702:规则生成装置获取适用于源平台的历史代码。
143.其中,历史代码是基于源平台的平台依赖语言编写的代码。源平台可以是x86平台、arm平台或power pc等平台中的任意一个。平台依赖语言可以是汇编语言。在一些实施例中,平台依赖语言也可以是机器语言。
144.历史代码可以包括至少一个语句。具体地,平台依赖语言是汇编语言时,历史代码可以包括至少一个指令语句。当指令语句中的指令在目标平台有对应的指令时,规则生成装置可以执行s704,以生成对应的翻译规则。当指令语句中的指令在目标平台没有对应的指令时,例如该指令为源平台独有的指令时,规则生成装置可以执行s706至s708,以生成对应的翻译规则。
145.s704:规则生成装置根据历史代码中影响语义的特征以及源平台的平台依赖语言和目标语言的映射关系,生成翻译规则。
146.具体地,规则生成装置可以先从历史代码中提取特征,如提取至少一个语句的结构特征,或者提取至少一个语句的变量属性特征,然后规则生成装置可以从提取的上述特征中识别出影响语义的特征。
147.规则生成装置可以根据影响语义的特征确定能够生成的规则,具体是能够生成的规则的规则索引。如影响语义的特征为prefix:lock,cc:@ccnz时,规则生成装置确定能够生成的规则包括trans_rule(lock_or_nz)。
148.规则生成装置可以根据源平台的平台依赖语言和目标语言的映射关系构建不同规则索引对应的规则模板,例如或指令、异或指令对应的规则模板。该规则模板中包括占位符。该占位符具体与在不同平台中产生差异的位置对应。例如,不同平台操作数的表达式不同,则可以在规则模板中用占位符代替操作数的表达式。
149.为了便于理解,本技术还提供了一个规则模板的示例。该示例为trans_rule(or)对应的规则模板,如下所示:
[0150][0151]
基于此,规则生成装置可以采用指令语句中的指令在目标平台对应的指令替换规
则模板的指令,从而得到翻译规则。以trans_rule(or)为例,规则生成装置可以采用指令orr替换规则模板中的inst,从而得到翻译规则。
[0152]
s706:规则生成装置接收用户输入的辅助信息。
[0153]
对于目标平台不存在对应指令的指令,例如是源平台独有的指令,规则生成装置可以通过用户干预方式生成对应的翻译规则。具体地,规则生成装置提供有gui或者cui,用户可以通过gui或cui输入辅助信息。
[0154]
其中,该辅助信息具体可以是与源平台的指令具有相同语义的函数。该函数可以是用户通过高级程序语言编写得到。
[0155]
s708:规则生成装置根据辅助信息生成源平台独有的指令对应的翻译规则。
[0156]
具体地,规则生成装置可以根据与源平台独有的指令具有相同语义的函数生成源平台独有的指令对应的翻译规则。
[0157]
以x86平台中读取时间标签计数器(rdtsc)指令为例,arm中没有对应的指令。用户可以通过高级语言的函数来实现相同的语义,如人工编写一个函数rdtsconarm()。然后,将该函数作为辅助信息提交至规则生成装置,规则生成装置根据该函数生成对应的翻译规则。
[0158]
为了使得本技术的技术方案更加清楚、易于理解,接下来结合具体示例对生成翻译规则的过程和代码翻译的过程进行详细说明。
[0159]
参见图8所示的生成翻译规则的方法的流程示意图,如图8所示,历史代码中包括多个指令语句,本实施例以其中3个指令语句进行示例说明。规则生成装置对上述3个指令语句进行特征分析,得到第一个指令语句的结构特征为,inst width:l,prefix:null,cc:null,变量属性特征为ir;第二个指令语句的结构特征为,inst width:l,prefix:lock,cc:null,变量属性特征为im;第三个指令语句的结构特征为,inst width:l,prefix:lock,cc:@ccnz,变量属性特征为im。
[0160]
规则生成装置识别影响语义的特征包括prefix、cc,规则生成装置可以根据该影响语义的特征确定能够生成的规则的规则索引为trans_rule(or)、trans_rule(lock or)、trans_rule(lock_or_nz)。然后规则生成装置可以根据对应的规则模板生成相应的规则。
[0161]
接着,请参见图9所示的代码翻译方法的流程示意图,如图9所示,第一代码包括3个指令语句,代码翻译装置100对3个指令语句分别进行特征分析,得到3个指令语句的结构特征和变量属性特征,代码翻译装置100可以根据语法规则识别出影响语义的特征,根据影响语义的特征确定与第一代码匹配的至少一个规则。
[0162]
在本实施例中,代码翻译装置100确定出3个翻译规则,分别为trans_rule(or)、trans_rule(lock or)、trans_rule(lock_or_nz)。然后代码翻译装置100根据第一代码中提取的特征填充上述翻译规则中的占位符,从而得到适用于目标平台的第二代码。
[0163]
上文结合图1至图9对本技术实施例提供的代码翻译方法进行了详细介绍,下面将结合附图对本技术实施例提供的装置、设备进行介绍。
[0164]
参见图10所示的代码翻译装置100的结构示意图,该装置100包括:
[0165]
通信模块102,用于获取第一代码,该第一代码基于源平台的平台依赖语言编写;
[0166]
确定模块104,用于确定与第一代码匹配的至少一个翻译规则,该翻译规则用于将一个平台的代码直接翻译为另一个平台的代码;
[0167]
翻译模块106,用于利用上述翻译规则对第一代码进行翻译,得到适用于目标平台的第二代码。
[0168]
在一些可能的实现方式中,通信模块102还用于:
[0169]
在确定与第一代码匹配的至少一个翻译规则之前,接收用户通过图形用户界面输入或修改的翻译规则。
[0170]
在一些可能的实现方式中,通信模块102还用于:
[0171]
在确定与第一代码匹配的至少一个翻译规则之前,接收用户输入的辅助信息;
[0172]
该装置100还包括:
[0173]
生成模块,用于根据辅助信息生成源平台独有的指令对应的翻译规则。
[0174]
在一些可能的实现方式中,通信模块102还用于:
[0175]
在确定与第一代码匹配的至少一个翻译规则之前,获取适用于源平台的历史代码,历史代码基于源平台的平台依赖语言编写;
[0176]
该装置100还包括:
[0177]
根据历史代码中影响语义的特征以及源平台的平台依赖语言和目标语言的映射关系,生成翻译规则。
[0178]
在一些可能的实现方式中,翻译规则以表的形式存储在规则库中。
[0179]
在一些可能的实现方式中,确定模块104具体用于:
[0180]
从第一代码中提取特征;
[0181]
从特征中识别影响语义的特征;
[0182]
根据影响语义的特征从规则库中确定至少一个翻译规则。
[0183]
在一些可能的实现方式中,该装置100还包括:
[0184]
显示模块,用于通过图形用户界面向用户呈现代码文件中的代码;
[0185]
通信模块具体用于:
[0186]
接收用户通过图形用户界面选择的第一代码。
[0187]
在一些可能的实现方式中,该装置100还包括:
[0188]
提示模块,用于对源平台和目标平台之间的差异进行提示。
[0189]
根据本技术实施例的代码翻译装置100可对应于执行本技术实施例中描述的方法,并且非代码翻译装置100的各个模块/单元的上述和其它操作和/或功能分别为了实现图3、图7所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
[0190]
本技术实施例还提供了一种计算设备1100。该计算设备1100可以是笔记本电脑、台式机等端侧设备,也可以是云环境或边缘环境中的计算机集群。该计算设备1100具体用于实现如图10所示实施例中代码翻译装置100的功能。
[0191]
图11提供了一种计算设备1100的结构示意图,如图11所示,计算设备1100包括总线1101、处理器1102、通信接口1103和存储器1104。处理器1102、存储器1104和通信接口1103之间通过总线1101通信。
[0192]
总线1101可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0193]
处理器1102可以为中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、微处理器(micro processor,mp)或者数字信号处理器(digital signal processor,dsp)等处理器中的任意一种或多种。
[0194]
通信接口1103用于与外部通信。例如,获取适用于源平台的第一代码,或者输出适用于目标平台的第二代码等等。
[0195]
存储器1104可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,ram)。存储器1104还可以包括非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,rom),快闪存储器,硬盘驱动器(hard disk drive,hdd)或固态驱动器(solid state drive,ssd)。
[0196]
存储器1104中存储有可执行代码,处理器1102执行该可执行代码以执行前述代码翻译方法。
[0197]
具体地,在实现图10所示实施例的情况下,且图10实施例中所描述的代码翻译装置100的各模块为通过软件实现的情况下,执行图10中的确定模块104、翻译模块106等模块功能所需的软件或程序代码存储在存储器1104中。通信模块102功能通过通信接口1103实现。
[0198]
具体地,通信接口1103获取第一代码,该第一代码基于源平台的平台依赖语言编写,通信接口1103将第一代码通过总线1101传输至处理器1102,处理器1102执行存储器1104中存储的各模块对应的程序代码,如确定模块104、翻译模块106对应的程序代码,以执行确定与第一代码匹配的至少一个翻译规则,利用翻译规则对第一代码进行翻译,得到适用于目标平台的第二代码的步骤。由此实现将适用于源平台的第一代码自动地跨平台翻译,得到适用于目标平台的第二代码。
[0199]
可选地,处理器1102还可以用于执行图3、图7所示实施例中其他可能的实现方式对应的方法步骤。
[0200]
本技术实施例中的耦合是装置、模块或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、模块或模块之间的信息交互。本技术实施例中不限定上述通信接口1103、处理器1102以及存储器1104之间的具体连接介质。比如存储器、处理器以及通信接口之间可以通过总线连接。所述总线可以分为地址总线、数据总线、控制总线等。
[0201]
基于以上实施例,本技术实施例还提供了一种计算机存储介质,该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现上述任意一个或多个实施例提供的端侧设备、云计算设备执行的方法。所述计算机存储介质可以包括:u盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
[0202]
基于以上实施例,本技术实施例还提供了一种芯片,该芯片包括处理器,用于实现上述实施例所涉及的端侧设备或云计算设备的功能,例如用于实现图1~图2中计算装置200、云环境300中的云计算设备所执行的方法。
[0203]
可选地,所述芯片还包括存储器,所述存储器,用于处理器所执行必要的程序指令和数据。该芯片,可以由芯片构成,也可以包含芯片和其他分立器件。
[0204]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实
施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0205]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0206]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0207]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0208]
显然,本领域的技术人员可以对本技术实施例进行各种改动和变型而不脱离本技术实施例的范围。这样,倘若本技术实施例的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献