CN108595184B - 代码转换方法、装置、计算机存储介质和代码转换终端 - Google Patents
代码转换方法、装置、计算机存储介质和代码转换终端 Download PDFInfo
- Publication number
- CN108595184B CN108595184B CN201810356545.4A CN201810356545A CN108595184B CN 108595184 B CN108595184 B CN 108595184B CN 201810356545 A CN201810356545 A CN 201810356545A CN 108595184 B CN108595184 B CN 108595184B
- Authority
- CN
- China
- Prior art keywords
- code
- converted
- syntax
- function
- built
- 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.)
- Active
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/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明公开了一种代码转换方法、代码转换装置、代码转换硬件装置、计算机存储介质和代码转换终端。其中,代码转换方法包括:获取待转换代码;其中,该待转换代码中的语法信息符合第一语法规则并适用于第一设备;获取第二语法规则;其中,该第二语法规则适配于第二设备;基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将该待转换代码转换为目标代码,以使该目标代码适用于第二设备。本发明实施例通过采取该技术方案解决了如何实现代码可兼容不同设备的技术问题,便于使得应用于不同设备的代码实现同步;而且避免了针对不同设备来开发与之对应的代码的步骤,并由此降低了代码的开发成本和维护成本。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种代码转换方法、装置、计算机存储介质和代码转换终端。
背景技术
目前,不同设备会为了适用于某个/些领域而在架构、配置等方面存在差异。这种差异使得适配于一种设备的代码无法应用于另一种设备。
举例来说,以台式设备和嵌入式设备为例,在嵌入式设备上开发图形渲染程序时,需要基于OpenGL ES(Open Graphics Library for Embedded Systems,适用于嵌入式系统的开放式图形库,是一种图形程序接口的三维图形应用程序接口的子集)定义适用于嵌入式设备的着色器代码;在台式设备上开发图形渲染程序时,需要基于OpenGL(OpenGraphics Library,开放式图形库,是一种图形应用程序接口)定义适用于台式设备的着色器代码。由于OpenGL ES是根据嵌入式设备的特点而在OpenGL的基础上进行了适应性的裁剪和适配;所以,适用于嵌入式设备的着色器代码无法在台式设备上运行;同理,适用于台式设备的着色器代码也无法在嵌入式设备上运行。
因此,提供一种可兼容于不同设备的代码是亟需解决的技术问题。
发明内容
本发明解决的技术问题是提供一种代码转换方法,以解决如何使得代码可兼容于不同设备的技术问题。此外,还提供一种代码转换装置、代码转换硬件装置、计算机可读存储介质和代码转换终端。
为了实现上述目的,根据本发明的一个方面,提供以下技术方案:
一种代码转换方法,其特征在于,包括:
获取待转换代码;其中,所述待转换代码中的语法信息符合第一语法规则并适用于第一设备;
获取第二语法规则;其中,所述第二语法规则适用于第二设备;
基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括版本声明信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中所述语法信息之间的所述差异包括所述版本声明信息,则将所述待转换代码中的版本声明信息映射为符合所述第二语法规则的版本声明信息,以将所述待转换代码转换为所述目标代码,以使得所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括内置变量声明信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量声明信息,则:
确定符合所述第二语法规则的内置变量声明信息的格式;
将所述待转换代码中的所述内置变量声明信息映射为符合所述格式的内置变量声明信息,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括内置变量;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量,则:
若所述待转换代码中存在所述内置变量而所述内置变量未由所述第二语法规则所定义,则将所述内置变量映射为符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;或者,
若所述待转换代码中不存在所述内置变量,则在所述待转换代码中构建符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括语法信息,所述语法信息包括内置函数及其对应的功能信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置函数,则:
若所述待转换代码中的所述内置函数未由所述第二语法规则所定义,则根据所述内置函数对应的功能信息并按照所述第二语法规则,构建符合所述第二语法规则的内置函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的函数名不符合所述第二语法规则,则将所述待转换代码中所述内置函数的函数名映射为符合所述第二语法规则的函数名,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的参数列表不符合所述第二语法规则,则将所述待转换代码中的所述内置函数的参数列表映射为符合所述第二语法规则的参数列表,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述构建符合所述第二语法规则的内置函数的步骤,包括:
基于所述第二语法规则,确定所述内置函数的声明信息和参数列表;
基于所述声明信息和所述参数列表,构建所述内置函数。
进一步地,包括所述内置函数、所述内置函数的函数名或所述内置函数的参数列表的所述差异通过以下方式确定:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出内置函数及其函数名和参数列表;
获取所述第二语法规则中的内置函数及其函数名和参数列表;
将从所述待转换代码中识别出的所述内置函数及其函数名和参数列表与所述第二语法规则中的内置函数及其函数名和参数列表进行比较;
根据比较结果,确定所述内置函数、所述内置函数的函数名或所述内置函数的参数列表为所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的所述差异。
进一步地,所述第一语法规则和所述第二语法规则分别包括拓展函数及其对应的功能信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异为所述拓展函数,则
若所述待转换代码存在所述拓展函数而所述拓展函数未被所述第二语法规则所定义,则将所述拓展函数映射为符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中不存在所述拓展函数,则根据所述拓展函数对应的功能信息,在待转换代码中构建符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,包括所述拓展函数的所述差异通过以下方式确定:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出拓展函数;
获取所述第二语法规则中的拓展函数;
将从所述待转换代码中识别出的拓展函数与所述第二语法规则中的拓展函数进行比较;
根据比较结果,确定所述拓展函数为所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异。
进一步地,在所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤之后,所述方法还包括:
对所述目标代码进行编译。
为了实现上述目的,根据本发明的另一个方面,还提供以下技术方案:
一种代码转换装置,包括:
第一获取模块,用于获取待转换代码;其中,所述待转换代码中的语法信息符合第一语法规则并适用于第一设备;
第二获取模块,用于获取第二语法规则;其中,所述第二语法规则适用于第二设备;
转换模块,用于基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括版本声明信息;
所述转换模块具体用于:
若基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中所述语法信息之间的所述差异包括所述版本声明信息,则将所述待转换代码中的版本声明信息映射为符合所述第二语法规则的版本声明信息,以将所述待转换代码转换为所述目标代码,以使得所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括内置变量声明信息;
所述转换模块具体用于:
若基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量声明信息,则:
确定符合所述第二语法规则的内置变量声明信息的格式;
将所述待转换代码中的所述内置变量声明信息映射为符合所述格式的内置变量声明信息,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括内置变量;
所述转换模块具体用于:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量,则:
若所述待转换代码中存在所述内置变量而所述内置变量未由所述第二语法规则所定义,则将所述内置变量映射为符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;或者,
若所述待转换代码中不存在所述内置变量,则在所述待转换代码中构建符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述第一语法规则和所述第二语法规则分别包括语法信息,所述语法信息包括内置函数及其对应的功能信息;
所述转换模块具体用于:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置函数,则:
若所述待转换代码中的所述内置函数未由所述第二语法规则所定义,则根据所述内置函数对应的功能信息并按照所述第二语法规则,构建符合所述第二语法规则的内置函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的函数名不符合所述第二语法规则,则将所述待转换代码中所述内置函数的函数名映射为符合所述第二语法规则的函数名,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的参数列表不符合所述第二语法规则,则将所述待转换代码中的所述内置函数的参数列表映射为符合所述第二语法规则的参数列表,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述转换模块还具体用于:
基于所述第二语法规则,确定所述内置函数的声明信息和参数列表;
基于所述声明信息和所述参数列表,构建所述内置函数。
进一步地,所述转换模块还具体用于:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出内置函数及其函数名和参数列表;
获取所述第二语法规则中的内置函数及其函数名和参数列表;
将从所述待转换代码中识别出的所述内置函数及其函数名和参数列表与所述第二语法规则中的内置函数及其函数名和参数列表进行比较;
根据比较结果,确定所述内置函数、所述内置函数的函数名或所述内置函数的参数列表为所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的所述差异。
进一步地,所述第一语法规则和所述第二语法规则分别包括拓展函数及其对应的功能信息;
所述转换模块具体用于:
如果所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异为所述拓展函数,则
若所述待转换代码存在所述拓展函数而所述拓展函数未被所述第二语法规则所定义,则将所述拓展函数映射为符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中不存在所述拓展函数,则根据所述拓展函数对应的功能信息,在待转换代码中构建符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
进一步地,所述转换模块还具体用于:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出拓展函数;
获取所述第二语法规则中的拓展函数;
将从所述待转换代码中识别出的拓展函数与所述第二语法规则中的拓展函数进行比较;
根据比较结果,确定所述拓展函数为所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异。
进一步地,所述装置还包括:
编译模块,用于对所述目标代码进行编译。
为了实现上述目的,根据本发明的又一个方面,还提供以下技术方案:
一种代码转换硬件装置,包括:
存储器,用于存储非暂时性计算机可读指令;以及
处理器,用于运行所述计算机可读指令,使得所述处理器执行时实现上述任一代码转换方法技术方案。
为了实现上述目的,根据本发明的又一个方面,还提供以下技术方案:
一种计算机可读存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时,使得所述计算机执行上述任一代码转换方法技术方案。
为了实现上述目的,根据本发明的又一个方面,还提供以下技术方案:
一种代码转换终端,包括上述任一代码转换装置技术方案。
本发明实施例提供一种代码转换方法、代码转换装置、代码转换硬件装置、计算机存储介质和代码转换终端。其中,代码转换方法包括:获取待转换代码;其中,该待转换代码中的语法信息符合第一语法规则并适用于第一设备;获取第二语法规则;其中,该第二语法规则适配于第二设备;基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将该待转换代码转换为目标代码,以使该目标代码适用于第二设备。
本实施例通过基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将适用于第一设备的待转换代码转换为适用于第二设备的目标代码,由此,在开发诸如图形渲染程序时,可以使得适用于第一设备的代码也可以应用于第二设备,例如,假设待转换代码适用于基于OpenGL ES的嵌入式设备,目标代码适用于基于OpenGL的台式设备;通过本实施例提供的代码转换方法,可以使得待转换代码也可以应用于台式设备,避免了待转换代码在台式设备上编译时导致的错误,从而实现了代码对不同设备的兼容性,便于使得应用于不同设备的代码实现同步;而且避免了针对不同设备来开发与之对应的代码的步骤,并由此降低了代码的开发成本和维护成本。
上述说明仅是本发明技术方案的概述,为了能更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1为根据本发明一个实施例的代码转换方法的流程示意图;
图2为根据本发明一个实施例的代码转换装置的结构示意图;
图3为根据本发明另一个实施例的代码转换装置的结构示意图;
图4为根据本发明一个实施例的代码转换硬件装置的结构示意图;
图5为根据本发明一个实施例的计算机可读存储介质的结构示意图;
图6为根据本发明一个实施例的代码转换终端的结构示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本发明,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
目前,OpenGL ES适配于嵌入式设备;OpenGL(Open Graphics Library,开放式图形库,是一种图形应用程序接口)适配于台式计算设备;由此,它们各自的着色器在语法上存在差异。这会导致例如基于OpenGL ES的着色器在OpenGL上进行编译时会出现错误。可见,现有代码对不同设备不具有兼容性。
为了解决如何使得代码可兼容于不同设备的技术问题,本发明实施例提供一种代码转换方法。如图1所示,该代码转换方法主要包括步骤S1至步骤S3。其中:
步骤S1:获取待转换代码;其中,该待转换代码中的语法信息符合第一语法规则并适用于第一设备。
步骤S2:获取第二语法规则;其中,该第二语法规则适配于第二设备。
步骤S3:基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将该待转换代码转换为目标代码,以使该目标代码适用于第二设备。
其中,待接收代码、目标代码包括但不限于基于OpenGL ES的shader(着色器)代码、基于OpenGL的shader代码。具体来说,本实施例可以将基于OpenGL ES的shader代码转换为基于OpenGL的shader代码,也可以将基于OpenGL的shader代码转换为基于OpenGL ES的shader代码,本发明对此不作限定。
其中,第一语法规则、第二语法规则例如可以为基于OpenGL ES的语法规则或基于OpenGL的语法规则等。第一语法规则可以作为待转换代码的语法规则;第二语法规则可以作为目标代码的语法规则。
其中,第一设备可以为嵌入式设备,例如,智能手机、掌上电脑、个人数字助理。
其中,第二设备可以为台式设备,例如,台式计算机、膝上型计算机、工控机。
在本实施例中,基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括但不限于以下任一项或多项:版本声明信息、数据精度声明、内置变量、内置函数、拓展函数。
在现有技术中,基于OpenGL ES的着色器代码无法在OpenGL上进行编译,从而无法应用于台式设备上;同理,基于OpenGL的着色器代码无法在OpenGL ES上进行编译,从而无法应用于嵌入式设备。为此,现有技术分别针对OpenGL ES和OpenGL,定义了着色器代码,从而提高了开发着色器代码的要求,增大了开发成本;而且当需要同时对基于OpenGL ES的着色器代码和基于OpenGL的着色器代码进行修改时,无法确保两者的同步;同时还因为基于OpenGL ES的着色器代码和基于OpenGL的着色器代码中存在大量相同的代码而存在代码冗余的缺陷。
针对上述缺陷,本实施例通过基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将适用于第一设备的待转换代码转换为适用于第二设备的目标代码,由此,在开发诸如图形渲染程序时,可以使得适用于第一设备的代码也可以应用于第二设备,例如,假设待转换代码适用于基于OpenGL ES的嵌入式设备,目标代码适用于基于OpenGL的台式设备;通过本实施例提供的代码转换方法,可以使得待转换代码也可以应用于台式设备,避免了待转换代码在台式设备上编译时导致的错误,从而实现了代码对不同设备的兼容性,便于使得应用于不同设备的代码实现同步;而且避免了针对不同设备来开发与之对应的代码的步骤,并由此降低了代码的开发成本和维护成本。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括版本声明信息;步骤S3具体包括:
步骤S301:如果基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括版本声明信息,则将待转换代码中的版本声明信息映射为符合第二语法规则的版本声明信息,以将该待转换代码转换为目标代码,以使得该目标代码适用于该第二设备。
举例来说,以将基于OpenGL ES的shader代码运行于基于OpenGL的计算机为例,如果基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括版本声明信息,那么,通过本实施例提供的上述技术方案,将基于OpenGL ES的shader代码中的版本声明信息映射为符合OpenGL语法规则的版本声明信息,从而将基于OpenGL ES的shader代码转换为基于OpenGL的shader代码,进而使转换后的代码能够适用于基于OpenGL的计算机;由此实现了代码可兼容于不同设备的技术效果。
本实施例通过将待转换代码中的版本声明信息映射为符合第二语法规则的版本声明信息,以将该待转换代码转换为目标代码,从而使得该目标代码适用于第二设备;由此使得待转换代码既可以适用于第一设备,也可以适用于第二设备,实现了代码可兼容于不同设备的技术效果。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括内置变量声明信息;步骤S3还具体包括:如果基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括内置变量声明信息,则可执行以下步骤:
步骤S302:确定符合第二语法规则的内置变量声明信息的格式;
步骤S303:将待转换代码中的内置变量声明信息映射为符合该格式的内置变量声明信息,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备。
再举例来说,本例以嵌入式设备为手机、台式设备为台式电脑、内置变量声明信息为变量数据精度声明信息为例进行详细说明。其中,基于手机的OpenGL ES要求与其适配的着色器代码在声明变量时,必须声明该变量的数据精度;而基于台式电脑的OpenGL要求与其适配的着色器代码不许声明变量的数据精度(默认采用最高数据精度)。其中,“不许采用声明数据精度”可以用空格来映射。具体地,将基于OpenGL ES的着色器代码中的变量数据精度声明信息替换为空格,从而实现将待转换代码中的内置变量声明信息映射为目标代码中的内置变量的声明信息;由此使得shader代码既可以适用于嵌入式设备,也可以适用于台式电脑,实现了代码可兼容不同设备的技术效果。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括内置变量;步骤S3还具体包括:如果基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括内置变量,则可执行以下步骤:
步骤S304:若待转换代码中存在该内置变量而该内置变量未由第二语法规则所定义,则将该内置变量映射为符合第二语法规则的内置变量,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备;或者,
步骤S305:若待转换代码中不存在该内置变量,则在待转换代码中构建符合第二语法规则的内置变量,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备。
其中,内置变量由第一语法规则或第二语法规则定义。
其中,针对待转换代码中存在该内置变量而该内置变量未由第二语法规则所定义的情况,也就是,第一语法规则中定义了该内置变量且待转换代码中存在该内置变量,而第二语法规则中未定义该内置变量且目标代码中未使用该内置变量的情况。举例来说,基于台式电脑的OpenGL会定义很多内置变量,其中有些变量会不存在于基于嵌入式设备的OpenGL ES,从而造成应用于台式设备的着色器代码无法应用于嵌入式设备。通过本实施例提供的技术方案,可以将OpenGL shader中的诸如g l_EXE等内置变量映射为符合OpenGLES语法规则的标准内置变量,从而使得OpenGL shader可以适用于嵌入式设备,由此实现了代码的兼容性。
本实施例采取上述技术方案,通过对待转换代码中内置变量符号的转换或重新构建,实现了代码转换,使得诸如应用于台设备的着色器代码也可以应用于嵌入式设备,从而实现了代码兼容性。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括语法信息,该语法信息包括内置函数及其对应的功能信息;步骤S3还具体包括:如果基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括内置函数,则执行以下步骤:
步骤S306:若待转换代码中的内置函数未由第二语法规则所定义,则根据该内置函数对应的功能信息并按照第二语法规则,构建符合第二语法规则的内置函数,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备;
或者,
步骤S307:若待转换代码中的内置函数的函数名不符合第二语法规则,则将待转换代码中该内置函数的函数名映射为符合第二语法规则的函数名,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备;
或者,
步骤S308:若待转换代码中的内置函数的参数列表不符合第二语法规则,则将待转换代码中的内置函数的参数列表映射为符合第二语法规则的参数列表,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备。
其中,内置函数及其功能信息由第一语法规则或第二语法规则定义。
其中,内置函数的构建可以通过该内置函数所对应的功能信息来构建。具体地,可以通过以下方式构建内置函数:
步骤Sa1:基于第二语法规则,确定该内置函数的声明信息和参数列表;
步骤Sa2:基于声明信息和参数列表,构建该内置函数。
其中,参数列表用于指示参数及其类型。
其中,待转换代码中的内置函数未由第二语法规则所定义的情况例如:应用于嵌入式设备的着色器代码中的内置函数未由第二语法规则所定义,而无法应用于台式设备,或者,应用于台式设备的着色器代码中的内置函数未由第一语法规则所定义,而无法应用于嵌入式设备。举例来说,在OpenGL ES shader中使用的诸如texture2DEXT等内置函数在OpenGL shader中为标准函数,但应用于嵌入式设备时可能发生编译错误。
上述实施例通过对待转换代码中内置函数符号的转换或重新构建,使得待转换代码符合第二语法规则,从而实现代码转换,进而使得转换后的目标代码适用于第二设备,由此实现了代码可兼容于不同设备的技术效果。
在一个可选的实施例中,基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的、包括内置函数、内置函数的函数名或内置函数的参数列表的差异可以通过以下方式确定:
步骤S309:对待转换代码进行语义分析和语法分析,得到抽象语法树;
具体地,本步骤可以通过对待转换代码进行逐行逐列地扫描并进行语义分析和语法分析来实现。
步骤S310:从该抽象语法树中识别出内置函数及其函数名和参数列表;
步骤S311:获取第二语法规则中的内置函数及其函数名和参数列表;
步骤S312:将从待转换代码中识别出的内置函数及其函数名和参数列表与第二语法规则中的内置函数及其函数名和参数列表进行比较;
步骤S313:根据比较结果,确定内置函数、内置函数的函数名或内置函数的参数列表为待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括拓展函数及其对应的功能信息;步骤S3还具体包括:如果待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异为拓展函数,则可执行以下步骤:
步骤S314:若待转换代码存在该拓展函数而该拓展函数未被第二语法规则所定义,则将该拓展函数映射为符合第二语法规则的拓展函数,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备;
或者,
步骤S315:若待转换代码中不存在该拓展函数,则根据该拓展函数对应的功能信息,在待转换代码中构建符合第二语法规则的拓展函数,以将该待转换代码转换为目标代码,以使该目标代码适用于第二设备。
举例来说,GL_EXT、GL_OES等拓展函数是OpenGL shader的标准拓展函数,通过采取本实施例的上述技术方案,进行代码转换,使之符合OpenGLES的语法规则,从而能够适用于嵌入式设备,由此实现了代码对嵌入式设备和台式设备兼容性的技术效果。
本实施例通过采取上述技术方案,对待转换代码中拓展函数符号进行转换或重新构建,实现了代码转换,使得代码既可以适用于第一设备(例如,嵌入式设备),也可以适用于第二设备(例如,台式设备),从而实现了代码可兼容于不同设备的技术效果。
在一个可选的实施例中,基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的、包括拓展函数的差异可以通过以下方式确定:
步骤S316:对待转换代码进行语义分析和语法分析,得到抽象语法树;
具体地,可以对待转换代码进行逐行逐列地扫描并进行语义分析和语法分析。
步骤S317:从该抽象语法树中识别出拓展函数;
例如,可以通过“#dextent i on”对拓展函数进行识别。
步骤S318:获取第二语法规则中的拓展函数;
步骤S319:将从待转换代码中识别出的拓展函数与第二语法规则中的拓展函数进行比较;
步骤S320:根据比较结果,确定该拓展函数为待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异。
在一个可选的实施例中,在步骤S3之后,该代码转换方法还包括:
对目标代码进行编译。
本实施例通过对目标代码进行编译,以进一步确保目标代码能够运行于第二设备。例如,如果第二设备为台式电脑,则目标代码可以运行于该台式电脑。
在上文中,虽然按照上述的顺序描述了代码转换方法实施例中的各个步骤,本领域技术人员应清楚,本发明实施例中的步骤并不必然按照上述顺序执行,其也可以倒序、并行、交叉等其他顺序执行,而且,在上述步骤的基础上,本领域技术人员也可以再加入其他步骤,这些明显变型或等同替换的方式也应包含在本发明的保护范围之内,在此不再赘述。
下面为本发明装置实施例,本发明装置实施例用于执行本发明方法实施例实现的步骤,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明方法实施例。
为了解决如何使得代码可兼容于不同设备的技术问题,本发明实施例还提供一种代码转换装置。如图2所示,该装置主要包括第一获取模块21、第二获取模块22和转换模块23。其中,第一获取模块21用于获取待转换代码;其中,待转换代码中的语法信息符合第一语法规则并适用于第一设备。第二获取模块22用于获取第二语法规则;其中,第二语法规则适用于第二设备。转换模块23用于基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将待转换代码转换为目标代码,以使目标代码适用于第二设备。
其中,待接收代码、目标代码包括但不限于基于OpenGL ES的shader(着色器)代码、基于OpenGL的shader代码。具体来说,本实施例可以将基于OpenGL ES的shader代码转换为基于OpenGL的shader代码,也可以将基于OpenGL的shader代码转换为基于OpenGL ES的shader代码,本发明对此不作限定。
其中,第一语法规则、第二语法规则例如可以为基于OpenGL ES的语法规则或基于OpenGL的语法规则等。第一语法规则可以作为待转换代码的语法规则;第二语法规则可以作为目标代码的语法规则。
其中,第一设备可以为嵌入式设备,例如,智能手机、掌上电脑、个人数字助理。
其中,第二设备可以为台式设备,例如,台式计算机、膝上型计算机、工控机。
在本实施例中,基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括但不限于以下任一项或多项:版本声明信息、数据精度声明、内置变量、内置函数、拓展函数。
本实施例分别通过第一获取模块21、第二获取模块22,获取待转换代码和适用于第二设备的第二语法规则;然后,利用转换模块23,通过基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将适用于第一设备的待转换代码转换为适用于第二设备的目标代码,由此,在开发诸如图形渲染程序时,可以使得适用于第一设备的代码也可以应用于第二设备,例如,假设待转换代码适用于基于OpenGL ES的嵌入式设备,目标代码适用于基于OpenGL的台式设备;通过本实施例提供的代码转换方法,可以使得待转换代码也可以应用于台式设备,避免了待转换代码在台式设备上编译时导致的错误,从而实现了代码对不同设备的兼容性,便于使得应用于不同设备的代码实现同步;而且避免了针对不同设备来开发与之对应的代码的步骤,并由此降低了代码的开发成本和维护成本。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括版本声明信息;转换模块23具体用于:
若基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括版本声明信息,则将待转换代码中的版本声明信息映射为符合第二语法规则的版本声明信息,以将待转换代码转换为目标代码,以使得目标代码适用于第二设备。
本实施例通过转换模块23将待转换代码中的版本声明信息映射为符合第二语法规则的版本声明信息,以将该待转换代码转换为目标代码,从而使得该目标代码适用于第二设备;由此使得待转换代码既可以适用于第一设备,也可以适用于第二设备,实现了代码可兼容于不同设备的技术效果。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括内置变量声明信息;转换模块23具体用于:
若基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括内置变量声明信息,则:
确定符合第二语法规则的内置变量声明信息的格式;
将待转换代码中的内置变量声明信息映射为符合格式的内置变量声明信息,以将待转换代码转换为目标代码,以使目标代码适用于第二设备。
本实施例通过转换模块23可以实现将待转换代码中的内置变量声明信息映射为目标代码中的内置变量的声明信息;由此使得shader代码既可以适用于嵌入式设备,也可以适用于台式电脑,从而实现了代码可兼容不同设备的技术效果。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括内置变量;转换模块23具体用于:
如果基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括内置变量,则:
若待转换代码中存在内置变量而内置变量未由第二语法规则所定义,则将内置变量映射为符合第二语法规则的内置变量,以将待转换代码转换为目标代码,以使目标代码适用于第二设备;或者,
若待转换代码中不存在内置变量,则在待转换代码中构建符合第二语法规则的内置变量,以将待转换代码转换为目标代码,以使目标代码适用于第二设备。
其中,内置变量由第一语法规则或第二语法规则定义。
其中,针对待转换代码中存在该内置变量而该内置变量未由第二语法规则所定义的情况,也就是,第一语法规则中定义了该内置变量且待转换代码中存在该内置变量,而第二语法规则中未定义该内置变量且目标代码中未使用该内置变量的情况。举例来说,基于台式电脑的OpenGL会定义很多内置变量,其中有些变量会不存在于基于嵌入式设备的OpenGL ES,从而造成应用于台式设备的着色器代码无法应用于嵌入式设备。通过本实施例提供的技术方案,可以将OpenGL shader中的诸如g l_EXE等内置变量映射为符合OpenGLES语法规则的标准内置变量,从而使得OpenGL shader可以适用于嵌入式设备,由此实现了代码的兼容性。
本实施例采取上述技术方案,通过转换模块23对待转换代码中内置变量符号的转换或重新构建,实现了代码转换,使得诸如应用于台设备的着色器代码也可以应用于嵌入式设备,从而实现了代码兼容性。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括语法信息,语法信息包括内置函数及其对应的功能信息;转换模块23具体用于:
如果基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异包括内置函数,则:
若待转换代码中的内置函数未由第二语法规则所定义,则根据内置函数对应的功能信息并按照第二语法规则,构建符合第二语法规则的内置函数,以将待转换代码转换为目标代码,以使目标代码适用于第二设备;
或者,
若待转换代码中的内置函数的函数名不符合第二语法规则,则将待转换代码中内置函数的函数名映射为符合第二语法规则的函数名,以将待转换代码转换为目标代码,以使目标代码适用于第二设备;
或者,
若待转换代码中的内置函数的参数列表不符合第二语法规则,则将待转换代码中的内置函数的参数列表映射为符合第二语法规则的参数列表,以将待转换代码转换为目标代码,以使目标代码适用于第二设备。
其中,内置函数及其功能信息由第一语法规则或第二语法规则定义。
其中,待转换代码中的内置函数未由第二语法规则所定义的情况例如:应用于嵌入式设备的着色器代码中的内置函数未由第二语法规则所定义,而无法应用于台式设备,或者,应用于台式设备的着色器代码中的内置函数未由第一语法规则所定义,而无法应用于嵌入式设备。举例来说,在OpenGL ES shader中使用的诸如texture2DEXT等内置函数在OpenGL shader中为标准函数,但应用于嵌入式设备时可能发生编译错误。
在一个可选的实施例中,转换模块23还具体用于:
基于第二语法规则,确定内置函数的声明信息和参数列表;
基于声明信息和参数列表,构建内置函数。
上述实施例通过转换模块23对待转换代码中内置函数符号的转换或重新构建,使得待转换代码符合第二语法规则,从而实现代码转换,进而使得转换后的目标代码适用于第二设备,由此实现了代码可兼容于不同设备的技术效果。
在一个可选的实施例中,转换模块23还具体用于:
对待转换代码进行语义分析和语法分析,得到抽象语法树;
从抽象语法树中识别出内置函数及其函数名和参数列表;
获取第二语法规则中的内置函数及其函数名和参数列表;
将从待转换代码中识别出的内置函数及其函数名和参数列表与第二语法规则中的内置函数及其函数名和参数列表进行比较;
根据比较结果,确定内置函数、内置函数的函数名或内置函数的参数列表为待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异。
本实施例通过转换模块23可以确定内置函数、内置函数的函数名或内置函数的参数列表为待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,从而基于该差异进行代码转换,由此实现代码兼容性的技术效果。
在一个可选的实施例中,第一语法规则和第二语法规则分别包括拓展函数及其对应的功能信息;转换模块23具体用于:
如果待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异为拓展函数,则
若待转换代码存在拓展函数而拓展函数未被第二语法规则所定义,则将拓展函数映射为符合第二语法规则的拓展函数,以将待转换代码转换为目标代码,以使目标代码适用于第二设备;
或者,
若待转换代码中不存在拓展函数,则根据拓展函数对应的功能信息,在待转换代码中构建符合第二语法规则的拓展函数,以将待转换代码转换为目标代码,以使目标代码适用于第二设备。
示例性地,GL_EXT、GL_OES等拓展函数是OpenGL shader的标准拓展函数,通过采取本实施例的上述技术方案,进行代码转换,使之符合OpenGLES的语法规则,从而能够适用于嵌入式设备,由此实现了代码对嵌入式设备和台式设备兼容性的技术效果。
本实施例通过采取上述技术方案,利用转换模块23对待转换代码中拓展函数符号进行转换或重新构建,实现了代码转换,使得代码既可以适用于第一设备(例如,嵌入式设备),也可以适用于第二设备(例如,台式设备),从而实现了代码可兼容于不同设备的技术效果。
在一个可选的实施例中,转换模块23还具体用于:
对待转换代码进行语义分析和语法分析,得到抽象语法树;
从抽象语法树中识别出拓展函数;
获取第二语法规则中的拓展函数;
将从待转换代码中识别出的拓展函数与第二语法规则中的拓展函数进行比较;
根据比较结果,确定拓展函数为待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异。
本实施例通过转换模块23可以确定基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的、包括拓展函数的差异,从而基于该差异进行代码转换,由此实现代码兼容性的技术效果。
在一个可选的实施例中,如图3所示,该代码转换装置还包括编译模块24。其中,
编译模块24,用于对目标代码进行编译。
本实施例通过编译模块24对目标代码进行编译,以进一步确保目标代码能够运行于第二设备。例如,如果第二设备为台式电脑,则目标代码可以运行于该台式电脑。
图4是图示根据本公开的实施例的代码转换硬件装置的硬件框图。如图4所示,根据本公开实施例的代码转换硬件装置40包括存储器41和处理器42。
该存储器41用于存储非暂时性计算机可读指令。具体地,存储器41可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。
该处理器42可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制代码转换硬件装置40中的其它组件以执行期望的功能。在本公开的一个实施例中,该处理器42用于运行该存储器41中存储的该计算机可读指令,使得该代码转换硬件装置40执行前述的本公开各实施例的代码转换方法的全部或部分步骤。
本领域技术人员应能理解,为了解决如何获得良好用户体验效果的技术问题,本实施例中也可以包括诸如通信总线、接口等公知的结构,这些公知的结构也应包含在本发明的保护范围之内。
有关本实施例的详细说明可以参考前述各实施例中的相应说明,在此不再赘述。
本实施例通过处理器42执行存储在存储器41上的非暂时性计算机可读指令,基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将适用于第一设备的待转换代码转换为适用于第二设备的目标代码,由此,在开发诸如图形渲染程序时,可以使得适用于第一设备的代码也可以应用于第二设备,例如,假设待转换代码适用于基于OpenGL ES的嵌入式设备,目标代码适用于基于OpenGL的台式设备;通过本实施例提供的代码转换方法,可以使得待转换代码也可以应用于台式设备,避免了待转换代码在台式设备上编译时导致的错误,从而实现了代码对不同设备的兼容性,便于使得应用于不同设备的代码实现同步;而且避免了针对不同设备来开发与之对应的代码的步骤,并由此降低了代码的开发成本和维护成本。
图5是图示根据本公开的实施例的计算机可读存储介质的示意图。如图5所示,根据本公开实施例的计算机可读存储介质50,其上存储有非暂时性计算机可读指令51。当该非暂时性计算机可读指令51由处理器运行时,执行前述的本公开各实施例的代码转换方法的全部或部分步骤。
上述计算机可读存储介质50包括但不限于:光存储介质(例如:CD-ROM和DVD)、磁光存储介质(例如:MO)、磁存储介质(例如:磁带或移动硬盘)、具有内置的可重写非易失性存储器的媒体(例如:存储卡)和具有内置ROM的媒体(例如:ROM盒)。
有关本实施例的详细说明可以参考前述各实施例中的相应说明,在此不再赘述。
本实施例通过处理器执行计算机可读存储介质50上存储的非暂时性计算机可读指令51时,基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将适用于第一设备的待转换代码转换为适用于第二设备的目标代码,由此,在开发诸如图形渲染程序时,可以使得适用于第一设备的代码也可以应用于第二设备,例如,假设待转换代码适用于基于OpenGL ES的嵌入式设备,目标代码适用于基于OpenGL的台式设备;通过本实施例提供的代码转换方法,可以使得待转换代码也可以应用于台式设备,避免了待转换代码在台式设备上编译时导致的错误,从而实现了代码对不同设备的兼容性,便于使得应用于不同设备的代码实现同步;而且避免了针对不同设备来开发与之对应的代码的步骤,并由此降低了代码的开发成本和维护成本。
图6是图示根据本公开实施例的终端的硬件结构示意图。如图6所示,该代码转换终端60包括上述代码转换装置实施例。
该终端可以以各种形式来实施,本公开中的终端可以包括但不限于诸如移动电话、智能电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、导航装置、车载终端设备、车载显示终端、车载电子后视镜等等的移动终端设备以及诸如数字TV、台式计算机等等的固定终端设备。
作为等同替换的实施方式,该终端还可以包括其他组件。如图6所示,该代码转换终端60可以包括电源单元61、无线通信单元62、A/V(音频/视频)输入单元63、用户输入单元64、感测单元65、接口单元66、控制器67、输出单元68和存储器69等等。图6示出了具有各种组件的终端,但是应理解的是,并不要求实施所有示出的组件,也可以替代地实施更多或更少的组件。
其中,无线通信单元62允许终端60与无线通信系统或网络之间的无线电通信。A/V输入单元63用于接收音频或视频信号。用户输入单元64可以根据用户输入的命令生成键输入数据以控制终端设备的各种操作。感测单元65检测终端60的当前状态、终端60的位置、用户对于终端60的触摸输入的有无、终端60的取向、终端60的加速或减速移动和方向等等,并且生成用于控制终端60的操作的命令或信号。接口单元66用作至少一个外部装置与终端60连接可以通过的接口。输出单元68被构造为以视觉、音频和/或触觉方式提供输出信号。存储器69可以存储由控制器67执行的处理和控制操作的软件程序等等,或者可以暂时地存储己经输出或将要输出的数据。存储器69可以包括至少一种类型的存储介质。而且,终端60可以与通过网络连接执行存储器69的存储功能的网络存储装置协作。控制器67通常控制终端设备的总体操作。另外,控制器67可以包括用于再现或回放多媒体数据的多媒体模块。控制器67可以执行模式识别处理,以将在触摸屏上执行的手写输入或者图片绘制输入识别为字符或图像。电源单元61在控制器67的控制下接收外部电力或内部电力并且提供操作各元件和组件所需的适当的电力。
本公开提出的代码转换方法的各种实施方式可以以使用例如计算机软件、硬件或其任何组合的计算机可读介质来实施。对于硬件实施,本公开提出的代码转换方法的各种实施方式可以通过使用特定用途集成电路(AS I C)、数字信号处理器(DSP)、数字信号处理装置(DSPD)、可编程逻辑装置(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器、被设计为执行这里描述的功能的电子单元中的至少一种来实施,在一些情况下,本公开提出的代码转换方法的各种实施方式可以在控制器67中实施。对于软件实施,本公开提出的代码转换方法的各种实施方式可以与允许执行至少一种功能或操作的单独的软件模块来实施。软件代码可以由以任何适当的编程语言编写的软件应用程序(或程序)来实施,软件代码可以存储在存储器69中并且由控制器67执行。
有关本实施例的详细说明可以参考前述各实施例中的相应说明,在此不再赘述。
本实施例提供的代码转换终端基于待转换代码中所涉及到的语法信息与第二语法规则中语法信息之间的差异,将适用于第一设备的待转换代码转换为适用于第二设备的目标代码,由此,在开发诸如图形渲染程序时,可以使得适用于第一设备的代码也可以应用于第二设备,例如,假设待转换代码适用于基于OpenGL ES的嵌入式设备,目标代码适用于基于OpenGL的台式设备;通过本实施例提供的代码转换方法,可以使得待转换代码也可以应用于台式设备,避免了待转换代码在台式设备上编译时导致的错误,从而实现了代码对不同设备的兼容性,便于使得应用于不同设备的代码实现同步;而且避免了针对不同设备来开发与之对应的代码的步骤,并由此降低了代码的开发成本和维护成本。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
另外,如在此使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“A、B或C的至少一个”的列举意味着A或B或C,或AB或AC或BC,或ABC(即A和B和C)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。
还需要指出的是,在本公开的系统和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
可以不脱离由所附权利要求定义的教导的技术而进行对在此所述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上所述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此所述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (23)
1.一种代码转换方法,其特征在于,包括:
获取待转换代码;其中,所述待转换代码中的语法信息符合第一语法规则并适用于第一设备;
获取第二语法规则;其中,所述第二语法规则适用于第二设备;
基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,所述第二语法规则作为所述目标代码的语法规则,以使所述目标代码适用于所述第二设备;
其中,所述待转换代码、所述目标代码为基于开放式图形库的着色器代码或适用于嵌入式系统的开放式图形库的着色器代码;所述待转换代码与所述目标代码不同;
所述第一设备为嵌入式设备,所述第二设备为台式设备,或者,所述第一设备为台式设备,所述第二设备为嵌入式设备。
2.根据权利要求1所述的方法,其特征在于,所述第一语法规则和所述第二语法规则分别包括版本声明信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中所述语法信息之间的所述差异包括所述版本声明信息,则将所述待转换代码中的版本声明信息映射为符合所述第二语法规则的版本声明信息,以将所述待转换代码转换为所述目标代码,以使得所述目标代码适用于所述第二设备。
3.根据权利要求1所述的方法,其特征在于,所述第一语法规则和所述第二语法规则分别包括内置变量声明信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量声明信息,则:
确定符合所述第二语法规则的内置变量声明信息的格式;
将所述待转换代码中的所述内置变量声明信息映射为符合所述格式的内置变量声明信息,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
4.根据权利要求1所述的方法,其特征在于,所述第一语法规则和所述第二语法规则分别包括内置变量;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量,则:
若所述待转换代码中存在所述内置变量而所述内置变量未由所述第二语法规则所定义,则将所述内置变量映射为符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;或者,
若所述待转换代码中不存在所述内置变量,则在所述待转换代码中构建符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
5.根据权利要求1所述的方法,其特征在于,所述第一语法规则和所述第二语法规则分别包括语法信息,所述语法信息包括内置函数及其对应的功能信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置函数,则:
若所述待转换代码中的所述内置函数未由所述第二语法规则所定义,则根据所述内置函数对应的功能信息并按照所述第二语法规则,构建符合所述第二语法规则的内置函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的函数名不符合所述第二语法规则,则将所述待转换代码中所述内置函数的函数名映射为符合所述第二语法规则的函数名,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的参数列表不符合所述第二语法规则,则将所述待转换代码中的所述内置函数的参数列表映射为符合所述第二语法规则的参数列表,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
6.根据权利要求5所述的方法,其特征在于,所述构建符合所述第二语法规则的内置函数的步骤,包括:
基于所述第二语法规则,确定所述内置函数的声明信息和参数列表;
基于所述声明信息和所述参数列表,构建所述内置函数。
7.根据权利要求5所述的方法,其特征在于,包括所述内置函数、所述内置函数的函数名或所述内置函数的参数列表的所述差异通过以下方式确定:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出内置函数及其函数名和参数列表;
获取所述第二语法规则中的内置函数及其函数名和参数列表;
将从所述待转换代码中识别出的所述内置函数及其函数名和参数列表与所述第二语法规则中的内置函数及其函数名和参数列表进行比较;
根据比较结果,确定所述内置函数、所述内置函数的函数名或所述内置函数的参数列表为所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的所述差异。
8.根据权利要求1所述的方法,其特征在于,所述第一语法规则和所述第二语法规则分别包括拓展函数及其对应的功能信息;
所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤,包括:
如果所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异为所述拓展函数,则
若所述待转换代码存在所述拓展函数而所述拓展函数未被所述第二语法规则所定义,则将所述拓展函数映射为符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中不存在所述拓展函数,则根据所述拓展函数对应的功能信息,在待转换代码中构建符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
9.根据权利要求8所述的方法,其特征在于,包括所述拓展函数的所述差异通过以下方式确定:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出拓展函数;
获取所述第二语法规则中的拓展函数;
将从所述待转换代码中识别出的拓展函数与所述第二语法规则中的拓展函数进行比较;
根据比较结果,确定所述拓展函数为所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异。
10.根据权利要求1所述的方法,其特征在于,在所述基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,以使所述目标代码适用于所述第二设备的步骤之后,所述方法还包括:
对所述目标代码进行编译。
11.一种代码转换装置,其特征在于,包括:
第一获取模块,用于获取待转换代码;其中,所述待转换代码中的语法信息符合第一语法规则并适用于第一设备;所述待转换代码为基于开放式图形库的着色器代码或适用于嵌入式系统的开放式图形库的着色器代码;
第二获取模块,用于获取第二语法规则;其中,所述第二语法规则适用于第二设备;
转换模块,用于基于所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的差异,将所述待转换代码转换为目标代码,所述第二语法规则作为所述目标代码的语法规则,以使所述目标代码适用于所述第二设备;其中,所述目标代码为基于开放式图形库的着色器代码或适用于嵌入式系统的开放式图形库的着色器代码;所述待转换代码与所述目标代码不同;
所述第一设备为嵌入式设备,所述第二设备为台式设备,或者,所述第一设备为台式设备,所述第二设备为嵌入式设备。
12.根据权利要求11所述的装置,其特征在于,所述第一语法规则和所述第二语法规则分别包括版本声明信息;
所述转换模块具体用于:
若基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中所述语法信息之间的所述差异包括所述版本声明信息,则将所述待转换代码中的版本声明信息映射为符合所述第二语法规则的版本声明信息,以将所述待转换代码转换为所述目标代码,以使得所述目标代码适用于所述第二设备。
13.根据权利要求11所述的装置,其特征在于,所述第一语法规则和所述第二语法规则分别包括内置变量声明信息;
所述转换模块具体用于:
若基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量声明信息,则:
确定符合所述第二语法规则的内置变量声明信息的格式;
将所述待转换代码中的所述内置变量声明信息映射为符合所述格式的内置变量声明信息,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
14.根据权利要求11所述的装置,其特征在于,所述第一语法规则和所述第二语法规则分别包括内置变量;
所述转换模块具体用于:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置变量,则:
若所述待转换代码中存在所述内置变量而所述内置变量未由所述第二语法规则所定义,则将所述内置变量映射为符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;或者,
若所述待转换代码中不存在所述内置变量,则在所述待转换代码中构建符合所述第二语法规则的内置变量,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
15.根据权利要求11所述的装置,其特征在于,所述第一语法规则和所述第二语法规则分别包括语法信息,所述语法信息包括内置函数及其对应的功能信息;
所述转换模块具体用于:
如果基于所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异包括所述内置函数,则:
若所述待转换代码中的所述内置函数未由所述第二语法规则所定义,则根据所述内置函数对应的功能信息并按照所述第二语法规则,构建符合所述第二语法规则的内置函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的函数名不符合所述第二语法规则,则将所述待转换代码中所述内置函数的函数名映射为符合所述第二语法规则的函数名,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中的所述内置函数的参数列表不符合所述第二语法规则,则将所述待转换代码中的所述内置函数的参数列表映射为符合所述第二语法规则的参数列表,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
16.根据权利要求15所述的装置,其特征在于,所述转换模块还具体用于:
基于所述第二语法规则,确定所述内置函数的声明信息和参数列表;
基于所述声明信息和所述参数列表,构建所述内置函数。
17.根据权利要求15所述的装置,其特征在于,所述转换模块还具体用于:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出内置函数及其函数名和参数列表;
获取所述第二语法规则中的内置函数及其函数名和参数列表;
将从所述待转换代码中识别出的所述内置函数及其函数名和参数列表与所述第二语法规则中的内置函数及其函数名和参数列表进行比较;
根据比较结果,确定所述内置函数、所述内置函数的函数名或所述内置函数的参数列表为所述待转换代码中所涉及到的语法信息与所述第二语法规则中语法信息之间的所述差异。
18.根据权利要求11所述的装置,其特征在于,所述第一语法规则和所述第二语法规则分别包括拓展函数及其对应的功能信息;
所述转换模块具体用于:
如果所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异为所述拓展函数,则
若所述待转换代码存在所述拓展函数而所述拓展函数未被所述第二语法规则所定义,则将所述拓展函数映射为符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备;
或者,
若所述待转换代码中不存在所述拓展函数,则根据所述拓展函数对应的功能信息,在待转换代码中构建符合所述第二语法规则的拓展函数,以将所述待转换代码转换为所述目标代码,以使所述目标代码适用于所述第二设备。
19.根据权利要求18所述的装置,其特征在于,所述转换模块还具体用于:
对所述待转换代码进行语义分析和语法分析,得到抽象语法树;
从所述抽象语法树中识别出拓展函数;
获取所述第二语法规则中的拓展函数;
将从所述待转换代码中识别出的拓展函数与所述第二语法规则中的拓展函数进行比较;
根据比较结果,确定所述拓展函数为所述待转换代码中所涉及到的所述语法信息与所述第二语法规则中语法信息之间的所述差异。
20.根据权利要求11所述的装置,其特征在于,所述装置还包括:
编译模块,用于对所述目标代码进行编译。
21.一种代码转换硬件装置,包括:
存储器,用于存储非暂时性计算机可读指令;以及
处理器,用于运行所述计算机可读指令,使得所述处理器执行时实现如权利要求1-10中任意一项所述的代码转换方法。
22.一种计算机可读存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时,使得所述计算机执行如权利要求1-10中任意一项所述的代码转换方法。
23.一种代码转换终端,包括权利要求11-20中任一所述的一种代码转换装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810356545.4A CN108595184B (zh) | 2018-04-19 | 2018-04-19 | 代码转换方法、装置、计算机存储介质和代码转换终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810356545.4A CN108595184B (zh) | 2018-04-19 | 2018-04-19 | 代码转换方法、装置、计算机存储介质和代码转换终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108595184A CN108595184A (zh) | 2018-09-28 |
CN108595184B true CN108595184B (zh) | 2022-02-11 |
Family
ID=63613562
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810356545.4A Active CN108595184B (zh) | 2018-04-19 | 2018-04-19 | 代码转换方法、装置、计算机存储介质和代码转换终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108595184B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110442330B (zh) * | 2019-07-05 | 2023-07-21 | 五八有限公司 | 列表组件转换方法、装置、电子设备及存储介质 |
CN110515623B (zh) * | 2019-07-09 | 2023-01-20 | 北京达佳互联信息技术有限公司 | 图形操作实现方法、装置、电子设备及存储介质 |
CN110473138B (zh) * | 2019-07-11 | 2023-06-23 | 北京达佳互联信息技术有限公司 | 图形代码转换方法、装置、电子设备及存储介质 |
CN112445820A (zh) * | 2019-08-28 | 2021-03-05 | 北京字节跳动网络技术有限公司 | 数据转换方法及装置 |
CN111651165A (zh) * | 2020-05-18 | 2020-09-11 | 深圳市大富网络技术有限公司 | 编程语言的集成方法、编程软件系统和电子装置 |
CN112486465A (zh) * | 2020-12-11 | 2021-03-12 | 北京字节跳动网络技术有限公司 | 一种代码更新方法及装置 |
US20220318049A1 (en) * | 2021-03-30 | 2022-10-06 | International Business Machines Corporation | Program context migration |
CN113254027B (zh) * | 2021-05-20 | 2024-05-14 | 西安华讯科技有限责任公司 | 一种半导体设备控制程序转换方法、系统、设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103529773A (zh) * | 2013-09-18 | 2014-01-22 | 国家电网公司 | 一种行为控制脚本语言的自动化转化方法 |
CN104346146A (zh) * | 2013-07-29 | 2015-02-11 | 腾讯科技(深圳)有限公司 | 一种跨平台转换应用代码的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770363B (zh) * | 2005-06-27 | 2014-03-12 | Csc科技(新加坡)私人有限公司 | 将可执行代码转换为不同编程语言的方法及设备 |
-
2018
- 2018-04-19 CN CN201810356545.4A patent/CN108595184B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104346146A (zh) * | 2013-07-29 | 2015-02-11 | 腾讯科技(深圳)有限公司 | 一种跨平台转换应用代码的方法及装置 |
CN103529773A (zh) * | 2013-09-18 | 2014-01-22 | 国家电网公司 | 一种行为控制脚本语言的自动化转化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108595184A (zh) | 2018-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108595184B (zh) | 代码转换方法、装置、计算机存储介质和代码转换终端 | |
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
US10908925B2 (en) | Dynamic loading method, and target file creation method and apparatus | |
CN107273176B (zh) | 一种适配硬件架构的编译方法及装置 | |
US20110154299A1 (en) | Apparatus and method for executing instrumentation code | |
CN106796525B (zh) | 按需加载动态脚本语言代码以减少内存使用 | |
US20140068573A1 (en) | Error-code and exception-based function dispatch tables | |
KR20150061203A (ko) | 네이티브 빌드 기반의 임베디드 소프트웨어 개발 환경을 지원하기 위한 임베디드 소프트웨어 개발 도구 제공 방법 및 장치 | |
CN110245468A (zh) | 一种编译方法、装置、设备及系统 | |
US20140359585A1 (en) | Method and device for compiling a source program | |
CN107153563B (zh) | 一种软件版本生成方法及装置 | |
CN114461223A (zh) | 一种代码生成方法、装置及终端设备 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
CN108595183B (zh) | 代码拼接和调试方法、装置、计算机可读存储介质和终端 | |
US20130321436A1 (en) | Method and apparatus for unifying graphics processing unit computation languages | |
CN116088864A (zh) | 汇编方法、反汇编方法、设备及存储介质 | |
CN112232003B (zh) | 对设计进行仿真的方法、电子设备及存储介质 | |
CN113377382A (zh) | 一种软件安装包的处理方法、装置、电子设备及存储介质 | |
CN114461216B (zh) | 一种文件编译方法、装置、电子设备及存储介质 | |
CN114895921B (zh) | 文件处理方法、装置、电子设备及存储介质 | |
CN116521510A (zh) | 测试方法、装置、设备、存储介质及产品 | |
CN117610500A (zh) | 汽车开发用文本代码与图形代码转换定位方法及转换系统 | |
CN100362469C (zh) | 电脑启动自我测试方法 | |
CN117806607A (zh) | 基于数组映射内存地址的plc程序编译方法及装置 | |
KR20210095508A (ko) | 전자 장치 및 이의 제어 방법 |
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 |