CN111625224B - 代码生成方法、装置、设备及存储介质 - Google Patents
代码生成方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111625224B CN111625224B CN202010468473.XA CN202010468473A CN111625224B CN 111625224 B CN111625224 B CN 111625224B CN 202010468473 A CN202010468473 A CN 202010468473A CN 111625224 B CN111625224 B CN 111625224B
- Authority
- CN
- China
- Prior art keywords
- language
- code
- business logic
- tree
- syntax tree
- 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
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims abstract description 29
- 238000004458 analytical method Methods 0.000 claims abstract description 17
- 230000015654 memory Effects 0.000 claims description 19
- 238000012545 processing Methods 0.000 claims description 13
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 10
- 238000013507 mapping Methods 0.000 claims description 8
- 230000003068 static effect Effects 0.000 claims description 6
- 238000004590 computer program Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 239000004973 liquid crystal related substance Substances 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000004549 pulsed laser deposition Methods 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- 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/425—Lexical analysis
-
- 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/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- 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/44—Encoding
- G06F8/447—Target code generation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种代码生成方法、装置、设备及存储介质,涉及云计算技术领域,具体涉及软件技术领域。具体实现方案为,代码生成方法包括:在第一语言环境下编写第一业务逻辑的代码,所述第一业务逻辑的代码用于描述第一业务逻辑对应的功能,其中,所述第一业务逻辑的代码是按照预设的声明式应用程序接口API的描述方式进行编写的,编写完成后得到第一具体语法树;基于预定的语法分析算法,将所述第一具体语法树转换为第一抽象语法树;通过解释器将所述第一抽象语法树转换为第二语言代码,所述第二语言代码用于执行所述第一业务逻辑对应的功能。利用本申请的实施例能够实现对目标代码的动态描述。
Description
技术领域
本申请涉及云计算技术领域,具体涉及软件技术领域,更具体地,涉及一种代码生成方法、装置、设备以及存储介质。本申请可应用于计算机领域。
背景技术
在各种计算机编程语言中,Go语言具有语法简洁、运行高速、可并行处理封装以及开源等优点,可作为搭载WEB服务器或存储集群等巨型中央服务器的***编程语言。对于高性能分布式***而言,Go语言比大多数其它语言具有更高的开发效率,可它提供海量并行的支持,在服务端的开发优势较大。目前,常用的Go语言代码生成方案大多是基于静态文件生成的,使用和维护过程繁琐,对业务功能的实现带来负面影响,有待优化和改善。
发明内容
本申请提供了一种代码生成方法、装置、设备以及存储介质。
根据本申请的第一方面,提供了一种代码生成方法,包括:
在第一语言环境下,按照预设的声明式应用程序接口API的描述方式编写第一业务逻辑的代码,所述第一业务逻辑的代码用于描述第一业务逻辑对应的功能,编写完成后得到第一具体语法树,其中所述第一语言包括Python语言;
基于预定的语法分析算法,将所述第一具体语法树转换为第一抽象语法树;
通过解释器将所述第一抽象语法树转换为第二语言代码,所述第二语言代码用于执行所述第一业务逻辑对应的功能,其中所述第二语言包括Go语言。
根据本申请的第二方面,提供了一种代码生成装置,包括:
代码处理模块,用于在第一语言环境下,按照预设的声明式应用程序接口API的描述方式编写第一业务逻辑的代码,所述第一业务逻辑的代码用于描述第一业务逻辑对应的功能,编写完成后得到第一具体语法树,其中所述第一语言包括Python语言;
第一转换模块,用于基于预定的语法分析算法,将所述第一具体语法树转换为第一抽象语法树;
第二转换模块,用于通过解释器将所述第一抽象语法树转换为第二语言代码,所述第二语言代码用于执行所述第一业务逻辑对应的功能,其中所述第二语言包括Go语言。
根据本申请的第三方面,提供了一种电子设备,包括:
至少一个处理器;以及
与至少一个处理器通信连接的存储器;其中,
存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如上的代码生成方法。
根据本申请的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,计算机指令用于使计算机执行如上的代码生成方法。
根据本申请的第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现如上所述的方法。
根据本申请实施例可通过声明式应用程序接口API,基于第一编程语言例如Python语言代码生成第二编程语言例如Go语言代码,从而能够通过第一语言动态地控制第二语言,实现对第二语言代码逻辑的动态描述。
应当理解,本部分所描述的内容并非旨在标识本申请的实施例的关键或重要特征,也不用于限制本申请的范围。本申请的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1是根据本申请一个实施例的代码生成方法的流程框图;
图2是根据本申请另一实施例的代码生成方法的流程框图;
图3是根据本申请一个实施例的代码生成装置的结构框图;
图4是根据本申请另一实施例的代码生成装置的结构框图;
图5是用来实现本申请实施例的代码生成方法的电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1示出了本申请实施例提供的一种代码生成方法的流程框图,该方法包括:
S101,在第一语言环境下,按照预设的声明式应用程序接口API的描述方式编写第一业务逻辑的代码,所述第一业务逻辑的代码用于描述第一业务逻辑对应的功能,编写完成后得到第一具体语法树,其中所述第一语言包括Python语言;
S102,基于预定的语法分析算法,将第一具体语法树转换为第一抽象语法树;
S103,通过解释器将所述第一抽象语法树转换为第二语言代码,所述第二语言代码用于执行所述第一业务逻辑对应的功能,其中所述第二语言包括Go语言。
根据本申请实施例提供的代码生成方法,可通过声明式应用程序接口(Declarative Application Programming Interface,API),基于第一编程语言代码生成第二编程语言代码,从而能够通过第一语言动态地控制第二语言,实现对第二语言代码逻辑的动态描述。
用户在使用本申请实施例提供的代码生成方法时,在第一语言环境下进行代码的编写或者修改,并且这种编写或者修改是符合该声明式API的描述方式的,最终可得到编写的或者修改好的第二语言的代码,因此,用户实际上实现了通过第一语言来编写或者修改第二语言代码,实现了对目标语音代码的动态编辑,可使得对目标语言代码的使用和维护变得容易。
在本申请的一些实施例中,可选地,第二语言(或者说目标语言)可包括Go语言。当然,在本申请的其他实施例,第二语言还可以是其他符合使用需求的计算机编程语言,均适用于本申请实施例的代码生成过程。
关于本申请实施例的应用场景,以目标语言为Go语言为例,在本申请的一些实施例中,可选地,在第一语言环境下编写第一业务逻辑的代码可以是计算机存储集群的服务器上的业务逻辑代码,例如用于管理计算机集群的运行。更常见的一种场景,该第一业务逻辑的代码还可以是网络游戏的服务器上的业务逻辑代码,例如用于制定海量玩家在不同服务器之间的迁移策略。
在本申请的一些实施例中,可选地,第一语言包括Python语言,Python是一种面向对象的语言,应用领域广泛。本申请实施例可在Python环境下进行业务逻辑代码的编写和修改,并且,需采用预先制定的API接口的描述方式来编写和修改,确保后续翻译时能够得到目标代码。
关于API(或称API接口),其是软件***不同组成部分之间的一种衔接的约定,通过API接口可实现计算机软件之间的相互通信,API主要是一组定义、程序及协议等的集合。API属于一种中间件,能够提供应用程序与开发人员基于软件或硬件访问例程的能力,同时无需访问原代码或理解内部工作机制的细节。良好的API接口设计可以降低***各部分的相互依赖,降低组成单元间的耦合程度,从而达到提高***的可维护性和可扩展性的目的。在本申请的实施例中,使用声明式API接口需在编程之初声明使用本API作为接口。
在本申请的一些实施例中,可选地,声明式API接口的描述方式与目标语言的代码描述方式具有第一映射关系,例如,可从目标语言的描述方式倒推出对应的API接口描述方式,则目标语言与API具有的第一映射关系为两者之间的可倒推关系。如此,使用第一语言编写业务逻辑时使用API的描述方式,编写完成后,正向翻译可得到对应的表达为目标代码的业务逻辑,可执行该业务逻辑的功能。
在本申请的一些实施例中,可选地,声明式API包括以下至少一种函数:关键字、描述符、字面量、操作符、括号、控制流、内置数据类型、注释。在第一语言环境下编写或修改代码时,需按照本申请实施例提供的API接口形式进行编写或修改,能够得到目标语言的源代码。
以下示例性地列举本申请实施例的API接口的具体描述方式。以在Python语言环境下编程且目标代码为Go代码为例,至少可使用以下API进行处理,以下的描述方式为:API->目标代码。
①关键字(keywords)
.break()->break
.func()->func
.chan()->chan
.int()->int
.panic()->panic
其中,本申请实施例的API接口中的“关键字”包括Go语言中的关键字、保留字和内置函数,本文中未进行穷举。
②描述符(identifiers)
在不同的实施方式中,本申请实施例可提供以下两种“描述符”:
.id(“a”)->a
.id_list(“a”,“b”,“c”)->a,b,c
③字面量(literals)
.literal(“a”)->“a”
.literal(1)->1
.literal(0x1)->0x1
④操作符(operators)
.oper(“*”)->*
以下提供一个更具体的例子:
.id(a).oper(“+”).literal(1)->a+1
⑤括号(parentheses)
.block(<sub_procedure>)->{<sub_procedure>}
.parenthese(<sub_precedure>)->(<sub_procedure>)
其中,<sub_procedure>为一段代码描述。
⑥控制流(control flow)
.if(<condition>)->if<condition>
.for(<condition>)->for<condition>
.switch(<expression>)->switch<expression>
.select()->select
以下提供一个更具体的例子:
.if(id(a).oper(“!=”).literal(“abc”)).block(break())->if a!=“abc”{break}
⑦内置数据类型(data structures)
.map(<type1>,<type2>)->map[type1]type2
.slice(<type>)->[]<type>
⑧注释(comments)
.inline_comment(“abc”)->//abc
.block_comment(“abc”)->/*abc*/
根据本申请的实施例,基于以上提供的API接口的具体描述方式,使用者可在Python环境下通过该接口描述目标Go程序,最终可获得Go程序源代码。因此,本申请的实施例属于一种基于元编程思想的代码生成方案,能够实现对目标代码逻辑的动态描述。
以下通过多个具体的实施例,详细描述本申请实施例的具体实现方式和过程。
图2示意性地示出了本申请实施例的代码生成方法的流程图,其中实线框表示进行的处理,虚线框表示处理后得到的对象,具体来看,依次包括如下内容:
S201,使用者在Python环境中基于API接口描述目标Go程序对应的业务逻辑,得到基于API的Python代码;
S202,利用例如词法检查器Lex checker,在API中每个函数被调用时对参数进行词法检查;
其中,基于该API接口的描述等价于目标Go程序对应的具体语法树CST,也就是得到了使用者通过API描述一棵与目标程序对应的CST;
S203,使用预定算法例如基于最左推倒算法的自顶向下的语法分析算法LL top-down parser,对上述得到的CST进行转换,得到对应的抽象语法树AST;其中,在利用LLtop-down parser进行转换的过程中,还可一并进行对代码的语法检查;
S204,对上述得到的抽象语法树AST进行静态语意分析,例如使用代码校验工具Linter进行语意检查,确保代码准确无误;这里需说明,本步骤进行语意检查为可选的步骤,也就是说,在得到抽象语法树AST之后可直接进行以下的处理;
S205,以解释器Interpreter遍历抽象语法树AST,从而将AST翻译成Go源代码。
通过以上各步骤,使用者可在Python环境下,通过对API接口的合理使用,生成目标Go语音程序源代码,并可方便地对生成的Go代码进行修改和更新,实现对Go代码逻辑的动态描述和操控。
进一步地,为了更清楚直观展现本申请实施例的实现方式,以下示意性地示出了基于本申请实施例的一个具体的代码生成过程实例:
def generate_add_function(name,param1,param2):
p=codegen.func(“add”).parenthese(codegen.id_list(param1,
param2).int.block(codegen.return(id(param1).oper(“+”).id(param2))))
return p.parse().lint().render()
通过调用generate_add_function(“myAddFunc”,“x”,“y”),可返回对应的Go代码的字符串,如下:
func myAddFunc(x,y int)int{return x+y}
可以看到,上述实例使用Python语言并按照本申请实施例提供的API接口编写目标代码逻辑,其中在API函数被调用时对代码进行了词法检查,并且对抽象语法树AST进行了语意检查,最后返回该代码逻辑的对应的Go源代码,实现了对目标语言代码逻辑的动态描述。
以上通过多个实施例从不同角度描述了本申请实施例的具体设置和实现方式。与上述至少一个实施例的处理方法相对应地,本申请实施例还提供一种代码生成装置100,参考图3,其包括:
代码处理模块110,用于在第一语言环境下,按照预设的声明式应用程序接口API的描述方式编写第一业务逻辑的代码,所述第一业务逻辑的代码用于描述第一业务逻辑对应的功能,编写完成后得到第一具体语法树,其中所述第一语言包括Python语言;
第一转换模块120,用于基于预定的语法分析算法,将第一具体语法树转换为第一抽象语法树;
第二转换模块130,用于通过解释器将所述第一抽象语法树转换为第二语言代码,所述第二语言代码用于执行所述第一业务逻辑对应的功能,其中所述第二语言包括Go语言。
可选地,参考图4,本申请实施例的代码生成装置100还可包括:
语法检查模块140,用于在所述第一转换模块120将所述第一具体语法树转换为第一抽象语法树的过程中,对所述第一具体语法树进行语法检查。
可选地,参考图4,本申请实施例的代码生成装置100还可包括:
语意分析模块150,用于在所述第一转换模块120将所述第一具体语法树转换为第一抽象语法树之后,对所述第一抽象语法树进行静态语意分析。
可选地,本申请实施例中,声明式API的描述方式与第二语言的代码描述方式具有第一映射关系。
可选地,本申请实施例中,所述第一映射关系为所述第二语言的代码描述方式与所述声明式API的描述方式之间的可倒推关系。
可选地,本申请实施例中,声明式API包括以下至少一种函数:关键字、描述符、字面量、操作符、括号、控制流、内置数据类型、注释。
利用本申请实施例的代码生成方案,使用者可通过例如Python程序动态控制目标代码逻辑,同时具备对代码逻辑的词法检查、语法检查及语意检查的功能,可实现对目标语言代码逻辑的动态描述,且通用性好。
本申请实施例各装置中的各模块的功能可以参见上述方法实施例中的对应描述的处理,在此不再赘述。
根据本申请的实施例,本申请还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
如图5所示,是根据本申请实施例的代码生成方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图5所示,该电子设备包括:一个或多个处理器1001、存储器1002,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示图形用户界面(Graphical User Interface,GUI)的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器***)。图5中以一个处理器1001为例。
存储器1002即为本申请所提供的非瞬时计算机可读存储介质。其中,存储器存储有可由至少一个处理器执行的指令,以使至少一个处理器执行本申请所提供的代码生成方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的代码生成方法。
存储器1002作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的代码生成方法对应的程序指令/模块(例如,附图3所示的代码处理模块110、第一转换模块120和第二转换模块130)。处理器1001通过运行存储在存储器1002中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的代码生成方法。
存储器1002可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储根据搜索结果的分析处理电子设备的使用所创建的数据等。此外,存储器1002可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器1002可选包括相对于处理器1001远程设置的存储器,这些远程存储器可以通过网络连接至搜索结果的分析处理电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例的代码生成方法对应的电子设备还可以包括:输入装置1003和输出装置1004。处理器1001、存储器1002、输入装置1003和输出装置1004可以通过总线或者其他方式连接,本申请图5实施例中以通过总线连接为例。
输入装置1003可接收输入的数字或字符信息,以及产生与搜索结果的分析处理电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置1004可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(Liquid Crystal Display,LCD)、发光二极管(Light EmittingDiode,LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、专用集成电路(Application Specific Integrated Circuits,ASIC)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(programmable logic device,PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的***和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(Cathode Ray Tube,阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)和互联网。
计算机***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,提出了一种使用例如Python实现的基于元编程的目标代码例如Go代码的生成方案,使用者可通过Python程序动态控制目标代码逻辑,进一步,提供了词法、语法及语意检查功能,解决了通过静态文件生成代码的不便以及缺乏通用型的问题。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。
Claims (8)
1.一种代码生成方法,包括:
在第一语言环境下,按照预设的声明式应用程序接口API的描述方式编写第一业务逻辑的代码,所述第一业务逻辑的代码用于描述第一业务逻辑对应的功能,编写完成后得到第一具体语法树,其中所述第一语言包括Python语言;
基于预定的语法分析算法,将所述第一具体语法树转换为第一抽象语法树;
通过解释器将所述第一抽象语法树转换为第二语言代码,所述第二语言代码用于执行所述第一业务逻辑对应的功能,其中所述第二语言包括Go语言;
其中,所述声明式API的描述方式与所述第二语言的代码描述方式具有第一映射关系,所述第一映射关系为所述第二语言的代码描述方式与所述声明式API的描述方式之间的可倒推关系;
所述声明式API包括以下至少一种函数:关键字、描述符、字面量、操作符、括号、控制流、内置数据类型、注释。
2.根据权利要求1所述的方法,在所述将所述第一具体语法树转换为第一抽象语法树的过程中,所述方法还包括:
对所述第一具体语法树进行语法检查。
3.根据权利要求1所述的方法,在所述将所述第一具体语法树转换为第一抽象语法树之后,所述方法还包括:
对所述第一抽象语法树进行静态语意分析。
4.一种代码生成装置,包括:
代码处理模块,用于在第一语言环境下,按照预设的声明式应用程序接口API的描述方式编写第一业务逻辑的代码,所述第一业务逻辑的代码用于描述第一业务逻辑对应的功能,编写完成后得到第一具体语法树,其中所述第一语言包括Python语言;
第一转换模块,用于基于预定的语法分析算法,将所述第一具体语法树转换为第一抽象语法树;
第二转换模块,用于通过解释器将所述第一抽象语法树转换为第二语言代码,所述第二语言代码用于执行所述第一业务逻辑对应的功能,其中所述第二语言包括Go语言;
其中,所述声明式API的描述方式与所述第二语言的代码描述方式具有第一映射关系,所述第一映射关系为所述第二语言的代码描述方式与所述声明式API的描述方式之间的可倒推关系;
其中,所述声明式API包括以下至少一种函数:关键字、描述符、字面量、操作符、括号、控制流、内置数据类型、注释。
5.根据权利要求4所述的装置,还包括:
语法检查模块,用于在所述第一转换模块将所述第一具体语法树转换为第一抽象语法树的过程中,对所述第一具体语法树进行语法检查。
6.根据权利要求4所述的装置,还包括:
语意分析模块,用于在所述第一转换模块将所述第一具体语法树转换为第一抽象语法树之后,对所述第一抽象语法树进行静态语意分析。
7. 一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-3中任一项所述的方法。
8.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-3中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010468473.XA CN111625224B (zh) | 2020-05-28 | 2020-05-28 | 代码生成方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010468473.XA CN111625224B (zh) | 2020-05-28 | 2020-05-28 | 代码生成方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111625224A CN111625224A (zh) | 2020-09-04 |
CN111625224B true CN111625224B (zh) | 2023-11-24 |
Family
ID=72259197
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010468473.XA Active CN111625224B (zh) | 2020-05-28 | 2020-05-28 | 代码生成方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111625224B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11650856B2 (en) * | 2020-06-26 | 2023-05-16 | Red Hat Inc. | Federated operator for edge computing network |
CN114253520B (zh) * | 2020-09-21 | 2024-03-12 | 抖音视界有限公司 | 接口代码生成方法和装置 |
CN112270176B (zh) | 2020-11-09 | 2022-05-03 | 北京百度网讯科技有限公司 | 深度学习框架中模式转换的方法、装置和计算机存储介质 |
CN112486465A (zh) * | 2020-12-11 | 2021-03-12 | 北京字节跳动网络技术有限公司 | 一种代码更新方法及装置 |
CN112860356B (zh) * | 2021-02-10 | 2023-08-15 | 北京百度网讯科技有限公司 | 一种api调用控制方法、装置、电子设备和存储介质 |
CN113157255B (zh) * | 2021-03-22 | 2022-07-05 | 成都淞幸科技有限责任公司 | 一种面向语法树解码器的代码生成方法 |
CN114816467B (zh) * | 2021-03-25 | 2023-04-28 | 北京百度网讯科技有限公司 | 升级文件的生成方法、装置和电子设备 |
CN113342348A (zh) * | 2021-05-27 | 2021-09-03 | 中国工商银行股份有限公司 | 一种基于拓扑图的代码生成方法及装置 |
CN113312057B (zh) * | 2021-06-17 | 2023-10-03 | 上海小熊星教育科技有限公司 | 一种代码处理方法、编程辅助方法、介质及电子设备 |
CN113778440B (zh) * | 2021-08-18 | 2024-01-26 | 上海瑞家信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN114942782A (zh) * | 2021-09-24 | 2022-08-26 | 华为技术有限公司 | 模型的代码迁移方法及装置 |
CN114610317A (zh) * | 2022-03-16 | 2022-06-10 | 北京字节跳动网络技术有限公司 | 代码转换方法、装置、设备及存储介质 |
CN116501303B (zh) * | 2023-06-25 | 2023-11-14 | 北京长亭科技有限公司 | Api代码自动生成方法与装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371997A (zh) * | 2016-09-07 | 2017-02-01 | 网易(杭州)网络有限公司 | 一种代码检查方法及装置 |
CN106919434A (zh) * | 2017-03-22 | 2017-07-04 | 恒生电子股份有限公司 | 一种代码生成方法及装置 |
CN108920133A (zh) * | 2018-06-14 | 2018-11-30 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
WO2018236384A1 (en) * | 2017-06-22 | 2018-12-27 | Archeo Futurus, Inc. | COMPILATION AND OPTIMIZATION OF A COMPUTER CODE BY MINIMIZING A NUMBER OF STATES IN A FINAL MACHINE CORRESPONDING TO THE COMPUTER CODE |
CN110007926A (zh) * | 2019-04-17 | 2019-07-12 | 广东三维家信息科技有限公司 | 语言转换方法及装置 |
CN110109675A (zh) * | 2019-04-30 | 2019-08-09 | 翟红鹰 | 智能合约处理方法、装置以及计算机可读存储介质 |
CN110381135A (zh) * | 2019-07-18 | 2019-10-25 | 北京奇艺世纪科技有限公司 | 接口创建方法、服务请求方法、装置、计算机设备和介质 |
CN110716743A (zh) * | 2019-09-30 | 2020-01-21 | 上海一竹网络科技有限公司 | 一种适合多方协作开发的聚合api开发方法及*** |
CN111158665A (zh) * | 2019-12-27 | 2020-05-15 | 网易(杭州)网络有限公司 | 代码生成方法及装置、电子设备和存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020161907A1 (en) * | 2001-04-25 | 2002-10-31 | Avery Moon | Adaptive multi-protocol communications system |
US10140105B2 (en) * | 2016-03-10 | 2018-11-27 | Wowza Media Systems, LLC | Converting source code |
RU2016137177A (ru) * | 2016-09-16 | 2018-03-19 | Оракл Интернэйшнл Корпорейшн | Усовершенствованное преобразование исходного кода языка программирования |
RU2017110071A (ru) * | 2017-03-24 | 2018-09-24 | Оракл Интернэйшнл Корпорейшн | Преобразование исходного кода языка программирования |
US10545730B2 (en) * | 2018-05-07 | 2020-01-28 | Red Hat, Inc. | Automatically generating code for application programming interfaces |
-
2020
- 2020-05-28 CN CN202010468473.XA patent/CN111625224B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371997A (zh) * | 2016-09-07 | 2017-02-01 | 网易(杭州)网络有限公司 | 一种代码检查方法及装置 |
CN106919434A (zh) * | 2017-03-22 | 2017-07-04 | 恒生电子股份有限公司 | 一种代码生成方法及装置 |
WO2018236384A1 (en) * | 2017-06-22 | 2018-12-27 | Archeo Futurus, Inc. | COMPILATION AND OPTIMIZATION OF A COMPUTER CODE BY MINIMIZING A NUMBER OF STATES IN A FINAL MACHINE CORRESPONDING TO THE COMPUTER CODE |
CN108920133A (zh) * | 2018-06-14 | 2018-11-30 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
CN110007926A (zh) * | 2019-04-17 | 2019-07-12 | 广东三维家信息科技有限公司 | 语言转换方法及装置 |
CN110109675A (zh) * | 2019-04-30 | 2019-08-09 | 翟红鹰 | 智能合约处理方法、装置以及计算机可读存储介质 |
CN110381135A (zh) * | 2019-07-18 | 2019-10-25 | 北京奇艺世纪科技有限公司 | 接口创建方法、服务请求方法、装置、计算机设备和介质 |
CN110716743A (zh) * | 2019-09-30 | 2020-01-21 | 上海一竹网络科技有限公司 | 一种适合多方协作开发的聚合api开发方法及*** |
CN111158665A (zh) * | 2019-12-27 | 2020-05-15 | 网易(杭州)网络有限公司 | 代码生成方法及装置、电子设备和存储介质 |
Non-Patent Citations (4)
Title |
---|
C-Java自动程序转换***的设计;严忠林 等;《计算机技术与发展》;第17卷(第2期);46-49, 134 * |
Extensible intraprocedural flow analysis at the abstract syntax tree level;Emma Söderberg 等;《Science of Computer Programming》;第78卷(第10期);1809-1827 * |
代码生成技术在管理信息***开发中的研究与应用;董玉明;《中国优秀硕士学位论文全文数据库 信息科技辑》(第4期);I138-481 * |
蒋立源等.《编译原理 第3版》.西北工业大学出版社,2005,367-368. * |
Also Published As
Publication number | Publication date |
---|---|
CN111625224A (zh) | 2020-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111625224B (zh) | 代码生成方法、装置、设备及存储介质 | |
EP3923160A1 (en) | Method, apparatus, device and storage medium for training model | |
CN113010181B (zh) | 一种深度学习框架之中算子的部署方法、装置及电子设备 | |
CN112069201A (zh) | 目标数据的获取方法和装置 | |
CN111881387B (zh) | 用于小程序的数据处理方法、装置、设备和介质 | |
US11586425B2 (en) | Method for compilation optimization of hosted app, electronic device and readable storage medium | |
CN111752843A (zh) | 用于确定影响面的方法、装置、电子设备及可读存储介质 | |
US20210398022A1 (en) | Method and apparatus of fusing operators, electronic device and storage medium | |
CN112015468A (zh) | 一种接口文档处理方法、装置、电子设备以及存储介质 | |
US9886251B2 (en) | Optimized compiling of a template function | |
JP2021099771A (ja) | 翻訳方法、装置、電子機器、可読記憶媒体、及びコンピュータープログラム | |
US20210312240A1 (en) | Header Model For Instance Segmentation, Instance Segmentation Model, Image Segmentation Method and Apparatus | |
CN111857825A (zh) | 指令执行方法、装置、电子设备和计算机可读存储介质 | |
CN111639116B (zh) | 数据访问连接会话保护方法以及装置 | |
CN112579096B (zh) | 小程序启动文件的编译、加载方法、装置、设备和介质 | |
CN112379885B (zh) | 小程序编译方法、装置、设备及可读存储介质 | |
CN112270176B (zh) | 深度学习框架中模式转换的方法、装置和计算机存储介质 | |
CN111831317B (zh) | 服务间依赖关系的获取方法、装置、电子设备和存储介质 | |
US20210224139A1 (en) | Method and apparatus for graph computing, electronic device and storage medium | |
EP3958183A1 (en) | Deep learning model adaptation method and apparatus and electronic device | |
CN115563183B (zh) | 查询方法、装置及程序产品 | |
US20210288938A1 (en) | Network Data Processing Method, Apparatus, Electronic Device, and Storage Medium | |
JP7393404B2 (ja) | コンパイル方法、コンパイル装置、電子デバイス、記憶媒体及びプログラム | |
CN111506268B (zh) | 代码文件存储方法、装置和电子设备 | |
CN111291201B (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 |