CN103631632A - 移植方法及源到源编译器 - Google Patents
移植方法及源到源编译器 Download PDFInfo
- Publication number
- CN103631632A CN103631632A CN201310632199.5A CN201310632199A CN103631632A CN 103631632 A CN103631632 A CN 103631632A CN 201310632199 A CN201310632199 A CN 201310632199A CN 103631632 A CN103631632 A CN 103631632A
- Authority
- CN
- China
- Prior art keywords
- general
- purpose operation
- platform
- source code
- node
- 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/51—Source to source
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Computational Linguistics (AREA)
Abstract
本发明实施例公开了移植方法及源到源编译器,以解决现有技术应用程序不能跨平台移植的问题。该方法包括:接收与平台芯片架构无关、针对应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码;对通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台要求的目标平台算法源代码;发送目标平台算法源代码至目标平台编译器。在本实施例中,将通用平台算法源代码作为中间代码,通过对其通用运算符及通用数据类型进行转换,可得到符合目标平台要求的目标平台算法源代码,而对通用运算符及通用数据类型的转换是对基本运算的转换,因此可实现跨平台源到源转换,解决了现有技术无法实现跨平台源到源转换的问题。
Description
技术领域
本发明涉及计算机技术领域,更具体地说,涉及移植方法及源到源编译器。
背景技术
在DSP(Digital Signal Processing)平台、CPU、GPU(Graphic ProcessingUnit)升级换代(将DSP平台、CPU、GPU统称为平台)时,原平台中的应用程序经常需要进行对应的移植,以令其可在升级换代后的平台(可称为目标平台)上应用。原平台与目标平台可能为不同平台,也即程序移植存在跨平台移植的需求。所谓的不同平台,是指芯片架构(比如指令,数据类型定义等)有差异的平台。
上述应用程序是程序源代码经过编译后得到的二进制可执行文件(exe文件)。为追求性能最优,应用程序中的算法程序源代码往往与平台芯片架构强相关,因此,应用程序的移植的核心是将适用于原平台的算法源代码转换成适用于目标平台的算法源代码,也即进行源到源转换。
现有的源到源编辑器,可实现单线程代码到多线程代码的转换,以及不同语言源代码间的转换。但现有的源到源编辑器所进行的源到源转换,是业务逻辑上的转换,并不涉及平台相关的基本运算的转换,因此,其只适应于同平台的转换,不能跨平台运用,也即,其不能实现跨平台源到源转换,进而不能实现应用程序跨平台移植。
发明内容
有鉴于此,本发明实施例的目的在于提供移植方法及源到源编译器,以解决现有技术不能实现应用程序跨平台移植的问题。
为实现上述目的,本发明实施例提供如下技术方案:
根据本发明实施例的第一方面,提供一种应用程序跨平台移植方法,包括:
接收与平台芯片架构无关、针对所述应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码;
对所述通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码;
发送所述目标平台算法源代码至目标平台编译器,以便所述目标平台编译器对所述目标平台算法源代码进行编译,得到可运行在目标平台上的应用程序。
结合第一方面,在第一种可能的实现方式中,所述对通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码,具体包括:
解析所述通用平台算法源代码,得到抽象语法树;其中,所述抽象语法树包括通用运算节点;
对所述抽象语法树中的通用运算节点进行替换处理和优化处理,得到符合目标平台运算要求及数据类型要求的语法树;
反解析所述符合目标平台运算要求及数据类型要求的语法树,得到所述目标平台算法源代码。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述解析所述通用平台算法源代码,得到抽象语法树包括:
对所述通用平台算法源代码进行词法分析,得到记号流;
对所述记号流进行语法分析,构成第一语法树;
对所述第一语法树进行语义分析,得到经语义分析处理后的抽象语法树。
结合第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述替换处理包括:
令所述抽象语法树中的每一通用运算节点和通用运算库模板进行匹配,当满足预设匹配条件时,匹配成功;
利用匹配成功的通用运算库模板中的内容,替换与之相匹配的通用运算节点的内容,得到第二语法树;
所述优化处理包括:对所述第二语法树进行合并相同循环的节点、消除冗余节点和向量化中的至少一种,得到所述符合目标平台运算要求及数据类型要求的语法树。
结合第一方面的第一种至第三种可能的实现方式中任一种可能的实现方式,在第四种可能的实现方式中,所述通用运算节点包括通用运算符节点和操作数节点;
所述通用运算库模板包括通用运算模板和通用数据类型模板;
所述通用运算模板的内容包含,适用于所述目标平台并可实现通用运算的运算代码;所述通用数据类型模板的内容包含,适用于所述目标平台、并与通用数据类型相对应的数据类型的定义或解释。
结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,当令通用运算符节点与通用运算模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与通用运算模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;
当令操作数节点与通用数据类型模板进行匹配时,所述预设匹配条件包括,操作数节点包含的通用数据类型,与通用数据类型模板对应的通用数据类型相一致,并且,操作数节点的关联节点之间符合依赖关系;
所述关联节点包括左节点和右节点中的至少一种。
结合第一方面的第四种可能的实现方式,在第六种可能的实现方式中,所述通用运算库模板还包括专有指令模板,所述专有指令模板的内容包含,适用于所述目标平台并可实现通用运算的指令;
当令通用运算符节点与专有指令模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与专有指令模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;
所述关联节点包括左节点和右节点中的至少一种。
结合第一方面至第一方面第六种可能的实现方式中任一种,在第七种可能的实现方式中,所述接收到的算法源代码具体为通用DSP算法C源代码。
根据本发明实施例的第二方面,提供一种源到源编译器,包括:
接收单元,用于接收与平台芯片架构无关、针对所述应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码;
转换单元,用于对所述通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码;
发送单元,用于发送所述目标平台算法源代码至目标平台编译器,以便所述目标平台编译器对所述目标平台算法源代码进行编译,得到可运行在目标平台上的应用程序。
结合第二方面,在第二方面的第一种可能的实现方式中,在对通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码方面,所述转换单元具体用于:
解析所述通用平台算法源代码,得到抽象语法树;其中,所述抽象语法树包括通用运算节点;
对所述抽象语法树中的通用运算节点进行替换处理和优化处理,得到符合目标平台运算要求及数据类型要求的语法树;
反解析所述符合目标平台运算要求及数据类型要求的语法树,得到所述目标平台算法源代码。
结合第二方面的第一种可能的实现方式,在解析所述通用平台算法源代码,得到抽象语法树方面,所述转换单元具体用于:
对所述通用平台算法源代码进行词法分析,得到记号流;
对所述记号流进行语法分析,构成第一语法树;
对所述第一语法树进行语义分析,得到经语义分析处理后的抽象语法树。
结合第二方面的第一种可能的实现方式,或第二方面的第二种可能的实现方式,在第三种可能的实现方式中,在替换处理方面,所述转换单元具体用于:
令所述抽象语法树中的每一通用运算节点和通用运算库模板进行匹配,当满足预设匹配条件时,匹配成功;
利用匹配成功的通用运算库模板中的内容,替换与之相匹配的通用运算节点的内容,得到第二语法树;
在优化处理方面,所述转换单元具体用于:对所述第二语法树进行合并相同循环的节点、消除冗余节点和向量化中的至少一种,得到所述符合目标平台运算要求及数据类型要求的语法树。
结合第二方面的第一种可能的实现方式,或第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述通用运算节点包括通用运算符节点和操作数节点;所述通用运算库模板包括通用运算模板和通用数据类型模板;所述通用运算模板的内容包含,适用于所述目标平台并可实现通用运算的运算代码;所述通用数据类型模板的内容包含,适用于所述目标平台、并与通用数据类型相对应的数据类型的定义或解释。
结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,当令通用运算符节点与通用运算模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与通用运算模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;当令操作数节点与通用数据类型模板进行匹配时,所述预设匹配条件包括,操作数节点包含的通用数据类型,与通用数据类型模板对应的通用数据类型相一致,并且,操作数节点的关联节点之间符合依赖关系;所述关联节点包括左节点和右节点中的至少一种。
结合第二方面的第三种可能的实现方式,在第五种可能的实现方式中,所述通用运算库模板还包括专有指令模板,所述专有指令模板的内容包含,适用于所述目标平台并可实现通用运算的指令;当令通用运算符节点与专有指令模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与专有指令模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;所述关联节点包括左节点和右节点中的至少一种。
可见,在本实施例中,将采用通用运算符和通用数据类型的通用平台算法源代码作为中间代码,通过对其通用运算符及通用数据类型进行转换,可得到符合目标平台运算要求及数据类型要求的目标平台算法源代码,而对通用运算符及通用数据类型的转换,是对基本运算的转换,因此,本发明实施例可实现跨平台源到源转换,解决了现有技术无法实现跨平台源到源转换的问题。将得到的目标平台算法源代码发送至目标平台编译器后,目标平台编译器可对其进行编译,最终得到可运行于目标平台之上的应用程序,进而实现了原平台中的应用程序移植至目标平台。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的跨平台移植示意图;
图2为本发明实施例提供的跨平台移植另一示意图;
图3为本发明实施例提供的通用计算机结构示意图;
图4为本发明实施例提供的移植方法流程图;
图5为本发明实施例提供的移植方法另一流程图;
图6为本发明实施例提供的移植方法又一流程图;
图7为本发明实施例提供的移植方法又一流程图;
图8为本发明实施例提供的语法树示意图;
图9为本发明实施例提供的语法树另一示意图;
图10为本发明实施例提供的语法树又一示意图;
图11为本发明实施例提供的语法树又一示意图;
图12为本发明实施例提供的矩阵容器数据类型的模板示意图;
图13为本发明实施例提供的专用指令模板示意图;
图14为本发明实施例提供的移植方法又一流程图;
图15为本发明实施例提供的向量求模运算对应的通用DSP算法C源代码示意图;
图16为本发明实施例提供的语法树又一示意图;
图17为本发明实施例提供的专用指令模板另一示意图;
图18为本发明实施例提供的目标平台算法源代码示意图;
图19为本发明实施例提供的通用卷积算法代码转化为用于TI平台的算法代码示意图;
图20为本发明实施例提供的与通用卷积算法代码相对应的、用于Tensilica平台的算法源代码示意图;
图21为本发明实施例提供的源到源编译器结构示意图;
图22为本发明实施例提供的源到源编译器另一结构示意图。
具体实施方式
为了引用和清楚起见,下文中使用的技术名词、简写或缩写总结解释如下:
AST:abstract syntax tree,抽象语法树。AST是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。树上的每个节点(语法单元)都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在AST的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息;AST是程序编译阶段的一种中间表示形式,含有源程序结果显示所需要的全部静态信息,具有较高的存储效率。此外,在AST的基础上可以进行程序优化,生成机器代码,生成数据流,控制流,在程序分析领域有广泛应用;
定点数:定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。定点数受字长的限制,超出范围会有溢出。
浮点数:浮点数中小数点的位置是不固定的,用阶码和尾数来表示。通常尾数为纯小数,阶码为整数,尾数和阶码均为带符号数。尾数的符号表示数的正负;阶码的符号则表明小数点的实际位置;
ISA:Instruction Set Architecture,ISA是与程序设计有关的计算机架构的一部分,包括本地数据类型、指令、寄存器、地址模式、内存架构、中断和意外处理和外部I/O。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在现有技术中有两种方式可实现跨平台移植(重用)。
一种方式是,请参见图1,根据目标平台(B平台、C平台)指令和架构特点,通过手工修改完成A平台算法源代码跨DSP平台重用,其缺点是每次平台升级时均需要对算法代码的汇编代码进行修改,原A平台算法源代码不能重用,效率较低,增加了研发成本。并且,需要研发人员熟悉原平台与目标平台的平台指令和芯片架构,对研发人员的技术性依赖很高。如果目标平台有多个,并且,各个芯片架构不同,则需要研发人员针对每一目标平台进行手工修改,其移植难度将非常大。
另一种方式是,请参见图2,基于API接口的编程工具技术(比如OpenCL),通过不同平台的编译器(需要支持OpenCL特性)将源码编译成不同平台的可执行程序。其缺点是,需要对每一目标平台的编译器进行修改,平台升级效率不高。
此外,还有一种源到源转换以实现同平台移植方式,采用此种方式对算法源代码转换后,可实现单线程代码到多线程代码的转换,以及不同语言源代码间的转换。其缺点是,其只涉及业务逻辑上的转换,并不涉及平台相关的基本运算的转换,因此,其只适应于同平台的转换,不能跨平台运用,也即,其不能实现跨平台源到源转换,进而不能实现应用程序跨平台移植。
统观上述多种现有技术,要么需要手工修改,对研发人员技术依赖性高,要么需要修改目标平台的编译器,要么不能跨平台使用。
有鉴于此,本发明实施例提供应用程序跨平台移植方法,其用于将原平台中的应用程序移植至目标平台,以解决上述问题。
该方法的执行主体为源到源编译器,源到源编译器100作为移植方法的执行主体,其通用计算机结构如图3所示:包括至少一个处理器101,例如CPU,至少一个网络接口104或者其他用户接口103,存储器105,至少一个通信总线102。通信总线102用于实现这些组件之间的连接通信。该传输定时装置100可选的包含键盘或者点击设备,例如,鼠标、轨迹球(trackball)等。在本发明实施例中,处理器101通过调用存储器105存储的应用程序1051或指令,执行移植方法中的各步骤。
参见图4,上述移植方法至少可包括如下步骤:
S1、接收与平台芯片架构无关、针对该应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码;
在实际使用中,可将与该应用程序对应的、原平台适用的算法源代码,通过人工或自动的方式转换成通用平台算法源代码。当然,也可在编写原平台的算法源代码时,直接将其编写成通用平台算法源代码。
上述通用平台算法源代码符合通用语法规则,“通用语法规则”指的是与平台芯片架构无关的语法规则,其包括符合通用语法规则的数据类型(可简称为通用数据类型或与平台芯片架构无关的通用数据类型)和符合通用语法规则的运算符(可简称为通用运算符或与平台芯片架构无关的通用运算符)。
在本实施例中,通用平台算法源代码的语法定义,可基于C语言进行语法扩展来加以实现,也即通用平台算法源代码的语法=c语言语法+扩展的语法。此外,通用平台算法源代码的语法定义也可基于C++、JAVA等进行语法扩展来实现。
更具体的,上述通用平台算法源代码可为通用DSP算法C源代码,通用DSP算法C源代码兼容matlab的语法定义规则,并具有如下特点:
(一),扩展的数据类型定义:能够表达C语言中的原始数据类型(primitive),例如,定点、浮点、向量、复数等,以及扩展数据类型。扩展数据类型可包括,与C语言中的原始数据类型不相同的数据类型,以及,C语言中未定义的数据类型(自定义数据类型)中的至少一种。
例如,扩展数据类型可包括hash、range、矩阵等。其中,hash是数学里的哈希表,range是数据里的范围,hash、range、矩阵常用在复杂的数据运算中。
再例如,扩展数据类型可包括fix16.8、f16.6等自定义数据类型。fix16.8、f16.6是自定义的数据类型的名称。其中,fix16.8表示定点类型,16是总比特位数,8是小数占用的比特位;f16.6则表示含6位小数10位整数的有符号定点数或浮点数。
(二),扩展的运算定义:能够表达C语言中的原始运算操作,例如属性、位操作、赋值操作、类型转换、算术逻辑等,以及,扩展运算操作(例如矩阵运算操作)。以要言之,扩展运算可包括,与C语言中的原始运算不相同的运算,以及,C语言中未定义的运算中的至少一种。
需要说明的是,运算=运算符+操作数。例如,在c=a+b这个运算中,=、+为运算符,a,b,c为操作数。操作数又可以细分为输入操作数和输出操作数。在c=a+b这个运算中,a、b为输入操作数,c为输出操作数。
在本发明实施例中,运算定义是指运算的意义(或者说运算符所表达的意义),例如运算符“+”表示加法,运算符“-”表示减法等。
实际上,运算可细分为多种类型,例如,算术运算(对应的运算符号是+、-、*、/等),关系运算(对应的运算符号是==、!=、<、>、=<、>=等),逻辑运算(对应的运算符号是||、&&、!等)。
(三),能适配DSP平台的数据类型和运算需求,即能够完全用通用语言(符合扩展的matlab规则)表达DSP平台里的数据类型及运算。之所以要符合matlab规则,是因为matlab的基本数据单位是矩阵,其指令表达式与数学、工程中常用的形式十分相似。用MATLAB来解算问题要比用C、FORTRAN等语言完成简捷得多。
S2、对上述通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码;
S3、发送上述目标平台算法源代码至目标平台编译器,以便目标平台编译器对其进行编译,得到可运行在目标平台上的应用程序。
需要说明的是,由于通用平台算法源代码只关注算法本身的算术表达(主要表达做哪些运算),不涉及到平台相关的内容,所以通用平台算法源代码与平台无关,从而称其为通用平台算法源代码。
举例来讲,对于c=a+b这个运算,不同的平台因其自身的芯片架构,可能会采用不同的算法源代码来实现上述运算。
例如,受自身芯片架构限制,某平台可采用下述算法源代码来实现c=a+b:
无论用什么算法源代码,其本质依然对应c=a+b这个运算,或者说实现c=a+b这个运算。通用平台算法源代码则好比上述的c=a+b,其与平台的芯片架构无关。
再举一例,可将原平台算法源代码视为用中文撰写的专利申请,与其相对应的通用平台算法源代码可视为对应的英文版本(英语是很多国家的官方语言,这里仅为说明方案做此比喻),如想在法国、意大利等国家申请专利,可将上述专利申请的英文版本翻译成法语版本、意大利语版本(相当于移植于目标平台上的算法源代码)。
可见,在本实施例中,将采用通用运算符和通用数据类型的通用平台算法源代码作为中间代码,通过对其通用运算符及通用数据类型进行转换,可得到符合目标平台运算要求及数据类型要求的目标平台算法源代码,而对通用运算符及通用数据类型的转换,是对基本运算的转换,因此,本发明实施例可实现跨平台源到源转换,解决了现有技术无法实现跨平台源到源转换的问题。将得到的目标平台算法源代码发送至目标平台编译器后,目标平台编译器可对其进行编译,最终得到可运行于目标平台之上的应用程序,进而实现了原平台中的应用程序移植至目标平台。
与此同时,由于通用平台算法源代码与平台芯片架构无关,因此,利用其作为中间代码,生成符合各目标平台要求的算法源代码。与实现跨平台移植的现有技术相比,在通用性方面以及效率方面有较大的优势,体现在:
以本发明实施例所提供的技术方案需人工将应用程序对应的原平台算法源代码转换成通用平台算法源代码为例,其与手工修改相比,研发人员不需要熟悉各目标平台的平台指令和芯片架构,对研发人员的技术依赖性相对较低。尤其在目标平台有多个时,本实施例所提供的技术方案,只需要转换一次(将原平台算法源代码转换成通用平台算法源代码),而现有技术则需要针对每一目标平台进行手工修改。而如以自动转换或直接编写成通用平台算法源代码为例,则相对于手工修改,效率更高。
并且,该方案不需要修改目标平台的编译器,其通用性与需要修改目标平台编译器的现有技术相比,其升级效率要高很多。
在本发明其他实施例中,请参见图5,上述步骤S2可具体包括:
S201、解析上述通用平台算法源代码,得到抽象语法树(语法树A);
S202、对语法树A中的通用运算节点进行替换处理和优化处理,得到符合目标平台运算要求及数据类型要求的语法树C。
S203、反解析上述语法树C,生成上述目标平台算法源代码。
也可做如下理解:假定对于某应用程序而言,已经存在目标平台算法源代码Y,并假定解析目标平台算法源代码后所得到的语法树为语法树C(通过语法树C,可逆向还原出符合目标平台要求的算法源代码Y)。同时假定该应用程序对应的通用平台算法源代码X,经过解析后得到的语法树为语法树A。则本发明实施例的关键点之一在于,将语法树A转换成语法树C。
更具体的,上述语法树A的通用运算节点可包含通用运算符节点和操作数节点。其中,通用运算符节点的内容包括通用运算符,而操作数节点的内容则包括操作数对应的通用数据类型。
在本发明其他实施例中,上述所有实施例中的源到源编译器可包括词法分析器、语法分析器和语义分析器。请参见图6和图7,以通用平台算法源代码position=initial+rate*60为例,步骤S201可包括如下子步骤:
S2011、对通用平台算法源代码进行词法分析,得到记号流。
该步骤可由词法分析器执行。词法分析器根据词法规则识别出通用平台算法源代码中的各个记号(token),每个记号代表一类单词(lexeme)。词法分析器的输入是通用平台算法源代码,输出是识别的记号流。词法分析器的任务是把通用平台算法源代码中的字符流转换成记号流。
S2012、对记号流进行语法分析,构成第一语法树。
该步骤可由语法分析器执行。语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。语法树包括多个节点。节点的类型可为通用运算符节点(=、+、*即是)、操作数节点(60即是)。
S2013、对第一语法树进行语义分析,得到经语义分析处理后的抽象语法树(AST)。
该步骤可由语义分析器执行。语义分析器根据语义规则对AST中的语法单元进行静态语义检查,其目的在于保证语法正确的结构在语义上也是合法的。在本实施例中,上述步骤S201中的抽象语法树A具体为经语义分析处理后的抽象语法树。
词法分析、语法分析和词义分析是现有技术,在本发明中不多作赘述。
需要说明的是,在图7中,“inttofloat”节点是通用运算符节点,表示int数据类型到float类型的转换操作,60则是操作数节点。之所以要将60的数据类型由“int”转换为“float”,是因为其他操作数节点的数据类型是float,如其他操作数节点的数据类型也为“int”,则不需要进行数据类型转换,语法树中也就不需要包括“inttofloat”这个通用运算符节点了。
在本发明其他实施例中,上述所有实施例中的步骤S202中的替换处理可具体包括:
令抽象语法树A中的每一通用运算节点和通用运算库模板进行匹配,当满足预设匹配条件时,匹配成功;
利用匹配成功的通用运算库模板中的内容,替换与之相匹配的通用运算节点的内容,得到第二语法树。
更具体的,可遍历或按某种顺序(例如深度优先),令抽象语法树A中的每一通用运算节点和通用运算库模板进行匹配。具体的遍历方式以及深度优先顺序可沿用现有的方式,在此不作赘述。
下面将介绍通用运算库模板。
通用运算库模板可由用户配置,并可存于平台数据库中。上述通用运算库模板至少可包括通用运算模板(比如矩阵相乘模板)和通用数据类型模板。其中:
每一通用运算模板的内容包含了,与某一通用运算相对应、并且符合目标平台运算定义的运算代码,或者说,包含了适用于目标平台并可实现该通用运算的运算代码。为了提高移植的广泛性,一个通用运算模板中可记载对应同一通用运算的多种运算代码,每一种运算代码对应一个目标平台。
而每一通用数据类型模板的内容,则包含了与某一通用数据类型相对应、并且符合目标平台数据类型要求的数据类型的定义或解释。比如定义了数据类型的长度(总比特位数),小数占用的比特位等等。或者说,其包含了适用于目标平台、并与通用数据类型相对应的数据类型的定义或解释。
前已述及,运算=运算符+操作数,因此,通用运算模板里用到的操作数的数据类型必须是在通用数据类型模板里已定义的。在通用运算模板中引用了数据类型模板中数据类型的标识(数据类型名称),通用数据类型模板中则有该数据类型详细的定义或解释。
需要说明的是,上述AST中节点的颗粒度是与通用运算模板相关的。举例来讲,C=a*a+b*b,如果通用运算模板中有一通用运算与a*a+b*b相对应,则可将C=a*a+b*b解析为三个节点:“C”节点,“=”节点和(a*a+b*b)节点。对于“=”这一通用运算符节点而言,“C”节点为其左节点,(a*a+b*b)节点为其右节点。而如果通用运算模板中没有与C=a*a+b*b相对应的通用运算,则C=a*a+b*b可能会被解析为五个节点:“C”节点,“=”节点、(a*a)节点、“+”节点,以及,(b*b)节点。其中,(a*a)节点和(b*b)节点是操作数节点。并且,(a*a)这个操作数节点又包括a、*、a三个子节点,同理,(b*b)这个操作数节点又包括b、*、b三个子节点。
在本发明其他实施例中,在令通用运算符节点与通用运算模板进行匹配时,上述预设匹配条件可包括:通用运算符节点的运算定义符合通用运算模板的运算定义(或者称,通用运算符节点包含的通用运算符与通用运算模板可实现的通用运算相一致),并且它的左右节点之间符合依赖关系,也即,左右节点的类型匹配。
以图7中“+”这一通用运算符节点为例,在判断其与某通用运算模板是否匹配过程中,在对依赖关系进行判断时,需要判断“+”的运算定义是否符合该通用运算模板的运算定义,还需要判断“+”的左节点<id,2>和右节点(<id,3>*inttofloat60)的数据类型是否与该通用运算模板中操作数的数据类型相匹配,以及“+”所涉及的操作数个数是否与该通用运算模板中的操作数个数相匹配。
当令操作数节点与通用数据类型模板进行匹配时,上述预设匹配条件可包括:操作数节点包含的通用数据类型,与通用数据类型模板对应的通用数据类型相一致,并且,操作数节点的左右节点之间符合依赖关系。依赖关系可参见前述记载。
更具体的,在使用通用运算库模板中的内容替换通用运算节点的内容时,如通用运算节点为操作数节点,直接用匹配成功的通用数据类型模板中适用于目标平台的数据类型,替换通用运算节点中的通用数据类型即可(如数据类型相同,还可不替换,直接保留)。
而如通用运算节点为通用运算符节点,则需要将通用运算符节点对应的节点信息作为参数输入匹配成功的通用运算模板,使用匹配成功的通用运算模板的返回值(一般是字符或字符串)替换通用运算节点的内容。
上述节点信息可至少包括通用运算所涉及的操作数。通用运算模板可视为函数,将参数输入函数,得到包含参数的函数作为返回值。
举例来讲,对于c=a+b,其对应的语法树A如图8所示。假定“+”在目标平台中对应的操作符为“add”,则将“+”所涉及的操作数a、b作为参数输入相匹配的通用运算模板(该模板中包括“add”),则返回值为add(a,b),利用add(a,b)替换“+”后,得到的语法树如图9所示。
此外,还需要说明的是,在利用通用运算模板的返回值对通用运算符节点的内容进行替换后,可能会出现节点增加的情况。例如,对于通用运算c=2+2,“2+2”在目标平台上可能需要用“1+1+1+1”来实现。因此,c=2+2对应的语法树A如图10所示,而利用通用运算模板的返回值替换后的语法树可能如图11所示。
需要说明的是,由于利用通用运算模板的返回值(包含操作符)替换了通用运算符,因此,第二语法树中的节点包括操作符节点和操作数节点。其中,操作符节点的内容包括操作符,而操作数节点的内容则包括操作数对应的适应于目标平台的数据类型。
需要说明的是,在匹配过程中,可能会分层展开一个通用运算。例如,
对于矩阵相乘这一通用运算,假定矩阵A为 矩阵B为 二者相乘可得矩阵C为
假定有一通用运算模板可与矩阵相乘的通用运算匹配,并且,利用该通用运算模板的返回值替换节点内容后,可将矩阵A、B相乘分解成三个子节点:(a1*d1+a2*d2+a3*d3),(b1*d1+b2*d2+b3*d3),(c1*d1+c2*d2+c3*d3),此为第一层展开。
上述三个子节点可继续与通用运算模板相匹配。以子节点(a1*d1+a2*d2+a3*d3)为例,假定另有一通用运算模板,可与节点(a1*d1+a2*d2+a3*d3)所表征的通用运算相匹配,并将其分解为五个子节点:(a1*d1),+,(a2*d2),+,(a3*d3),此为第二层展开。
上述五个子节点可继续与通用运算模板相匹配。以子节点(a1*d1)为例,假定,另有一通用运算模板,可与子节点(a1*d1)所表征的通用运算相匹配,并将其分解为三个节点:a1,*,d1,则此为第三层展开。以此类推,直到再也无法展开。
也即,在本实施例中,在每一层展开后,仍可将展开后的语法树中的每一节点视为通用运算节点,将其与通用运算符节点模板或通用数据类型节点相匹配,并利用匹配成功的模板替换节点内容。如何匹配及如何替换可参见本文前述记载。
在实际应用中,目标平台可能会有一些专有指令(专有指令),专有指令至少包括目标平台针对通用运算而定制的指令。
基于专有指令,在本发明其他实施例中,通用运算库模板还可包括专有指令模板。专有指令模板中记载了目标平台针对某一通用运算而定制的指令。
需要说明的是,通常一条指令中既包含操作符也包括操作数。操作符表示该指令应进行什么性质的操作,操作数是指令执行的参与者,也就是各种操作的对象。如果没有这样的专有指令,某一通用运算可能需要好几条普通指令才能执行,而有了专有指令后,可能使用这一条专有指令就可完成该通用运算,从而使性能提升。
与通用运算模板的匹配相类似,在令通用运算符节点与专有指令模板进行匹配时,上述预设匹配条件可包括:通用运算符节点的运算定义符合专有指令模板的运算定义(或者称,通用运算符节点包含的通用运算符与专有指令模板可实现的通用运算相一致),并且它的左右节点之间符合依赖关系,也即,左右节点的类型匹配。
在替换时,将通用运算符节点对应的节点信息作为参数输入匹配成功的专有指令模板,使用匹配成功的专有指令模板的返回值(一般是字符或字符串)替换通用运算符节点的内容。
在本发明其他实施例中,可将上述所有实施例中的专有指令模板和通用运算模板视为同一类模板。在匹配时,将每一通用运算节点与各专有指令模板和通用运算模板相匹配。
举例来讲,对于矩阵相乘这一通用运算,假定矩阵A为 矩阵B为 二者相乘可得矩阵C
在匹配时,将矩阵相乘这一通用运算与通用运算模板和专有指令模板相匹配。假定其匹配上一专有指令模板,该专有指令模板中的专有指令可实现矩阵相乘,则将节点信息作为参数输入匹配成功的专有指令模板中,使用该模板的返回值替换通用运算节点的内容。
而如果无专有指令模板与矩阵相乘这一运算相匹配,但有通用运算模板与之相匹配,则将节点信息作为参数输入匹配成功的通用运算模板,使用匹配成功的通用运算模板的返回值替换通用运算节点的内容。
假定,上述匹配成功的通用运算模板可将矩阵A、B相乘分解成三个运算(三个子节点):(a1*d1+a2*d2+a3*d3),(b1*d1+b2*d2+b3*d3),(c1*d1+c2*d2+c3*d3),此为第一层展开。
上述三个子节点可继续与通用运算模板以及专有指令模板相匹配。以子节点(a1*d1+a2*d2+a3*d3)为例,假定其与另一专有指令模板匹配成功,则将节点信息作为参数输入匹配成功的专有指令模板,并使用其返回值替换该节点的内容。
而如无专有指令模板与子节点(a1*d1+a2*d2+a3*d3)相匹配,但另有一通用运算模板可与之匹配,则将子节点(a1*d1+a2*d2+a3*d3)的节点信息作为参数输入匹配成功的通用运算模板,并使用其返回值替换该节点的内容。
假定,上述匹配成功的通用运算模板可将子节点(a1*d1+a2*d2+a3*d3)分解为五个子节点:(a1*d1),+,(a2*d2),+,(a3*d3),此为第二层展开。
上述五个节点可继续与通用模板以及专有指令模板相匹配。以子节点(a1*d1)为例,假定其可匹配上某一专有指令模板,则将节点信息作为参数输入匹配成功的专有指令模板,并使用其返回值替换该节点的内容。
而如无专有指令模板与子节点(a1*d1)相匹配,但另有一通用运算模板可与之匹配,则将子节点(a1*d1)的节点信息作为参数输入匹配成功的通用运算模板,并使用其返回值替换该节点的内容。
假定,使用返回值替换后,子节点(a1*d1)分解为三个子节点:a1,*,d1,则又展开一层(第三层)。以此类推,直到再也无法展开。
与前述类似,在本实施例中,在每一层展开后,仍可将展开得到的语法树中的每一节点视为通用运算节点,将其与通用运算符节点模板、专有指令模板以及通用数据类型节点相匹配,并利用匹配成功的模板替换节点内容。如何匹配及如何替换可参见本文前述记载。
而前述提及的优化处理可在语法树完全展开后(也即得到第二语法树后)进行,也可在对语法树的匹配展开过程中进行。
更具体的,上述优化处理可包括:对第二语法树进行优化,得到语法树C。
上述优化可具体包括:合并相同循环的节点,消除冗余节点,向量化等。如何优化是现有技术,在此不再赘述。
语法树C中的语法表示出目标平台真实语法中的每个细节。例如,在语法树C中,语法树A中的矩阵相乘运算将展开成为循环运算,抽象语法树A中的通用数据类型换成了目标平台的数据类型。
或者,在本发明其他实施例中,也可将专有指令模板和通用运算模板视为两类模板。更具体的,可将专有指令模板和通用运算模板放在两个集合里,例如将通用运算模板放在第一集合中,将专有指令模板放在第二集合中。
在匹配时,先令语法树中的每一通用运算节点与第一集合中的通用运算模板匹配,利用匹配成功的通用运算模板中的内容替换节点内容,得到中间语法树。
待每一节点均与通用运算模板匹配过后,再令中间语法树中的节点与第二集合中的专有指令模板匹配,利用匹配成功的专有指令模板中的内容替换节点内容。
而前述提及的优化处理可在语法树完全展开后进行,也可在得到中间语法树后进行。优化处理的相关内容请参见本文前述记载,在此不作赘述。
此外,需要说明的是,模板的格式可为符合C/C++语法的template定义的。图12示出了矩阵容器数据类型的模板,而图13示出了f8x16,fu8x16的专用指令模板。
相对应的,步骤S203具体可包括:结合符号表信息(符号表是示例里的图7左边那个表),根据编译器原理反解析语法树C,生成目标平台算法源代码。
上述目标平台算法源代码,还可再经优化(可自动优化或手工优化),最后经过目标平台的编译器进行编译,把目标平台算法源代码编译成二进制文件(即形成应用程序),即可运行在相应的目标平台上。图14则是本发明实施例的原理流程图。
下面,将介绍本发明所提供技术方案的典型应用。
假定,当前产品所使用的DSP平台A随着芯片技术的进步,需要向具有更好性能的平台B上迁移,新平台B的ISA或微架构有更新时,为更好的使用新平台的性能,产品算法代码需要进行移植。
以向量求模运算为例,其对应的通用DSP算法C源代码可参见图15。
上述通用DSP算法C源代码需要在新平台B上进行跨平台使用。则本实施例的解决过程如下:
第1)步,检查新平台B的专有指令集和微架构信息,比如指令流水定义(pipeline)等,是否在平台数据库模板中,如果存在,则继续第2)步,如果不存在,需要把新平台的专有指令集和微架构信息添加到平台数据库中;再继续执行第2)步;
微架构信息包括:指令定义,指令格式,指令流水,发射数,数据类型定义等。
第2)步,将通用DSP算法代码经过源到源编译器工具编译后,得到新平台相关的算法源代码;
其中编译过程为,首先通过解析得到语法树A,再进行模式匹配。比如,发现向量求模模板能匹配上,利用向量求模运算代码,对语法树A进行替换。
第3)步,对第2)步得到的语法树进行消除冗余,展开,循环合并等优化,得到语法树B。语法树B对应的代码如图16。
第4)步,遍历语法树B,将语法树B与专有指令模板进行匹配,匹配成功进行替换,得到语法树C。比如,图16中的cf4x32标识可以匹配图17所示的专用指令模板。
第5)步,根据语法树C,生成可移植于新平台B的算法源代码(请参见图18)。图18中加粗加黑部分为替换部分。
第6)步,得到新平台相关算法源代码后,经过该平台配套的工具链编译后即可运行在新平台B上,对第5)步得到的算法源代码也可以进一步进行调整、优化。
更多的例子,可参见图19-图20。
图19示出了,通用卷积算法代码转化为用于TI平台的算法代码。其中:图19中的“f16_15”是在遍历语法树的节点的数据类型时,发现其和TI平台的float类型模板相匹配,则进行了跨平台的适配,其它类似。
图20示出了与通用卷积算法代码相对应的、用于Tensilica平台的算法源代码。其中:f16_15是在遍历语法树的节点的数据类型时,发现其和TI平台的float16模板类型相匹配,则进行了跨平台的适配和值转换,其它类似。
由图19-图20可见,卷积通用算法代码经过源到源编译器后,从数据类型\赋值操作\专有指令替换等均做了修改或优化。其中,优化体现在:用了最合适的指令(专有指令)来实现运算,相比普通指令,性能得到了提升。
此外,在本发明其他实施例中,上述模板还可用XML、INI等文本格式进行编写。
比如:
需要说明的是,前述提及了将与该应用程序对应的、原平台适用的算法源代码,通过自动的方式转换成通用平台算法源代码。自动的方式可通过如下实现:
1),解析原平台适用的算法源代码,得到抽象语法树D。详细内容可参考前述步骤S2011至S2013,在此不作赘述。抽象语法树D的节点可包括操作符节点和操作数节点。
2),令抽象语法树D中的每一节点和模板进行匹配,利用匹配成功的模板中的内容替换该节点的内容,得到上述抽象语法树A。
上述模板可包括操作符模板和操作数模板。其中,操作符模板的内容包含了,与原平台的某一操作符相对应、并且符合通用运算定义的通用运算符。而每一操作数模板的内容,则包含了与原平台某一数据类型相对应的通用数据类型的定义或解释。
此外,上述模板还可包括通用运算模板。一个通用运算中可能包括多个原平台的操作符及操作数。或者说,抽象语法树D中某些节点的组合可能与一通用运算相对应,因此,可用通用运算模板中的内容替换节点组合。
当然,也可进行优化等等。
综上,为解决算法源代码与平台强相关而难以做到代码重用的问题,本发明通过定义一种通用的算法编程方式,然后通过构建源到源编译器,将其转换到新平台兼容的算法源代码,解决了DSP算法代码无法重用问题,提升了跨平台开发效率,减少了代码移植的工作量,大大降低研发成本。
与上述方法相对应,本发明还要求保护源到源编译器,请参见图21,上述源到源编译器700可包括:
接收单元1,用于接收与平台芯片架构无关、针对该应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码。
转换单元2,用于对通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码;
发送单元3,发送上述目标平台算法源代码至目标平台编译器,以便目标平台编译器对其进行编译,得到可运行在目标平台上的应用程序。
相关内容请参见本文方法部分的记载,在此不作赘述。
图22给出了上述源到源编译器700的一种硬件结构,其可包括:至少一个处理器701,例如CPU,至少一个网络接口704或者其他用户接口703,存储器705,至少一个通信总线702。通信总线702用于实现这些组件之间的连接通信。该传输定时装置700可选的包含用户接口703,键盘或者点击设备,例如,轨迹球(trackball),触感板或者触感显示屏。存储器705可能包含高速RAM存储器,也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器705可选的可以包含至少一个位于远离前述处理器701的存储装置。
在一些实施方式中,存储器705存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
操作系统7051,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务;
应用程序模块7052,包含各种应用程序,用于实现各种应用业务。
应用程序模块7052中包括但不限于上行确定模块1、转换单元2和发送单元3。
应用程序模块7052中各模块的具体实现请参见图7所示实施例中的相应模块,在此不赘述。
在本发明实施例中,通过调用存储器705存储的程序或指令,处理器701用于:
接收与平台芯片架构无关、针对应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码;
对通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码;
发送目标平台算法源代码至目标平台编译器。以便目标平台编译器对目标平台算法源代码进行编译,得到可运行在目标平台上的应用程序。
此外,上述处理器701亦可用于完成本文方法部分所介绍的、移植方法中的其他步骤,以及各步骤的细化,在此不作赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例提供的装置而言,由于其与实施例提供的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,通用硬件包括通用集成电路、通用CPU、通用存储器、通用元器件等,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在可读取的存储介质中,如U盘、移动存储介质、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁碟或者光盘等各种可以存储软件程序代码的介质,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
对所提供的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所提供的原理和新颖特点相一致的最宽的范围。
Claims (15)
1.一种应用程序跨平台移植方法,其特征在于,包括:
接收与平台芯片架构无关、针对所述应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码;
对所述通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码;
发送所述目标平台算法源代码至目标平台编译器,以便所述目标平台编译器对所述目标平台算法源代码进行编译,得到可运行在目标平台上的应用程序。
2.如权利要求1所述的方法,其特征在于,所述对通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码,具体包括:
解析所述通用平台算法源代码,得到抽象语法树;其中,所述抽象语法树包括通用运算节点;
对所述抽象语法树中的通用运算节点进行替换处理和优化处理,得到符合目标平台运算要求及数据类型要求的语法树;
反解析所述符合目标平台运算要求及数据类型要求的语法树,得到所述目标平台算法源代码。
3.根据权利要求2所述的方法,其特征在于,所述解析所述通用平台算法源代码,得到抽象语法树包括:
对所述通用平台算法源代码进行词法分析,得到记号流;
对所述记号流进行语法分析,构成第一语法树;
对所述第一语法树进行语义分析,得到经语义分析处理后的抽象语法树。
4.如权利要求2或3所述的方法,其特征在于,
所述替换处理包括:
令所述抽象语法树中的每一通用运算节点和通用运算库模板进行匹配,当满足预设匹配条件时,匹配成功;
利用匹配成功的通用运算库模板中的内容,替换与之相匹配的通用运算节点的内容,得到第二语法树;
所述优化处理包括:对所述第二语法树进行合并相同循环的节点、消除冗余节点和向量化中的至少一种,得到所述符合目标平台运算要求及数据类型要求的语法树。
5.根据权利要求2-4任一项所述的方法,其特征在于,
所述通用运算节点包括通用运算符节点和操作数节点;
所述通用运算库模板包括通用运算模板和通用数据类型模板;
所述通用运算模板的内容包含,适用于所述目标平台并可实现通用运算的运算代码;所述通用数据类型模板的内容包含,适用于所述目标平台、并与通用数据类型相对应的数据类型的定义或解释。
6.如权利要求5所述的方法,其特征在于,
当令通用运算符节点与通用运算模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与通用运算模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;
当令操作数节点与通用数据类型模板进行匹配时,所述预设匹配条件包括,操作数节点包含的通用数据类型,与通用数据类型模板对应的通用数据类型相一致,并且,操作数节点的关联节点之间符合依赖关系;
所述关联节点包括左节点和右节点中的至少一种。
7.如权利要求5所述的方法,其特征在于,所述通用运算库模板还包括专有指令模板,所述专有指令模板的内容包含,适用于所述目标平台并可实现通用运算的指令;
当令通用运算符节点与专有指令模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与专有指令模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;
所述关联节点包括左节点和右节点中的至少一种。
8.如权利要求1-7任一项所述的方法,其特征在于,所述接收到的算法源代码具体为通用DSP算法C源代码。
9.一种源到源编译器,其特征在于,包括:
接收单元,用于接收与平台芯片架构无关、针对所述应用程序编写的、采用通用运算符和通用数据类型的通用平台算法源代码;
转换单元,用于对所述通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码;
发送单元,用于发送所述目标平台算法源代码至目标平台编译器,以便所述目标平台编译器对所述目标平台算法源代码进行编译,得到可运行在目标平台上的应用程序。
10.如权利要求9所述的源到源编译器,其特征在于,在对通用平台算法源代码中的通用运算符及通用数据类型进行转换,得到符合目标平台运算要求及数据类型要求的目标平台算法源代码方面,所述转换单元具体用于:
解析所述通用平台算法源代码,得到抽象语法树;其中,所述抽象语法树包括通用运算节点;
对所述抽象语法树中的通用运算节点进行替换处理和优化处理,得到符合目标平台运算要求及数据类型要求的语法树;
反解析所述符合目标平台运算要求及数据类型要求的语法树,得到所述目标平台算法源代码。
11.根据权利要求10所述的源到源编译器,其特征在于,在解析所述通用平台算法源代码,得到抽象语法树方面,所述转换单元具体用于:
对所述通用平台算法源代码进行词法分析,得到记号流;
对所述记号流进行语法分析,构成第一语法树;
对所述第一语法树进行语义分析,得到经语义分析处理后的抽象语法树。
12.如权利要求10或11所述的源到源编译器,其特征在于,在替换处理方面,所述转换单元具体用于:
令所述抽象语法树中的每一通用运算节点和通用运算库模板进行匹配,当满足预设匹配条件时,匹配成功;
利用匹配成功的通用运算库模板中的内容,替换与之相匹配的通用运算节点的内容,得到第二语法树;
在优化处理方面,所述转换单元具体用于:对所述第二语法树进行合并相同循环的节点、消除冗余节点和向量化中的至少一种,得到所述符合目标平台运算要求及数据类型要求的语法树。
13.根据权利要求10-12任一项所述的源到源编译器,其特征在于,
所述通用运算节点包括通用运算符节点和操作数节点;
所述通用运算库模板包括通用运算模板和通用数据类型模板;
所述通用运算模板的内容包含,适用于所述目标平台并可实现通用运算的运算代码;所述通用数据类型模板的内容包含,适用于所述目标平台、并与通用数据类型相对应的数据类型的定义或解释。
14.如权利要求13所述的源到源编译器,其特征在于,
当令通用运算符节点与通用运算模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与通用运算模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;
当令操作数节点与通用数据类型模板进行匹配时,所述预设匹配条件包括,操作数节点包含的通用数据类型,与通用数据类型模板对应的通用数据类型相一致,并且,操作数节点的关联节点之间符合依赖关系;
所述关联节点包括左节点和右节点中的至少一种。
15.如权利要求13所述的源到源编译器,其特征在于,
所述通用运算库模板还包括专有指令模板,所述专有指令模板的内容包含,适用于所述目标平台并可实现通用运算的指令;
当令通用运算符节点与专有指令模板进行匹配时,所述预设匹配条件包括,通用运算符节点包含的通用运算符,与专有指令模板所实现的通用运算相一致,并且,通用运算符节点的关联节点之间符合依赖关系;
所述关联节点包括左节点和右节点中的至少一种。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310632199.5A CN103631632B (zh) | 2013-11-29 | 2013-11-29 | 移植方法及源到源编译器 |
EP14789502.3A EP2894561A4 (en) | 2013-11-29 | 2014-04-25 | TRANSPLANTATION METHOD AND SOURCE SOURCE COMPILER |
PCT/CN2014/076174 WO2015078139A1 (zh) | 2013-11-29 | 2014-04-25 | 移植方法及源到源编译器 |
US14/557,734 US20150154011A1 (en) | 2013-11-29 | 2014-12-02 | Transplantation Method and Source-to-Source Compiler |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310632199.5A CN103631632B (zh) | 2013-11-29 | 2013-11-29 | 移植方法及源到源编译器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103631632A true CN103631632A (zh) | 2014-03-12 |
CN103631632B CN103631632B (zh) | 2017-08-04 |
Family
ID=50212729
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310632199.5A Expired - Fee Related CN103631632B (zh) | 2013-11-29 | 2013-11-29 | 移植方法及源到源编译器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20150154011A1 (zh) |
EP (1) | EP2894561A4 (zh) |
CN (1) | CN103631632B (zh) |
WO (1) | WO2015078139A1 (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104199642A (zh) * | 2014-08-05 | 2014-12-10 | 青岛海信移动通信技术股份有限公司 | 一种在目标平台运行原平台代码的实现方法及装置 |
CN104461582A (zh) * | 2014-12-30 | 2015-03-25 | 乐视网信息技术(北京)股份有限公司 | 业务处理方法、装置以及设备 |
CN104572234A (zh) * | 2014-12-29 | 2015-04-29 | 杭州华为数字技术有限公司 | 生成用于并行计算架构的源代码的方法及源到源编译器 |
WO2015078139A1 (zh) * | 2013-11-29 | 2015-06-04 | 华为技术有限公司 | 移植方法及源到源编译器 |
CN105183476A (zh) * | 2015-09-09 | 2015-12-23 | 中国银行股份有限公司 | 一种跨平台应用程序的构建方法和装置 |
US9459848B1 (en) | 2015-05-29 | 2016-10-04 | International Business Machines Corporation | Obtaining correct compile results by absorbing mismatches between data types representations |
CN106293677A (zh) * | 2015-06-08 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 一种代码转换方法及装置 |
CN106354488A (zh) * | 2016-08-18 | 2017-01-25 | 贵州万臻时代通讯技术有限公司 | 一种应用程序跨平台移植装置及方法 |
CN106371887A (zh) * | 2016-11-08 | 2017-02-01 | 西安电子科技大学 | 一种msvl语言的编译系统及方法 |
WO2017107154A1 (zh) * | 2015-12-24 | 2017-06-29 | 华为技术有限公司 | 一种矩阵运算的源到源转换方法及源到源编译器 |
CN107179933A (zh) * | 2017-06-08 | 2017-09-19 | 成都未来之门科技有限公司 | 动态语言变量识别方法、装置、翻译方法及软件移植方法 |
CN107851002A (zh) * | 2015-08-31 | 2018-03-27 | 华为技术有限公司 | 一种代码编译方法及代码编译器 |
CN108614703A (zh) * | 2016-12-30 | 2018-10-02 | 浙江舜宇智能光学技术有限公司 | 基于嵌入式平台的算法移植系统及其算法移植方法 |
CN109582316A (zh) * | 2018-11-15 | 2019-04-05 | 北京深思数盾科技股份有限公司 | 一种跨平台编译方法、装置、系统、服务器及存储介质 |
CN110096264A (zh) * | 2019-04-29 | 2019-08-06 | 珠海豹好玩科技有限公司 | 一种代码运行方法及装置 |
CN110442344A (zh) * | 2019-08-14 | 2019-11-12 | 中国工商银行股份有限公司 | 用于跨平台转换应用的方法、装置、系统及介质 |
CN110503644A (zh) * | 2019-08-27 | 2019-11-26 | 广东工业大学 | 基于移动平台的缺陷检测实现方法、缺陷检测方法及相关设备 |
CN111124288A (zh) * | 2019-12-06 | 2020-05-08 | 苏州浪潮智能科技有限公司 | 一种vpd存储管理方法、装置、设备及可读存储介质 |
CN111736840A (zh) * | 2019-09-19 | 2020-10-02 | 北京沃东天骏信息技术有限公司 | 小程序应用的编译方法、运行方法、存储介质及电子设备 |
CN112230934A (zh) * | 2020-10-27 | 2021-01-15 | 北京人大金仓信息技术股份有限公司 | 一种转换代码语言的方法及装置 |
WO2021208867A1 (zh) * | 2020-04-14 | 2021-10-21 | 华为技术有限公司 | 一种跨平台的代码转换方法及设备 |
WO2022267638A1 (en) * | 2021-06-23 | 2022-12-29 | Huawei Technologies Co.,Ltd. | Method and apparatus for functional unit balancing at program compile time |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9286196B1 (en) * | 2015-01-08 | 2016-03-15 | Arm Limited | Program execution optimization using uniform variable identification |
CN105100191B (zh) * | 2015-05-22 | 2018-09-21 | 华为技术有限公司 | 一种云编译实现Java应用安装的方法、装置及系统 |
KR102414250B1 (ko) * | 2015-07-30 | 2022-06-29 | 삼성전자주식회사 | 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체 |
US10089146B2 (en) * | 2016-03-31 | 2018-10-02 | International Business Machines Corporation | Workload balancing for storlet infrastructure |
US10740093B2 (en) * | 2016-09-01 | 2020-08-11 | Dropbox, Inc. | Advanced packaging techniques for improving work flows |
US10261767B2 (en) | 2016-09-15 | 2019-04-16 | Talend, Inc. | Data integration job conversion |
US10705943B2 (en) | 2017-09-08 | 2020-07-07 | Devfactory Innovations Fz-Llc | Automating identification of test cases for library suggestion models |
US10684849B2 (en) * | 2017-09-08 | 2020-06-16 | Devfactory Innovations Fz-Llc | Automating generation of library suggestion engine models |
US10474455B2 (en) * | 2017-09-08 | 2019-11-12 | Devfactory Fz-Llc | Automating identification of code snippets for library suggestion models |
US10732966B2 (en) * | 2017-09-08 | 2020-08-04 | Devfactory Innovations Fz-Llc | Library model addition |
CN109388406A (zh) * | 2018-09-14 | 2019-02-26 | 浙江口碑网络技术有限公司 | 转换java代码的方法及装置、存储介质、电子装置 |
JP6950665B2 (ja) * | 2018-11-02 | 2021-10-13 | 横河電機株式会社 | エンジニアリング装置、エンジニアリング装置の制御方法及びプログラム |
CN109657461B (zh) * | 2018-11-26 | 2020-12-08 | 浙江大学 | 基于梯度提升算法的rtl硬件木马检测方法 |
US10846083B2 (en) * | 2018-12-12 | 2020-11-24 | Sap Se | Semantic-aware and self-corrective re-architecting system |
US10802825B2 (en) * | 2019-02-25 | 2020-10-13 | International Business Machines Corporation | Cognitive software porting assistant system |
US11063823B2 (en) * | 2019-06-19 | 2021-07-13 | International Business Machines Corporation | Inter-service data transportation through data fragmentation and socket replication |
CN110704450B (zh) * | 2019-10-14 | 2023-02-17 | 北京和利时系统集成有限公司 | 一种实现数据处理的方法、装置、计算机存储介质及终端 |
US11137986B2 (en) * | 2019-12-13 | 2021-10-05 | Sap Se | Similar code analysis and template induction |
CN111240772A (zh) * | 2020-01-22 | 2020-06-05 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、装置及存储介质 |
US11061652B1 (en) * | 2020-03-26 | 2021-07-13 | Cognizant Technology Solutions India Pvt. Ltd. | System and a method for moving legacy applications to cloud |
CN111539200B (zh) * | 2020-04-22 | 2023-08-18 | 北京字节跳动网络技术有限公司 | 一种生成富文本的方法、装置、介质和电子设备 |
CN114398086B (zh) * | 2020-08-29 | 2022-11-25 | 华为技术有限公司 | 驱动配置管理方法、装置、介质、设备及系统 |
CN112181489B (zh) * | 2020-09-28 | 2023-07-25 | 中国平安人寿保险股份有限公司 | 代码迁移方法、装置、计算机设备及存储介质 |
EP4272074A1 (en) * | 2020-12-29 | 2023-11-08 | STMicroelectronics S.r.l. | Methods and apparatus for supporting secondary platform bundles |
CN113032362B (zh) * | 2021-03-18 | 2024-01-19 | 广州虎牙科技有限公司 | 数据血缘分析方法、装置、电子设备和存储介质 |
CN116414447B (zh) * | 2023-05-17 | 2023-09-22 | 北京比格大数据有限公司 | 一种跨架构迁移方法及装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261579A (zh) * | 2007-03-08 | 2008-09-10 | 青牛(北京)技术有限公司 | 一种实现VBScript语言跨平台应用的方法 |
CN101770363A (zh) * | 2005-06-27 | 2010-07-07 | 奎朴兹有限公司 | 代码转换 |
CN101799760A (zh) * | 2009-02-10 | 2010-08-11 | 国际商业机器公司 | 生成任意目标架构的并行单指令多数据代码的系统和方法 |
CN102629213A (zh) * | 2012-02-21 | 2012-08-08 | 北京经纬恒润科技有限公司 | 一种c语言仿真模型的剖析及监控方法 |
CN102937910A (zh) * | 2011-08-16 | 2013-02-20 | 中广核(北京)仿真技术有限公司 | 控制算法跨平台转换系统及方法 |
CN103235723A (zh) * | 2013-04-23 | 2013-08-07 | 浙江天正思维信息技术有限公司 | 基于抽象语法树和软件产品特征的应用软件代码提取方法 |
WO2013157008A2 (en) * | 2012-04-18 | 2013-10-24 | Gizmox Ltd. | Code migration systems and methods and an online solutions store |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5768564A (en) * | 1994-10-07 | 1998-06-16 | Tandem Computers Incorporated | Method and apparatus for translating source code from one high-level computer language to another |
WO2005106658A1 (en) * | 2004-04-26 | 2005-11-10 | Google Inc. | Methods and systems for dynamically composing distributed interactive applications from high-level programming languages |
US7765539B1 (en) * | 2004-05-19 | 2010-07-27 | Nintendo Co., Ltd. | System and method for trans-compiling video games |
US8762962B2 (en) * | 2008-06-16 | 2014-06-24 | Beek Fund B.V. L.L.C. | Methods and apparatus for automatic translation of a computer program language code |
US8321833B2 (en) * | 2008-10-03 | 2012-11-27 | Microsoft Corporation | Compact syntax for data scripting language |
US8601453B2 (en) * | 2010-09-19 | 2013-12-03 | Micro Focus (Us), Inc. | COBOL to bytecode translation |
CN101986266B (zh) * | 2010-10-22 | 2013-05-29 | 浙江大学 | Android手机操作系统移植到凌动处理器开发板的方法 |
CN102364433B (zh) * | 2011-06-24 | 2014-01-01 | 浙大网新科技股份有限公司 | 在ARM处理器上实现Wine构建工具移植的方法 |
CN103294598B (zh) * | 2013-05-28 | 2016-02-03 | 华为技术有限公司 | 一种源代码检查方法及装置 |
CN103631632B (zh) * | 2013-11-29 | 2017-08-04 | 华为技术有限公司 | 移植方法及源到源编译器 |
-
2013
- 2013-11-29 CN CN201310632199.5A patent/CN103631632B/zh not_active Expired - Fee Related
-
2014
- 2014-04-25 WO PCT/CN2014/076174 patent/WO2015078139A1/zh active Application Filing
- 2014-04-25 EP EP14789502.3A patent/EP2894561A4/en not_active Withdrawn
- 2014-12-02 US US14/557,734 patent/US20150154011A1/en not_active Abandoned
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770363A (zh) * | 2005-06-27 | 2010-07-07 | 奎朴兹有限公司 | 代码转换 |
CN101261579A (zh) * | 2007-03-08 | 2008-09-10 | 青牛(北京)技术有限公司 | 一种实现VBScript语言跨平台应用的方法 |
CN101799760A (zh) * | 2009-02-10 | 2010-08-11 | 国际商业机器公司 | 生成任意目标架构的并行单指令多数据代码的系统和方法 |
CN102937910A (zh) * | 2011-08-16 | 2013-02-20 | 中广核(北京)仿真技术有限公司 | 控制算法跨平台转换系统及方法 |
CN102629213A (zh) * | 2012-02-21 | 2012-08-08 | 北京经纬恒润科技有限公司 | 一种c语言仿真模型的剖析及监控方法 |
WO2013157008A2 (en) * | 2012-04-18 | 2013-10-24 | Gizmox Ltd. | Code migration systems and methods and an online solutions store |
CN103235723A (zh) * | 2013-04-23 | 2013-08-07 | 浙江天正思维信息技术有限公司 | 基于抽象语法树和软件产品特征的应用软件代码提取方法 |
Cited By (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015078139A1 (zh) * | 2013-11-29 | 2015-06-04 | 华为技术有限公司 | 移植方法及源到源编译器 |
CN104199642A (zh) * | 2014-08-05 | 2014-12-10 | 青岛海信移动通信技术股份有限公司 | 一种在目标平台运行原平台代码的实现方法及装置 |
CN104199642B (zh) * | 2014-08-05 | 2018-05-01 | 青岛海信移动通信技术股份有限公司 | 一种在目标平台运行原平台代码的实现方法及装置 |
CN104572234A (zh) * | 2014-12-29 | 2015-04-29 | 杭州华为数字技术有限公司 | 生成用于并行计算架构的源代码的方法及源到源编译器 |
CN104461582A (zh) * | 2014-12-30 | 2015-03-25 | 乐视网信息技术(北京)股份有限公司 | 业务处理方法、装置以及设备 |
US9459848B1 (en) | 2015-05-29 | 2016-10-04 | International Business Machines Corporation | Obtaining correct compile results by absorbing mismatches between data types representations |
US9600249B2 (en) | 2015-05-29 | 2017-03-21 | International Business Machines Corporation | Obtaining correct compile results by absorbing mismatches between data types representations |
US9823910B2 (en) | 2015-05-29 | 2017-11-21 | International Business Machines Corporation | Obtaining correct compile results by absorbing mismatches between data types representations |
CN106293677B (zh) * | 2015-06-08 | 2019-09-27 | 阿里巴巴集团控股有限公司 | 一种代码转换方法及装置 |
CN106293677A (zh) * | 2015-06-08 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 一种代码转换方法及装置 |
CN107851002A (zh) * | 2015-08-31 | 2018-03-27 | 华为技术有限公司 | 一种代码编译方法及代码编译器 |
CN105183476A (zh) * | 2015-09-09 | 2015-12-23 | 中国银行股份有限公司 | 一种跨平台应用程序的构建方法和装置 |
CN105183476B (zh) * | 2015-09-09 | 2018-08-28 | 中国银行股份有限公司 | 一种跨平台应用程序的构建方法和装置 |
WO2017107154A1 (zh) * | 2015-12-24 | 2017-06-29 | 华为技术有限公司 | 一种矩阵运算的源到源转换方法及源到源编译器 |
CN106354488A (zh) * | 2016-08-18 | 2017-01-25 | 贵州万臻时代通讯技术有限公司 | 一种应用程序跨平台移植装置及方法 |
CN106371887A (zh) * | 2016-11-08 | 2017-02-01 | 西安电子科技大学 | 一种msvl语言的编译系统及方法 |
CN106371887B (zh) * | 2016-11-08 | 2019-09-13 | 西安电子科技大学 | 一种msvl语言的编译系统及方法 |
CN108614703A (zh) * | 2016-12-30 | 2018-10-02 | 浙江舜宇智能光学技术有限公司 | 基于嵌入式平台的算法移植系统及其算法移植方法 |
CN108614703B (zh) * | 2016-12-30 | 2022-04-19 | 浙江舜宇智能光学技术有限公司 | 基于嵌入式平台的算法移植系统及其算法移植方法 |
CN107179933A (zh) * | 2017-06-08 | 2017-09-19 | 成都未来之门科技有限公司 | 动态语言变量识别方法、装置、翻译方法及软件移植方法 |
CN109582316A (zh) * | 2018-11-15 | 2019-04-05 | 北京深思数盾科技股份有限公司 | 一种跨平台编译方法、装置、系统、服务器及存储介质 |
CN110096264A (zh) * | 2019-04-29 | 2019-08-06 | 珠海豹好玩科技有限公司 | 一种代码运行方法及装置 |
CN110442344A (zh) * | 2019-08-14 | 2019-11-12 | 中国工商银行股份有限公司 | 用于跨平台转换应用的方法、装置、系统及介质 |
CN110442344B (zh) * | 2019-08-14 | 2023-08-22 | 中国工商银行股份有限公司 | 用于跨平台转换应用的方法、装置、系统及介质 |
CN110503644B (zh) * | 2019-08-27 | 2023-07-25 | 广东工业大学 | 基于移动平台的缺陷检测实现方法、缺陷检测方法及相关设备 |
CN110503644A (zh) * | 2019-08-27 | 2019-11-26 | 广东工业大学 | 基于移动平台的缺陷检测实现方法、缺陷检测方法及相关设备 |
CN111736840A (zh) * | 2019-09-19 | 2020-10-02 | 北京沃东天骏信息技术有限公司 | 小程序应用的编译方法、运行方法、存储介质及电子设备 |
CN111124288B (zh) * | 2019-12-06 | 2022-08-12 | 苏州浪潮智能科技有限公司 | 一种vpd存储管理方法、装置、设备及可读存储介质 |
CN111124288A (zh) * | 2019-12-06 | 2020-05-08 | 苏州浪潮智能科技有限公司 | 一种vpd存储管理方法、装置、设备及可读存储介质 |
WO2021208867A1 (zh) * | 2020-04-14 | 2021-10-21 | 华为技术有限公司 | 一种跨平台的代码转换方法及设备 |
CN112230934A (zh) * | 2020-10-27 | 2021-01-15 | 北京人大金仓信息技术股份有限公司 | 一种转换代码语言的方法及装置 |
CN112230934B (zh) * | 2020-10-27 | 2023-08-29 | 北京人大金仓信息技术股份有限公司 | 一种转换代码语言的方法及装置 |
WO2022267638A1 (en) * | 2021-06-23 | 2022-12-29 | Huawei Technologies Co.,Ltd. | Method and apparatus for functional unit balancing at program compile time |
US11755299B2 (en) | 2021-06-23 | 2023-09-12 | Huawei Technologies Co., Ltd. | Method and apparatus for functional unit balancing at program compile time |
Also Published As
Publication number | Publication date |
---|---|
CN103631632B (zh) | 2017-08-04 |
US20150154011A1 (en) | 2015-06-04 |
EP2894561A4 (en) | 2015-08-26 |
WO2015078139A1 (zh) | 2015-06-04 |
EP2894561A1 (en) | 2015-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103631632A (zh) | 移植方法及源到源编译器 | |
Peterson | F2PY: a tool for connecting Fortran and Python programs | |
CN100354823C (zh) | 用于创建、管理和使用代码段的系统和方法 | |
Bajwa et al. | SBVR business rules generation from natural language specification | |
Burden et al. | Natural language generation from class diagrams | |
CN110870249A (zh) | 用于将高级语言代码编译为区块链平台上可执行的脚本的系统和方法 | |
Smith | Cython: A Guide for Python Programmers | |
Blandy et al. | Programming Rust | |
Ringer et al. | Proof repair across type equivalences | |
Kaliszyk et al. | Towards a Mizar environment for Isabelle: foundations and language | |
Kell | In search of types | |
Ballance et al. | Grammatical abstraction and incremental syntax analysis in a language-based editor | |
KR20080096306A (ko) | 규칙에 기반하여 스케일링 쉬프트의 최적의 위치를 찾는컴파일 방법 및 시스템 | |
Mougin et al. | Oopal: integrating array programming in object-oriented programming | |
Ranta | Gf: A multilingual grammar formalism | |
Dillig et al. | SAIL: Static analysis intermediate language with a two-level representation | |
Bourke | Computer Science I | |
Cepa et al. | Language support for model-driven software development | |
Forsberg et al. | BNF converter | |
CN115904353B (zh) | 一种用户界面的目标源文件的生成方法及系统 | |
Pimparkhede | Computer programming with C++ | |
Pahade et al. | Introduction to Compiler and its Phases | |
Jackson | Automated software engineering: supporting understanding | |
Pozrikidis | Introduction to C++ programming and graphics | |
Wang | ASCII Shrug: An Overview of the History, Basics, and Challenges of Computer Science |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170804 Termination date: 20181129 |
|
CF01 | Termination of patent right due to non-payment of annual fee |