CN114780100B - 编译方法、电子设备及存储介质 - Google Patents
编译方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN114780100B CN114780100B CN202210364056.XA CN202210364056A CN114780100B CN 114780100 B CN114780100 B CN 114780100B CN 202210364056 A CN202210364056 A CN 202210364056A CN 114780100 B CN114780100 B CN 114780100B
- Authority
- CN
- China
- Prior art keywords
- abstract syntax
- syntax tree
- converted
- source code
- unified
- 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
-
- 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
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开提供一种编译方法、电子设备及存储介质。该方法包括:获取逻辑系统设计的源代码;经由第一解析器处理所述源代码以生成第一抽象语法树,所述第一抽象语法树包括以第一数据结构存储的第一节点、第一接口和第一工具;经由转译器将所述第一抽象语法树转换为统一抽象语法树,所述统一抽象语法树包括以统一数据结构存储的转换的节点、转换的接口和转换的工具,所述转换的节点、转换的接口和转换的工具与所述第一节点、第一接口和第一工具对应;以及基于所述统一抽象语法树生成所述源代码的目标代码。本公开可以支持不同的解析器。
Description
技术领域
本公开涉及软件技术领域,尤其涉及一种编译方法、电子设备及存储介质。
背景技术
本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
编译,指的是将便于人编写、阅读、交流和维护的源代码(高级计算机语言)翻译为计算机能直接解读和运行的2进制语言(低级计算机语言)。
在编译的过程中,利用解析器将源代码解析为AST(抽象语法树),对于基于不同的程序语言构建的源代码,通常需要利用不同的解析器进行解析,现有技术中的编译方案不能支持不同的解析器。
发明内容
有鉴于此,本公开的目的在于提出一种编译方法、电子设备及存储介质。
本公开第一方面,提供了一种编译方法,包括:
获取逻辑系统设计的源代码;
经由第一解析器处理所述源代码以生成第一抽象语法树,所述第一抽象语法树包括以第一数据结构存储的第一节点、第一接口和第一工具;
经由转译器将所述第一抽象语法树转换为统一抽象语法树,所述统一抽象语法树包括以统一数据结构存储的转换的节点、转换的接口和转换的工具,所述转换的节点、转换的接口和转换的工具与所述第一节点、第一接口和第一工具对应;以及
基于所述统一抽象语法树生成所述源代码的目标代码。
本公开第二方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述的方法。
本公开第三方面,提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行第一方面所述方法。
从上面所述可以看出,本公开实施例提供的编译方法、电子设备及存储介质,可以将不同的解析器处理源代码生成的不同数据结构的抽象语法树,通过转译器转换为统一数据结构的抽象语法树,使得本公开能够支持不同的解析器。
附图说明
为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本公开实施例所提供的一种示例性电子设备的结构示意图;
图2示出了根据本公开实施例的示例性编译器的示意图;
图3示出了示例性前端的示意图;
图4A示出了根据本公开实施例的编译器的前端的示意图;
图4B示出了根据本公开实施例的示例性抽象语法树的示意图;
图4C示出了根据本公开实施例的示例性统一抽象语法树的示意图;
图4D示出了根据本公开实施例的另一前端的示意图;
图5示出了本公开实施例所提供的一种示例性方法的流程图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
图1示出了本公开实施例所提供的一种示例性电子设备100的结构示意图。电子设备100例如可以是计算机主机。该电子设备100可以包括:处理器102、存储器104、网络接口106、外围接口108和总线110。其中处理器102、存储器104、网络接口106和外围接口108通过总线110实现彼此之间在设备内部的通信连接。
处理器102可以是中央处理器(Central Processing Unit,CPU)、图像处理器、神经网络处理器(NPU)、微控制器(MCU)、可编程逻辑器件、数字信号处理器(DSP)、应用专用集成电路(Application Specific Integrated Circuit,ASIC)或者一个或多个集成电路。处理器102可以用于执行与本公开描述的技术相关的功能。在一些实施例中,处理器102还可以包括集成为单一逻辑组件的多个处理器。如图1所示,处理器102可以包括多个处理器102a、102b和102c。
存储器104可以配置为存储数据(例如,指令集、计算机代码、中间数据等)。例如,如图1所示,存储的数据可以包括程序指令(例如,用于实现本公开的技术方案的程序指令)以及待处理的数据(例如,存储器104可以存储在编译过程产生的临时代码)。处理器102也可以访问存储的程序指令和数据,并且执行程序指令以对要处理的数据进行操作。存储器104可以包括易失性存储装置或非易失性存储装置。在一些实施例中,存储器104可以包括随机访问存储器(RAM)、只读存储器(ROM)、光盘、磁盘、硬盘、固态硬盘(SSD)、闪存、存储棒等。
网络接口106可以配置为经由网络向电子设备100提供与其他外部设备的通信。该网络可以是能够传输和接收数据的任何有线或无线的网络。例如,该网络可以是有线网络、本地无线网络(例如,蓝牙、WiFi、近场通信(NFC)等)、蜂窝网络、因特网、或上述的组合。可以理解的是,网络的类型不限于上述具体示例。在一些实施例中,网络接口106可以包括任意数量的网络接口控制器(NIC)、射频模块、接收发器、调制解调器、路由器、网关、适配器、蜂窝网络芯片等的任意组合。
外围接口108可以配置为将电子设备100与一个或多个外围装置连接,以实现信息输入及输出。例如,外围装置可以包括键盘、鼠标、触摸板、触摸屏、麦克风、各类传感器等输入设备以及显示器、扬声器、振动器、指示灯等输出设备。
总线110可以被配置为在电子设备100的各个组件(例如处理器102、存储器104、网络接口106和外围接口108)之间传输信息,诸如内部总线(例如,处理器-存储器总线)、外部总线(USB端口、PCI-E总线)等。
需要说明的是,尽管上述设备仅示出了处理器102、存储器104、网络接口106、外围接口108和总线110,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本公开实施例方案所必需的组件,而不必包含图中所示的全部组件。
图2示出了根据本公开实施例的示例性编译器120的示意图。
编译器120可以基于待编译的计算机代码来生成目标代码的计算机程序。待编译的计算机代码又可以称为源代码。通常,编写源代码的源语言是高级编程语言。例如,高级编程语言可以是C++、Java等软件编程语言或VHDL、Verilog、System Verilog等硬件描述语言。目标代码则可以是例如汇编代码、机器码等。在芯片设计中,若需要对逻辑系统设计进行测试,则需要利用编译器120先对逻辑系统设计的源代码进行编译后才能对逻辑系统设计进行仿真、测试。
编译器120例如可以存储在图1所示的存储器104中,并且由处理器102执行。
如图2所示,编译器120可以包括前端122、中端124以及后端126。
前端122可以用于根据具体的源语言来分析源代码的词法、语法、语义,并生成抽象语法树(AST)。
在源代码的词法、语法、语义分析完成后,中端124可以将源代码的AST转换为中间表示(或中间代码),并可以优化该中间表示。例如,中端124可以移除无用的代码、移除不可访问的代码、清除未使用的变量等。优化后的中间表示则可以被传递给后端126进行进一步处理。
后端126可以根据目标处理器(例如,图1的处理器102)的架构来进一步优化中间表示,并生成目标代码。通常,目标代码是机器码。
可以理解的是,编译器的结构不限于图2的示例。例如,前端122和中端124可以被合称为编译器的前端,或者,中端124和后端126可以被合称为编译器的后端。
图3示出了示例性前端122的示意图。
如上所述,前端122可以用于利用解析器1222将源代码解析为抽象语法树(AST)1224。
抽象语法树1224是源代码的抽象语法结构的树状表示,是一个由元素嵌套所组成的代表了程序语法结构的树,树上的每个节点都表示源代码中的一种结构。
在一些示例性实施例中,在词法分析阶段,将源代码(字符串形式)转换为词元(tokens)流,词元类似于AST中的节点;在语法分析阶段,将一个词元流转换为AST的形式,同时,在这个阶段还会把词元中的信息转换成AST的表述结构。
通常,一个编译器仅包括一个解析器1222,利用解析器1222可以处理基于一种程序语言构建的源代码,如图3所示。然而,在一些情况下,编译器厂家的不同用户可能需要使用不同的解析器。同时,伴随着编译器技术的进步,新的编译器可能被引入。不同的解析器通常生成不同的AST。也就是说,在现有的编译器架构下,一旦位于前端的解析器发生变化,由解析器生成的AST也相应地发生变化,编译器的中端和后端都需要针对不同的AST进行相应地重新处理,并且引发所有与该编译器对接的产品需要重新设计。
为了增强编译器的中端和后端对于不同解析器的适配,本公开的实施例提供一种编译方法和电子设备。
图4A示出了根据本公开实施例的编译器的前端400的示意图。
根据本公开实施例的前端400可以包括解析器402和转译器406。解析器402可以根据实际应用进行选择,本公开不做限定。解析器402可以处理源代码以生成抽象语法树404。
在一些实施例中,解析器402可以将源代码转换为词元流。例如,解析器402可以借助分词器将源代码转换为词元流。解析器402可以进一步将词元流转换为抽象语法树404。
图4B示出了根据本公开实施例的示例性抽象语法树404的示意图。可以理解的是,抽象语法树404仅为一个完整的抽象语法树的一部分。
如图4B所示,抽象语法树404可以包括以特定数据结构存储的多个节点。抽象语法树404的数据结构包括指示该抽象语法树404用于声明数据的根节点“Data Decl”,以及与该根节点关联的2个叶子节点“Data Type”和“Var Array”,分别指示所声明的数据的类型和变量数组。
“Data Type”节点还可以具有多个子节点,分别限定数据的类型(例如,“Type“reg””)、范围(例如,“Range”)以及有无符号(例如,“signed”或“unsigned”)。范围节点可以进一步包括2个子节点,用于限定数据(在这个示例中,该数据是一个数组)的范围。例如,在这个示例中,该数据是一个二维数组,第一个维度的范围是[0:1],第二个维度的范围是[0:2]。
“Var Array”节点也可以具有多个子节点,用于定义数组V1和V2。
这样,通过抽象语法树404可以声明包括2个数组的数据类型。
在一些实施例中,抽象语法树404可以进一步包括接口和工具。
该接口可以为编译器从节点获取直接或间接的信息提供便利。可以理解的是,该接口未在图4B中示出。
对于编译器从节点获取直接信息的情形,在一些实施例中,抽象语法树404可以针对根节点“DataDecl”提供接口GetSigned(),以使编译器获取该声明的数据类型是否是有符号类型。在另一些实施例中,抽象语法树404可以提供接口GetUnpackedDims(),以使编译器获取变量V1的unpacked维度信息。
对于编译器从节点获取间接信息的情形,在一些实施例中,抽象语法树404可以提供接口TypeEqual(),以使编译器判断变量V1和V2的类型是否等价。在又一些实施例中,抽象语法树404可以提供接口ContainDynamicDim(),以使编译器判断变量V1和V2的类型是否包括dynamic的维度信息。
该工具可以与具体的节点无关。在一些实施例中,抽象语法树404可以提供多个遍历框架(即,工具),从而为编译器遍历整体或部分AST提供便利。
通常,抽象语法树的格式与解析器一一对应。为了使得不同解析器输出的抽象语法树可以被不同的中后端使用,本公开的实施例进一步提供转译器406,用于将与解析器对应的抽象语法树转换为统一抽象语法树。
图4C示出了根据本公开实施例的示例性统一抽象语法树420的示意图。可以理解的是,统一抽象语法树420仅为一个完整的抽象语法树的一部分。在这个示例中,统一抽象语法树420是通过转译器406转译抽象语法树404得到的。
统一抽象语法树420可以包括以统一数据结构存储的节点、接口和工具。可以理解的是,这里的节点、接口和工具与抽象语法树404中的节点、接口和工具对应,并且是由抽象语法树404中的节点、接口和工具经由转译器406转换得到的。
如图4C所示,统一抽象语法树420具有根节点“VarList”,用于指示该抽象语法树定义变量。根节点“VarList”具有2个子节点,分别对应于变量V1和V2。可以理解的是,如果定义的数据结构具有更多的变量,根节点“VarList”也可以具有更多的子节点。
转译器406可以分析抽象语法树404,并确定与变量V1和V2有关的信息。在一些实施例中,转译器406可以遍历抽象语法树404以确定抽象语法树404的骨架结构。这里的骨架结构可以是如图4B所示的树状结构。转译器406可以遍历抽象语法树404的多个节点以获取每个节点的数据信息。数据信息可以包括声明信息和定义信息。例如,转译器406可以获取节点“Data Type”和“Type “reg””的数据信息,其中,节点“Data Type”是声明信息,Type“reg”是定义信息。
通过不断遍历抽象语法树404的多个节点,转译器406可以根据数据信息为统一抽象语法树420生成转换的节点。
例如,转译器406可以根据数据信息确定变量V1和V2中不同的数组类型为两个变量的位置,并且通过子节点来体现两个变量分别位于数组(array)的[3:0]和[4:5]。同时,变量V1和V2具有相同的数组类型也通过节点“Packed Array Type”来体现。节点“PackedArray Type”包括多个子节点和孙节点。由于这些节点是根据抽象语法树404的数据信息转换得到的,因此它们也可以被称为转换的节点。
转译器406可以进一步将转换的节点填充到骨架结构,从而生成统一抽象语法树420。
在一些实施例中,在遍历过程中,转译器406可能发现抽象语法树404中存在未转换的数据信息。这通常是因为遍历还未全部完成,而这部分未转换的数据信息刚好处于未遍历的部分。此时,转译器406可以在统一抽象语法树420中为未转换的数据信息预留Hook。在一些实施例中,Hook可以包括一个占位符或一个空白节点。转译器406还可以在HOOK中填写目前已获得的一部分信息。
图4D示出了根据本公开实施例的另一前端430的示意图。
相比于图4A的前端400,前端430包括多个解析器,例如,解析器402和解析器403。前端430可以从多个解析器中选择一个解析器作为当前激活的解析器。例如,前端430可以选择由解析器403作为当前激活的解析器,用于读取源代码并生成抽象语法树405。类似地,抽象语法树405可以由转译器406转换为统一抽象语法树432。
可以理解的是,转译器406可以包括多个子转译器。每个子转译器对应一个解析器,并可以将该解析器生成的抽象语法树转换为统一抽象语法树432。
因此,前端430可以根据用户的实际需要或者根据编译器的中端和后端的需要而选择多个解析器中的一个。
以EDA行业为例,数字仿真器、形式化验证工具、PSS(portable stimulusstandard)、调试工具等都需要读取逻辑系统设计的源代码并生成抽象语法树,但是它们对于抽象语法树的后续处理(即,中端、后端的处理)却因各自工具不同的特点而可能不尽相同。因此,利用前端430可以使用一个相同的前端去对接任何中端、后端,根据不同工具的中端、后端选择激活特定的解析器就可以实现不同的EDA工具,从而降低EDA工具的开发难度并提高开发效率。
可以理解的是,EDA工具(例如,数字仿真器)可以基于统一抽象语法树(例如,420或432)生成源代码的目标代码。
图5示出了本公开实施例所提供的一种示例性方法500的流程图。方法500可以由图1的电子设备100执行。例如,方法500可以由运行在电子设备100上的编译器120(图2所示)执行。该方法500可以包括以下步骤。
在步骤S502,编译器120可以获取逻辑系统设计的源代码(例如,图2的源代码)。
在一些实施例中,编译器120可以获取基于不同源语言编写的源代码。例如,编写源代码的源语言可以是C++、Java等软件编程语言或VHDL、Verilog、System Verilog等硬件描述语言。
在步骤S504,编译器120可以经由解析器(例如,图4A的解析器402)处理该源代码以生成第一抽象语法树(例如,图4A或图4B的抽象语法树404)。该第一抽象语法树可以包括以第一数据结构存储的第一节点(例如,图4B的根节点“Data Decl”、叶子节点“Data Type”和“Var Array”、以及“Data Type”节点的子节点“Type“reg””、“Range”、“signed”)、第一接口和第一工具。
在一些实施例中,编译器120可以将该源代码转换为词元流,以及可以将该词元流转换为第一抽象语法树。
在步骤S506,编译器120可以经由转译器(例如,图4A的转译器406)将该第一抽象语法树(例如,图4A或图4B的抽象语法树404)转换为统一抽象语法树(例如,图4A或图4C的统一抽象语法树420)。该统一抽象语法树可以包括以统一数据结构存储的转换的节点(例如,图4C的根节点“VarList”、节点“Packed Array Type”、或节点“Packed Array Type”的多个子节点和孙节点)、转换的接口和转换的工具。该统一抽象语法树的转换的节点、转换的接口和转换的工具可以与该第一抽象语法树的第一节点(例如,图4B的根节点“VarArray”、子节点“Data Type”、或子节点“Data Type”的子节点“Type “reg””和“signed”)、第一接口(例如,接口GetSigned()、GetUnpackedDims()、TypeEqual()、或ContainDynamicDim())和第一工具(例如,遍历框架)对应。
在一些实施例中,编译器120可以经由转译器(例如,图4A的转译器406)遍历抽象语法树(例如,图4A的抽象语法树404)以确定统一抽象语法树(例如,图4A的统一抽象语法树420)的骨架结构。编译器120可以遍历抽象语法树的节点(例如,图4B的节点“Data Type”和“Type “reg””)以获取节点的数据信息。在一些实施例中,该数据信息可以包括声明信息(例如,图4B的节点“Data Type”的信息)和定义信息(例如,图4B的节点“Type “reg””的信息)。
编译器120可以根据该数据信息生成转换的节点(例如,图4C的节点“PackedArray Type”、或节点“Packed Array Type”的多个子节点和孙节点)。编译器120可以将这些转换的节点填充到该统一抽象语法树(例如,图4C的统一抽象语法树420)的骨架结构。
在一些实施例中,响应于确定抽象语法树中存在未转换的数据信息,编译器120中的转译器可以在统一抽象语法树中为该未转换的数据信息预留Hook。
在又一些实施例中,编译器120还可以包括多个解析器(例如,图4D的解析器402和403)。编译器120可以从这多个解析器中选择一个解析器作为当前激活的解析器(例如,图4D的解析器403)。该当前激活的解析器作为第二解析器,可以读取源代码(例如,图4D的源代码)并生成第二抽象语法树(例如,图4D的抽象语法树405)。该第二抽象语法树可以包括以第二数据结构存储的第二节点、第二接口和第二工具。其中,该第二数据结构可以与第一数据结构不同。该第二抽象语法树可以由转译器(例如,图4D的转译器406)转换为统一抽象语法树(例如,图4D的统一抽象语法树432)。
在一些实施例中,编译器120可以接收用户指令以选择多个解析器中的一个(例如,图4D的解析器402或403)用于处理源代码。
需要说明的是,步骤S506的目的在于将多种不同数据结构的抽象语法树(例如,图4D的抽象语法树404和405)转换为统一数据结构的统一抽象语法树(例如,图4D的统一抽象语法树432)。本公开对于转换得到的统一抽象语法树的统一数据结构不做限定。该统一数据结构可以是被转换的抽象语法树的数据结构中的一种,也可以是被转换的抽象语法树的数据结构之外的其他数据结构。
在步骤S508,编译器120可以基于该统一抽象语法树(例如,图4A的统一抽象语法树420、或图4D的统一抽象语法树432)生成该源代码(例如,图2的源代码)的目标代码(例如,图2的目标代码)。
在一些实施例中,编译器120可以将该统一抽象语法树转换成字符串形式的目标代码,并创建源映射。其中,该源映射可以用于存储该源代码和该目标代码之间的位置映射关系。
本公开实施例所提供的示例性方法,编译器120可以将不同的解析器处理源代码生成的不同数据结构的抽象语法树(例如,图4D的抽象语法树404和405),通过转译器转换为统一数据结构的抽象语法树(例如,图4D的统一抽象语法树432),使得本公开能够支持不同的解析器。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的编译方法。
上述非暂态计算机可读存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上示例性方法部分中任一实施例所述的编译方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举示例)例如可以包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络(包括局域网(LAN)或广域网(WAN))连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的产品。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
申请文件中提及的动词“包括”、“包含”及其词形变化的使用不排除除了申请文件中记载的那些元素或步骤之外的元素或步骤的存在。元素前的冠词“一”或“一个”不排除多个这种元素的存在。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。
Claims (8)
1.一种编译方法,包括:
获取逻辑系统设计的源代码;
经由第一解析器处理所述源代码以生成第一抽象语法树,所述第一抽象语法树包括以第一数据结构存储的第一节点、第一接口和第一工具;
经由转译器将所述第一抽象语法树转换为统一抽象语法树,所述统一抽象语法树包括以统一数据结构存储的转换的节点、转换的接口和转换的工具,所述转换的节点、转换的接口和转换的工具与所述第一节点、第一接口和第一工具对应;以及
基于所述统一抽象语法树生成所述源代码的目标代码;
其中,进一步包括:
经由第二解析器处理所述源代码以生成第二抽象语法树,所述第二抽象语法树包括以第二数据结构存储的第二节点、第二接口和第二工具;
经由所述转译器将所述第二抽象语法树转换为所述统一抽象语法树;
其中,进一步包括:
接收用户指令以选择所述第一解析器或第二解析器用于处理所述源代码。
2.根据权利要求1所述的方法,其中,经由转译器将所述第一抽象语法树转换为统一抽象语法树,进一步包括:
遍历所述第一抽象语法树以确定所述统一抽象语法树的骨架结构;
遍历所述第一抽象语法树的第一节点以获取所述第一节点的数据信息;
根据所述数据信息生成所述转换的节点;
将所述转换的节点填充到所述骨架结构。
3.根据权利要求2所述的方法,其中,所述数据信息包括声明信息和定义信息。
4.根据权利要求2所述的方法,进一步包括:
响应于确定所述第一抽象语法树中存在未转换的数据信息,在所述统一抽象语法树中为所述未转换的数据信息预留Hook。
5.根据权利要求1所述的方法,其中,经由第一解析器处理所述源代码以生成第一抽象语法树,进一步包括:
将所述源代码转换为词元流;
将所述词元流转换为所述第一抽象语法树。
6.根据权利要求1所述的方法,其中,基于所述统一抽象语法树生成所述源代码的目标代码,进一步包括:
将所述统一抽象语法树转换成字符串形式的所述目标代码,并创建源映射;其中,所述源映射用于存储所述源代码和所述目标代码之间的位置映射关系。
7.一种电子设备,包括:
存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1至6任意一项所述的方法。
8.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行权利要求1至6任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210364056.XA CN114780100B (zh) | 2022-04-08 | 2022-04-08 | 编译方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210364056.XA CN114780100B (zh) | 2022-04-08 | 2022-04-08 | 编译方法、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114780100A CN114780100A (zh) | 2022-07-22 |
CN114780100B true CN114780100B (zh) | 2023-04-07 |
Family
ID=82427307
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210364056.XA Active CN114780100B (zh) | 2022-04-08 | 2022-04-08 | 编译方法、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114780100B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115390852A (zh) * | 2022-08-26 | 2022-11-25 | 支付宝(杭州)信息技术有限公司 | 一种生成统一抽象语法树与程序分析的方法和装置 |
CN116149670B (zh) * | 2023-04-21 | 2023-07-11 | 湖南泛联新安信息科技有限公司 | 一种基于图的hdl编译优化方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471666A (zh) * | 2019-07-18 | 2019-11-19 | 五八有限公司 | 代码自动转换方法和装置、代码转换器及介质 |
CN111061757A (zh) * | 2019-12-19 | 2020-04-24 | 用友网络科技股份有限公司 | 数据库的语言转换方法、装置、电子设备及存储介质 |
CN113010183A (zh) * | 2021-04-30 | 2021-06-22 | 中国工商银行股份有限公司 | 一种代码转换方法及装置 |
CN113986252A (zh) * | 2021-10-29 | 2022-01-28 | 中国银行股份有限公司 | Cobol代码转换方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180107478A1 (en) * | 2016-10-13 | 2018-04-19 | Microsoft Technology Licensing, Llc | Coding filter for shared source code |
CN111381817A (zh) * | 2020-03-25 | 2020-07-07 | 北京字节跳动网络技术有限公司 | 实现跨平台多语言开发的方法、装置、介质和电子设备 |
CN111488154B (zh) * | 2020-04-23 | 2024-01-12 | 北京东土科技股份有限公司 | St语言源代码编译方法、装置、计算机设备及介质 |
CN111949254B (zh) * | 2020-08-07 | 2024-07-23 | 抖音视界有限公司 | 生成统一ast的方法、装置、计算机设备和存储介质 |
US20210191696A1 (en) * | 2020-12-14 | 2021-06-24 | Intel Corporation | Methods, apparatus, and articles of manufacture to identify and interpret code |
CN112527316A (zh) * | 2020-12-29 | 2021-03-19 | Oppo广东移动通信有限公司 | 代码编译方法、装置、电子设备及存储介质 |
CN112860264B (zh) * | 2021-03-30 | 2024-02-09 | 中国工商银行股份有限公司 | 一种抽象语法树重构方法及装置 |
-
2022
- 2022-04-08 CN CN202210364056.XA patent/CN114780100B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471666A (zh) * | 2019-07-18 | 2019-11-19 | 五八有限公司 | 代码自动转换方法和装置、代码转换器及介质 |
CN111061757A (zh) * | 2019-12-19 | 2020-04-24 | 用友网络科技股份有限公司 | 数据库的语言转换方法、装置、电子设备及存储介质 |
CN113010183A (zh) * | 2021-04-30 | 2021-06-22 | 中国工商银行股份有限公司 | 一种代码转换方法及装置 |
CN113986252A (zh) * | 2021-10-29 | 2022-01-28 | 中国银行股份有限公司 | Cobol代码转换方法及装置 |
Non-Patent Citations (2)
Title |
---|
Nugroho Satrijandi等.Efficiency measurement of Java Android code.《2014 International Conference on Data and Software Engineering (ICODSE)》.2015,第1-6页. * |
李雪.基于语法的源代码差异分析及与内核分析平台的集成.《cnki优秀硕士学位论文全文库 信息科技辑》.2018,(第06期),第I138-979页. * |
Also Published As
Publication number | Publication date |
---|---|
CN114780100A (zh) | 2022-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114780100B (zh) | 编译方法、电子设备及存储介质 | |
CN112632880B (zh) | 用于逻辑系统设计的编译方法、电子设备及存储介质 | |
CN112287569B (zh) | 用于仿真逻辑系统设计的方法、电子设备及存储介质 | |
CN111736840A (zh) | 小程序应用的编译方法、运行方法、存储介质及电子设备 | |
CN112988163B (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN102480467A (zh) | 一种基于网络通讯协议的soc软硬件协同仿真验证方法 | |
CN115392176B (zh) | SoC芯片顶层模块集成设计方法及系统 | |
CN112558984A (zh) | 代码编译的方法、装置、电子设备以及服务器 | |
CN114707444B (zh) | 编译验证系统的方法、电子设备及存储介质 | |
CN111078228A (zh) | 网页到小程序的转换方法、装置、服务器及存储介质 | |
CN110737431B (zh) | 软件开发方法、开发平台、终端设备及存储介质 | |
CN112434478B (zh) | 仿真逻辑系统设计的虚拟接口的方法及相关设备 | |
US20170131980A1 (en) | Model driven architecture for network management and configuration | |
CN112232003B (zh) | 对设计进行仿真的方法、电子设备及存储介质 | |
CN115688643A (zh) | 仿真逻辑系统设计的方法、设备及存储介质 | |
CN114968260A (zh) | 混合预编译方法、装置、电子设备及存储介质 | |
CN118103815A (zh) | 编译方法以及用于编译的装置 | |
CN112131806A (zh) | 验证设计的编译方法、电子设备及存储介质 | |
CN117075912B (zh) | 用于程序语言转换的方法、编译方法及相关设备 | |
CN114817124A (zh) | 多核微控制器间映射方法、设备及计算机可读存储介质 | |
CN110471667A (zh) | 一种审核源程序的方法、装置、介质和电子设备 | |
CN113467778B (zh) | 一种异构众核处理器中算法转换方法和系统 | |
CN109858169B (zh) | 一种基于Modelica的模型平坦化方法 | |
CN114090007A (zh) | 适应开发语言的多语言文本生成方法、终端及存储介质 | |
CN115828805A (zh) | 分割逻辑系统设计的方法、设备及存储介质 |
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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230731 Address after: 100015 D1001, Block D, 1st Floor, Building 21, No. 2, Wanhong West Street, West 8th Room, Dongzhimenwai, Chaoyang District, Beijing Patentee after: Core Huazhang Technology (Beijing) Co.,Ltd. Address before: 18th floor, building 01, Huachuang Road, Jiangbei new district, Nanjing, Jiangsu Province Patentee before: Xinhuazhang Technology Co.,Ltd. |