CN116560642A - 代码生成方法及其装置、电子设备及存储介质 - Google Patents

代码生成方法及其装置、电子设备及存储介质 Download PDF

Info

Publication number
CN116560642A
CN116560642A CN202310532991.7A CN202310532991A CN116560642A CN 116560642 A CN116560642 A CN 116560642A CN 202310532991 A CN202310532991 A CN 202310532991A CN 116560642 A CN116560642 A CN 116560642A
Authority
CN
China
Prior art keywords
code
template
code generation
corpus
class
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.)
Pending
Application number
CN202310532991.7A
Other languages
English (en)
Inventor
刘博�
张建荣
朱宇戈
魏亚东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202310532991.7A priority Critical patent/CN116560642A/zh
Publication of CN116560642A publication Critical patent/CN116560642A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • G06F8/355Round-trip engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种代码生成方法及其装置、电子设备及存储介质,涉及金融科技技术领域,其中,该方法包括:响应代码生成请求,基于检索关键词查询语料库,得到模板查询结果以及与检索关键词对应的语料类,在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成代码片段或者代码文件;在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成代码片段或者代码文件,本发明解决了相关技术中抽象出的代码模板无法适应各类型构件的代码开发,生成代码效率较低的技术问题。

Description

代码生成方法及其装置、电子设备及存储介质
技术领域
本发明涉及金融科技领域或其他相关技术领域,具体而言,涉及一种代码生成方法及其装置、电子设备及存储介质。
背景技术
开发人员在编码过程中,经常会碰到写模板代码的情况,大到***框架,小到某一段代码的实现,当前,在写模板代码时,业内也提供了很多落地方案,帮助开发人员节省编写开始时间,例如,框架的脚手架,可基于比如SpringBoot框架和Maven方式生成二次开发的框架,或者,如MybatisPlus自动生成代码插件,基于Mybatis抽象的模板式代码组织方式,自动按规则生成相关基础代码。
相关技术中,对于模板代码开发场景,在实际的开发中还有许多(比如连接池的生成、单例对象的生成)。这些模板代码开发有一个共同的点:即通过高度抽象,形成模板化的代码组织方式,让开发人员关注点在业务开发上。
但是相关技术中的模板代码开发存在明显的弊端:自动生成代码的能力仅限在几个高关注度的框架和组件上,无法根据特定需求框架或者组件自动生成代码,同时,对不同构件的代码模板进行抽象定义,导致抽象出代码模板无法适应各类型构件的代码开发,自动化生成代码效率较低。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种代码生成方法及其装置、电子设备及存储介质,以至少解决相关技术中抽象出的代码模板无法适应各类型构件的代码开发,生成代码效率较低的技术问题。
根据本发明实施例的一个方面,提供了一种代码生成方法,包括:接收代码生成请求,其中,所述代码生成请求中携带有业务终端输入的检索关键词;响应所述代码生成请求,基于所述检索关键词查询预设语料库,得到模板查询结果以及与所述检索关键词对应的语料类,其中,所述预设语料库中包含N个代码生成模板,N为正整数,所述语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,所述构件生成类用于生成代码文件,所述代码片段的生成类用于生成代码片段;在所述模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用所述目标代码生成模板,并基于所述目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;在所述模板查询结果指示不存在目标代码生成模板的情况下,基于所述预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于所述代码语法树生成目标代码片段或者目标代码文件,其中,所述预设语法结构为编辑代码语料使用的所述目标程序语言所指定的语法结构。
可选地,基于所述检索关键词查询预设语料库,得到模板查询结果以及与所述检索关键词对应的语料类的步骤,包括:在所述检索关键词的数量大于预设数值的情况下,对所述代码生成请求中携带的所述检索关键词进行组合,得到组合关键词;由所述组合关键词索引所述预设语料库,得到索引结果;在所述索引结果指示所述预设语料库中存在某一代码生成模板的语料词与所述组合关键词一致的情况下,确认所述预设语料库存在目标代码生成模板,并将确认信息赋予所述模板查询结果;在所述索引结果指示所述预设语料库中不存在任一代码生成模板的语料词与所述组合关键词一致的情况下,确认所述预设语料库不存在目标代码生成模板,并将确认信息赋予所述模板查询结果。
可选地,在接收代码生成请求之后,还包括:接收关联所述检索关键词的语料选项集合,其中,所述语料选项集合包括下述至少之一:注解语料选项、继承语料选项、方法体选项,所述注解语料选项包括:是否注解选项、注解说明选项、注解使用范围,所述继承语料选项包括:是否继承选项、继承类或接口、继承类型,所述方法体选项包括:方法修饰符、方法名称、方法参数签名;基于所述语料选项集合以及所述模板查询结果,确认是否能够调用所述目标代码生成模板。
可选地,在接收代码生成请求之前,还包括:获取历史过程中已构建的二方库和三方库,其中,所述二方库为机构内部自身构建的代码库,所述三方库为非金融机构之外的第三方机构所构建的代码库;提取所述二方库和所述三方库中关联每个代码构件的代码生成点或者关联代码片段的代码生成点;获取历史过程中已构建的所有代码生成模板;基于所有所述代码生成点和所述代码生成模板,构建所述预设语料库。
可选地,在基于所有所述代码生成点和所述代码生成模板,构建所述预设语料库之后,还包括:抽取每个所述代码生成模板的模板关键词;对所述模板关键词进行任意组合,得到组合关键词集合;建立所述组合关键词集合中每个组合关键词与所述代码生成模板之间的映射关系。
可选地,在构建所述代码生成模板时,包括:获取已知的所有代码构件,其中,每个所述代码构件包含至少一个功能模块,每个所述功能模块对应一个构件功能;获取每个所述代码构件的所有构件功能,得到构件功能集;基于所述构件功能集定义所述代码生成模板的第一类模板边界,其中,所述第一类模板边界用于描述所述代码生成模板所实现构件功能的功能状态。
可选地,在构建所述代码生成模板时,还包括:获取每个所述代码构件在调用目标程序语言时的调用接口和/或调用类,其中,所述调用接口和/或调用类用于确定所述代码生成模板的代码生成策略;基于所述调用接口和/或调用类定义所述代码生成模板的第二类模板边界,其中,所述第二类模板边界用于描述所述代码生成模板所实现构件功能的代码块生成策略。
可选地,在构建所述代码生成模板时,还包括:获取每个所述代码构件在进行业务代码扩展时使用的指定类以及关联所述指定类的类关联信息;基于所述指定类以及所述类关联信息定义所述代码生成模板的第三类模板边界,其中,所述第三类模板边界用于描述所述代码生成模板所实现构件功能的类关联文件。
可选地,所述代码语法树中包括下述至少之一:类描述、属性描述以及代码块结构。
根据本发明实施例的另一方面,还提供了一种代码生成装置,包括:接收单元,用于接收代码生成请求,其中,所述代码生成请求中携带有业务终端输入的检索关键词;查询单元,用于响应所述代码生成请求,基于所述检索关键词查询预设语料库,得到模板查询结果以及与所述检索关键词对应的语料类,其中,所述预设语料库中包含N个代码生成模板,N为正整数,所述语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,所述构件生成类用于生成代码文件,所述代码片段的生成类用于生成代码片段;第一生成单元,用于在所述模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用所述目标代码生成模板,并基于所述目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;第二生成单元,用于在所述模板查询结果指示不存在目标代码生成模板的情况下,基于所述预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于所述代码语法树生成目标代码片段或者目标代码文件,其中,所述预设语法结构为编辑代码语料使用的所述目标程序语言所指定的语法结构。
可选地,所述查询单元包括:第一组合模块,用于在所述检索关键词的数量大于预设数值的情况下,对所述代码生成请求中携带的所述检索关键词进行组合,得到组合关键词;第一索引模块,用于由所述组合关键词索引所述预设语料库,得到索引结果;第一确认模块,用于在所述索引结果指示所述预设语料库中存在某一代码生成模板的语料词与所述组合关键词一致的情况下,确认所述预设语料库存在目标代码生成模板,并将确认信息赋予所述模板查询结果;第二确认模块,用于在所述索引结果指示所述预设语料库中不存在任一代码生成模板的语料词与所述组合关键词一致的情况下,确认所述预设语料库不存在目标代码生成模板,并将确认信息赋予所述模板查询结果。
可选地,代码生成装置还包括:第一接收模块,用于在接收代码生成请求之后,接收关联所述检索关键词的语料选项集合,其中,所述语料选项集合包括下述至少之一:注解语料选项、继承语料选项、方法体选项,所述注解语料选项包括:是否注解选项、注解说明选项、注解使用范围,所述继承语料选项包括:是否继承选项、继承类或接口、继承类型,所述方法体选项包括:方法修饰符、方法名称、方法参数签名;第三确认模块,用于基于所述语料选项集合以及所述模板查询结果,确认是否能够调用所述目标代码生成模板。
可选地,代码生成装置还包括:第一获取模块,用于在接收代码生成请求之前,获取历史过程中已构建的二方库和三方库,其中,所述二方库为机构内部自身构建的代码库,所述三方库为非金融机构之外的第三方机构所构建的代码库;第一提取模块,用于提取所述二方库和所述三方库中关联每个代码构件的代码生成点或者关联代码片段的代码生成点;第二获取模块,用于获取历史过程中已构建的所有代码生成模板;第一构建模块,用于基于所有所述代码生成点和所述代码生成模板,构建所述预设语料库。
可选地,代码生成装置还包括:第一抽取模块,用于在基于所有所述代码生成点和所述代码生成模板,构建所述预设语料库之后,抽取每个所述代码生成模板的模板关键词;第二组合模块,用于对所述模板关键词进行任意组合,得到组合关键词集合;第一建立模块,用于建立所述组合关键词集合中每个组合关键词与所述代码生成模板之间的映射关系。
可选地,代码生成装置在构建所述代码生成模板时,包括:第三获取模块,用于获取已知的所有代码构件,其中,每个所述代码构件包含至少一个功能模块,每个所述功能模块对应一个构件功能;第四获取模块,用于获取每个所述代码构件的所有构件功能,得到构件功能集;第一定义模块,用于基于所述构件功能集定义所述代码生成模板的第一类模板边界,其中,所述第一类模板边界用于描述所述代码生成模板所实现构件功能的功能状态。
可选地,代码生成装置在构建所述代码生成模板时,还包括:第五获取模块,用于获取每个所述代码构件在调用目标程序语言时的调用接口和/或调用类,其中,所述调用接口和/或调用类用于确定所述代码生成模板的代码生成策略;第二定义模块,用于基于所述调用接口和/或调用类定义所述代码生成模板的第二类模板边界,其中,所述第二类模板边界用于描述所述代码生成模板所实现构件功能的代码块生成策略。
可选地,代码生成装置在构建所述代码生成模板时,还包括:第六获取模块,用于获取每个所述代码构件在进行业务代码扩展时使用的指定类以及关联所述指定类的类关联信息;第三定义模块,用于基于所述指定类以及所述类关联信息定义所述代码生成模板的第三类模板边界,其中,所述第三类模板边界用于描述所述代码生成模板所实现构件功能的类关联文件。
可选地,所述代码语法树中包括下述至少之一:类描述、属性描述以及代码块结构。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任意一项所述代码生成方法。
根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述任意一项所述代码生成方法。
本公开中,在接收代码生成请求后,响应代码生成请求,基于检索关键词查询预设语料库,得到模板查询结果以及与检索关键词对应的语料类,语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,构件生成类用于生成代码文件,代码片段的生成类用于生成代码片段,在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成目标代码片段或者目标代码文件,其中,预设语法结构为编辑代码语料使用的目标程序语言所指定的语法结构。
本公开中,可以对各类型的构件建立对应的代码生成模板,对涉及到模板的请求,直接根据代码生成模板实现自动化生成代码片段或者代码文件,而对于一些特殊的自定义语料描述信息,无法查询到模板的情况,则通过构建语法树自动化生成代码片段或者代码文件,这样不仅能够使得抽象出的代码模板适应各类型构件的代码开发,而且对于一些自定义的代码语料描述信息也能快速生成代码,提升代码开发效率,从而解决相关技术中抽象出的代码模板无法适应各类型构件的代码开发,生成代码效率较低的技术问题。
本公开中,在通过对已有构件功能界定的划分,使用自定义语料解析DSL语言,对一些有明显需求的框架或者组件能完成自动生成,且对不同构件的模板进行抽象定义,对代码进行自动生成实现,这样使开发人员在熟悉相关的构件接口的基础上,可以将关注点更多集中在业务代码开发,大大提高代码开发效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的代码生成方法的流程图;
图2是根据本发明实施例的一种可选的自动化生成代码的示意图;
图3是根据本发明实施例的一种可选的代码生成装置的示意图;
图4是根据本发明实施例的一种用于代码生成方法的电子设备(或移动设备)的硬件结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为便于本领域技术人员理解本发明,下面对本发明各实施例中涉及的部分术语或名词做出解释:
DSL,Domain-Specific Language,领域特定语言,是一种旨在特定领域下的上下文的语言。
二方库,是由公司或者企业内部开发的可重复使用的代码库,旨在公司内部开发人员使用时提升代码开发效率。
三方库,是指由第三方开发的可重复使用的代码库,是由独立软件开发者封装整合的函数体系,能够帮助开发者快速解决和优化项目,尤其是在不能进行自定义编程或在新技术上要求很高时。
构件,面向软件架构的可复用模块,通常是一个独立的可执行程序,它能够在应用、服务或多个***之间共享功能和数据。
语料库,将二方库、三方库等已有的相关构件代码作为实现上层特定功能的原料来源,就像仓库中的物资,提供原材料补充。
需要说明的是,本公开中的代码生成方法及其装置可用于金融科技技术领域在基于金融科技领域对自动化实现模板代码开发的情况下,也可用于除金融科技技术领域之外的任意领域在对自动化实现模板代码开发的情况下,本公开中对代码生成方法及其装置的应用领域不做限定。
需要说明的是,本公开所涉及的相关信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。例如,本***和相关用户或机构间设置有接口,在获取相关信息之前,需要通过接口向前述的用户或机构发送获取请求,并在接收到前述的用户或机构反馈的同意信息后,获取相关信息。
本发明下述各实施例可应用于各种基于语料库实现代码自动生成的***/应用/设备中。本发明在通过对已有构件功能界定的划分,使用自定义语料解析DSL语言,对一些有明显需求的框架或者组件能完成自动生成,且对不同构件的模板进行抽象定义,对代码进行自动生成实现,这样使开发人员在熟悉相关的构件接口的基础上,可以将关注点更多集中在业务代码开发,大大提高代码开发效率。
下面结合各个实施例来详细说明本发明。
实施例一
根据本发明实施例,提供了一种代码生成方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种可选的代码生成方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101,接收代码生成请求,其中,代码生成请求中携带有业务终端输入的检索关键词;
步骤S102,响应代码生成请求,基于检索关键词查询预设语料库,得到模板查询结果以及与检索关键词对应的语料类,其中,预设语料库中包含N个代码生成模板,N为正整数,语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,构件生成类用于生成代码文件,代码片段的生成类用于生成代码片段;
步骤S103,在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;
步骤S104,在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成目标代码片段或者目标代码文件,其中,预设语法结构为编辑代码语料使用的目标程序语言所指定的语法结构。
通过上述步骤,可以在接收代码生成请求后,响应代码生成请求,基于检索关键词查询预设语料库,得到模板查询结果以及与检索关键词对应的语料类,语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,构件生成类用于生成代码文件,代码片段的生成类用于生成代码片段,在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成目标代码片段或者目标代码文件,其中,预设语法结构为编辑代码语料使用的目标程序语言所指定的语法结构。在该实施例中,可以对各类型的构件建立对应的代码生成模板,对涉及到模板的请求,直接根据代码生成模板实现自动化生成代码片段或者代码文件,而对于一些特殊的自定义语料描述信息,无法查询到模板的情况,则通过构建语法树自动化生成代码片段或者代码文件,这样不仅能够使得抽象出的代码模板适应各类型构件的代码开发,而且对于一些自定义的代码语料描述信息也能快速生成代码,提升代码开发效率,从而解决相关技术中抽象出的代码模板无法适应各类型构件的代码开发,生成代码效率较低的技术问题。
下面结合上述各步骤对本发明实施例进行详细说明。
在实时使用代码生成模板之前,需要构建与各个类型的构件对应的代码生成模板。同时,由于本发明实施例中在自动化生成代码时,需要使用到语料信息DSL,因此需要预先构建预设语料库,下面分别结合代码生成模板以及构建预设语料库的过程进行示意性说明。
第一种,构建代码生成模板,定义模板边界。
需要说明的是,本实施例在定义构件不同代码生成模板的时候,需要对创建的内容进行边界约定。
平时进行代码开发的过程中,在使用一些中间构件的时候,开发人员关注的并不是构件具体的实现细节和实现方式,更关注的是构件的对外接口如何定义,如何设置参数,如何通过注解的方式将构件实例化并引入到现有的业务代码之中,因此,本实施例需要对抽象模板的构件进行边界的约定或者设定。
模板边界的约定,本质是保证在同一个约定的代码生成模板上,从语言种类、支持的工具集,用目标程序语言(或者目标编程语言,例如,python或者Java)转化生成最终代码。
在模板的边界约定上,可以从约定功能的功能状态(功能大小)、生成方式(包括代码块生成策略和类相关文件)和语言差异性上进行划分。
可选地,在构建代码生成模板时,包括:获取已知的所有代码构件,其中,每个代码构件包含至少一个功能模块,每个功能模块对应一个构件功能;获取每个代码构件的所有构件功能,得到构件功能集;基于构件功能集定义代码生成模板的第一类模板边界,其中,第一类模板边界用于描述代码生成模板所实现构件功能的功能状态。
其中,第一类模板边界是约定模板所实现构件功能的功能状态,功能状态/功能的“大小”,是指从已有构件本身的功能集上,约定模板边界描述。一个构件本身,可能包含多个功能模块,如多数据源定义功能、多租户功能、抽象模板化的预定义功能等,根据不同功能本身进行边界约定。
可选地,在构建代码生成模板时,还包括:获取每个代码构件在调用目标程序语言时的调用接口和/或调用类,其中,调用接口和/或调用类用于确定代码生成模板的代码生成策略;基于调用接口和/或调用类定义代码生成模板的第二类模板边界,其中,第二类模板边界用于描述代码生成模板所实现构件功能的代码块生成策略。
其中,第二类模板边界是约定模板所实现构件功能的代码块生成策略,生成的代码块是相对较小的一个生成单元,通过构件的一个接口或者类,调用相关方法生成代码,比如线程池代码片段,这时,设定的模板边界,就是接口、类以及相关方法定义即可。
可选地,在构建代码生成模板时,还包括:获取每个代码构件在进行业务代码扩展时使用的指定类以及关联指定类的类关联信息;基于指定类以及类关联信息定义代码生成模板的第三类模板边界,其中,第三类模板边界用于描述代码生成模板所实现构件功能的类关联文件。
其中,第二类模板边界是约定模板所实现构件功能的类关联文件。类关联文件是指在平时开发业务开发的时候,需要通过在特定的类上进行业务代码的扩展的文件,比如像行内的DBF框架,需要通过自定义类,并且通过注解和继承相关接口,在相关的继承方法体上进行业务的实现。这时,在设定模板边界上,就涉及类对象以及针对类的关联文件描述。
另一种可选的,在构建代码生成模板时,还需要考虑不同编程语言之间的差异,从兼容语言的差异性上,例如,在JAVA语言和Python语言定义中,因为本身目标程序语言的差异,在设计上从参数类型、参数名称上略有差异。在定义这类构件,进行边界约定时,需要抽取共有可用的最小集合,同时又要保证完整性。
第二种,构建预设语料库。
其中,预设语料库,是指是基于现有的二方库和三方库,将现在已经存在的代码以某种固有形式进行落库存储,作为后续生成代码的“基料”。
可选地,在接收代码生成请求之前,还包括:获取历史过程中已构建的二方库和三方库,其中,二方库为机构内部自身构建的代码库,三方库为非金融机构之外的第三方机构所构建的代码库;提取二方库和三方库中关联每个代码构件的代码生成点或者关联代码片段的代码生成点;获取历史过程中已构建的所有代码生成模板;基于所有代码生成点和代码生成模板,构建预设语料库。
在定义“语料”时,需要对关注的代码生成点进行抽象定义。代码在生成时,会关注针对某个构件的类文件生成或者是某一个代码片段的生成两大类。使用DSL语言,通过自定义描述方式,对即将需要生成的方式进行抽象定义。同时结合历史过程中已构建的所有代码生成模板以及所有代码生成点,构建预设语料库。
可选地,在基于所有代码生成点和代码生成模板,构建预设语料库之后,还包括:抽取每个代码生成模板的模板关键词;对模板关键词进行任意组合,得到组合关键词集合;建立组合关键词集合中每个组合关键词与代码生成模板之间的映射关系。
在构建映射关系上,通过预设定关键字的方式,将不同抽象的模板通过关键字进行定义,可以定义单个或者多个关键字组合进行约定。
可选地,在抽取每个代码生成模板的模板关键词时,需要根据模板的复杂度,区分为带含义的表述和快捷性质的描述。如在IDEA中,经常用到“psvm”关键字自动创建JAVA的main函数。同样对功能单一无重样性的模板,通过定义唯一性质的名称对其进行关键字描述。
带含义的关键字,往往模板本身的含义较多,用多个关键字组合的方式定义。“thread”,用来表示需要创建线程。“thread pool”,组合用来表示线程池的创建,“threadpool single”,组合用来表示单线程的线程池创建。
通过建立模板与组合关键词之间的映射关系,便于后续在实时使用代码生成模板,能够通过组合关键词中任意一个或者多项关键词搜索得到对应的代码生成模板,提升代码生成模板的查找效率,提升模板使用效率,缩短模板查询时间。
下面结合实时使用模板以及自定义语料描述情况下的代码生成方式进行说明。
步骤S101,接收代码生成请求,其中,代码生成请求中携带有业务终端输入的检索关键词。
可选地,在接收代码生成请求之后,还包括:接收关联检索关键词的语料选项集合,其中,语料选项集合包括下述至少之一:注解语料选项、继承语料选项、方法体选项,注解语料选项包括:是否注解选项、注解说明选项、注解使用范围,继承语料选项包括:是否继承选项、继承类或接口、继承类型,方法体选项包括:方法修饰符、方法名称、方法参数签名;基于语料选项集合以及模板查询结果,确认是否能够调用目标代码生成模板。
本实施例中,开发人员在进行代码自动化开发时,会先查找是否有可用的模板,查找时需要使用检索关键词,下面对可以使用的检索关键词进行示意说明。
通过自定义描述方式,对即将需要生成的方式进行抽象定义。主要设定几个检索关键词:
name,名称标识,用以标识“语料”片段的名称描述。
keyword,关键字,用于外部检索时的关键字,支持多个同时定义,用符号“|”进行分割。
content,“语料”自定义DSL描述内容体,对需要生成的代码片段或文件内容进行描述。
其中,上述的name和keyword是选择代码生成模块的必要检索关键词,而content是可选的,在开发人员由特殊的代码开发需求时,需要通过代码语法树来生成代码,即对一些有明显需求的框架或者组件能完成自动生成代码。
上述的content可以包含的语料选项包括但不限于:
annotation:是否包含注解,以及对需要添加注解的说明。
annotationType:注解使用范围,使用“TYPE”或者“METHOD”,用于解释是描述在生成的类上或者方法体上。
template:模板文件路径,可能涉及到的模板文件,用于生成。
classContent:生成类文件体描述关键字,包含以下几个关键字,用于描述待生成类文件的相关属性:
superClass:用于描述是否包含需要继承的类或者接口,以及名称。
extendType:继承类型,是通过接口或者类继承的关键字。
methodContent:生成方法体描述关键字,包含以下几个关键字,用于描述待生成犯法的相关属性:
declared:方法修饰符,用于描述方法的访问范围。
name:方法名称。
parameters:方法的参数签名,多个参数,通过数组方式描述,同时包含签名的类型。
通过DSL语言,对需要落库的语言进行抽象描述,确定可供开发人员选取的语料选项,作为后续代码生成的基础。
步骤S102,响应代码生成请求,基于检索关键词查询预设语料库,得到模板查询结果以及与检索关键词对应的语料类。
可选地,步骤S102包括:在检索关键词的数量大于预设数值的情况下,对代码生成请求中携带的检索关键词进行组合,得到组合关键词;由组合关键词索引预设语料库,得到索引结果;在索引结果指示预设语料库中存在某一代码生成模板的语料词与组合关键词一致的情况下,确认预设语料库存在目标代码生成模板,并将确认信息赋予模板查询结果;在索引结果指示预设语料库中不存在任一代码生成模板的语料词与组合关键词一致的情况下,确认预设语料库不存在目标代码生成模板,并将确认信息赋予模板查询结果。
上述的预设数值可以自行设置,例如,将预设数值设置为1。对于大于该预设数量的多个检索关键词可以进行单一关键词检索,也可以进行多个关键词组合检索,检索内容更为多样化,能够更快查询到开发人员想要的模板。
需要说明的是,本实施例对于预设语料库中包含的代码生成模板的总数量不作具体限定,每个构件对应一个或者多个可用的代码生成模板,根据不同企业或者公司的开发代码情况自行设置。
步骤S103,在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件。
对于一些可以调用代码生成模板的检索,例如,需要创建单线程或者单线程的线程池的创建的内容,能够直接调用语料库中预先存储的各个代码生成模板。
在调用代码生成模板后,可以接收开发终端输入对该模板上一些属性参数的修改操作,得到模板更新参数,由该模板更新参数以及原代码生成模板定义的构件代码生成代码片段或者代码文件。
其中,对于上述语料类为与指定构件关联的构件生成类的情况下,生成的代码文件,对于上述语料类为代码片段的生成类的情况下,生成的是代码片段。
步骤S104,在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成目标代码片段或者目标代码文件,其中,预设语法结构为编辑代码语料使用的目标程序语言所指定的语法结构。
对于一些开发人员由特定需求的代码开发,或者对于明显需求的框架或者组件,需要通过语料库中已有记录的语料、程序语言以及语法结构,构建代码语法树,通过解析代码语法树,完成自动生成代码。这样通过高度抽象,形成代码语法树的代码组织方式,让开发人员关注点在业务开发上。
可选地,代码语法树中包括下述至少之一:类描述、属性描述以及代码块结构。
可选地,上述通过代码生成模板或者代码语法树生成代码文件或代码片段时,可以调用代码生成器自动化生成,提升代码生成效率,节省代码开发时间。
图2是根据本发明实施例的一种可选的自动化生成代码的示意图,如图2所示,在代码生成方式上,按照DSL约定的语法结构,通过分析DSL约定的语法,结合模板和文件动态生成技术,生成对应的代码片段或者代码文件。
如图2所示,通过语法解析器对开发人员输入的检索关键词以及语料选项集合进行解析,解析时,调用语料库“DSL”语法,即根据上述“DSL”语法的定义,进行语法解析。
在解析后,如果能够检索到对应的代码生成模板,则直接调用该代码生成模板,通过代码生成器,结合已有的模板文件,动态生态生成目标代码片段或文件。
在解析后,如果无法检索到对应的代码生成模板,需要结合选定的目标语言、语法结构,生成AST语法树结构。AST抽象语法树,包含类描述、属性描述、代码块基本结构,由代码生成器直接通过该代码语法树直接生成代码片段或代码文件。
通过上述实施例,可以通过对已有构件功能界定的划分,使用自定义DSL语言,通过代码生成模板或者代码语法树,实现自动化生成代码,这样使开发人员在熟悉相关的构件接口的基础上,可以将关注点更多集中在业务代码开发,一定程度上提高开发效率。
下面结合另一种可选的具体实施方式进行详细说明。
下面结合另一实施例进行详细说明。
实施例二
本实施例中提供的一种代码生成装置包含了多个实施单元,每个实施单元对应于上述实施例一中的各个实施步骤。
图3是根据本发明实施例的一种可选的代码生成装置的示意图,如图3所示,该代码生成装置可以包括:接收单元30,查询单元31,第一生成单元32,第二生成单元33,其中,
接收单元30,用于接收代码生成请求,其中,代码生成请求中携带有业务终端输入的检索关键词;
查询单元31,用于响应代码生成请求,基于检索关键词查询预设语料库,得到模板查询结果以及与检索关键词对应的语料类,其中,预设语料库中包含N个代码生成模板,N为正整数,语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,构件生成类用于生成代码文件,代码片段的生成类用于生成代码片段;
第一生成单元32,用于在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;
第二生成单元33,用于在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成目标代码片段或者目标代码文件,其中,预设语法结构为编辑代码语料使用的目标程序语言所指定的语法结构。
上述代码生成装置,可以通过接收单元30接收代码生成请求,其中,代码生成请求中携带有业务终端输入的检索关键词,然后通过查询单元31,用于响应代码生成请求,基于检索关键词查询预设语料库,得到模板查询结果以及与检索关键词对应的语料类,通过第一生成单元32在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件,通过第二生成单元33在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成目标代码片段或者目标代码文件,其中,预设语法结构为编辑代码语料使用的目标程序语言所指定的语法结构。在该实施例中,可以对各类型的构件建立对应的代码生成模板,对涉及到模板的请求,直接根据代码生成模板实现自动化生成代码片段或者代码文件,而对于一些特殊的自定义语料描述信息,无法查询到模板的情况,则通过构建语法树自动化生成代码片段或者代码文件,这样不仅能够使得抽象出的代码模板适应各类型构件的代码开发,而且对于一些自定义的代码语料描述信息也能快速生成代码,提升代码开发效率,从而解决相关技术中抽象出的代码模板无法适应各类型构件的代码开发,生成代码效率较低的技术问题。
可选地,查询单元包括:第一组合模块,用于在检索关键词的数量大于预设数值的情况下,对代码生成请求中携带的检索关键词进行组合,得到组合关键词;第一索引模块,用于由组合关键词索引预设语料库,得到索引结果;第一确认模块,用于在索引结果指示预设语料库中存在某一代码生成模板的语料词与组合关键词一致的情况下,确认预设语料库存在目标代码生成模板,并将确认信息赋予模板查询结果;第二确认模块,用于在索引结果指示预设语料库中不存在任一代码生成模板的语料词与组合关键词一致的情况下,确认预设语料库不存在目标代码生成模板,并将确认信息赋予模板查询结果。
可选地,代码生成装置还包括:第一接收模块,用于在接收代码生成请求之后,接收关联检索关键词的语料选项集合,其中,语料选项集合包括下述至少之一:注解语料选项、继承语料选项、方法体选项,注解语料选项包括:是否注解选项、注解说明选项、注解使用范围,继承语料选项包括:是否继承选项、继承类或接口、继承类型,方法体选项包括:方法修饰符、方法名称、方法参数签名;第三确认模块,用于基于语料选项集合以及模板查询结果,确认是否能够调用目标代码生成模板。
可选地,代码生成装置还包括:第一获取模块,用于在接收代码生成请求之前,获取历史过程中已构建的二方库和三方库,其中,二方库为机构内部自身构建的代码库,三方库为非金融机构之外的第三方机构所构建的代码库;第一提取模块,用于提取二方库和三方库中关联每个代码构件的代码生成点或者关联代码片段的代码生成点;第二获取模块,用于获取历史过程中已构建的所有代码生成模板;第一构建模块,用于基于所有代码生成点和代码生成模板,构建预设语料库。
可选地,代码生成装置还包括:第一抽取模块,用于在基于所有代码生成点和代码生成模板,构建预设语料库之后,抽取每个代码生成模板的模板关键词;第二组合模块,用于对模板关键词进行任意组合,得到组合关键词集合;第一建立模块,用于建立组合关键词集合中每个组合关键词与代码生成模板之间的映射关系。
可选地,代码生成装置在构建代码生成模板时,包括:第三获取模块,用于获取已知的所有代码构件,其中,每个代码构件包含至少一个功能模块,每个功能模块对应一个构件功能;第四获取模块,用于获取每个代码构件的所有构件功能,得到构件功能集;第一定义模块,用于基于构件功能集定义代码生成模板的第一类模板边界,其中,第一类模板边界用于描述代码生成模板所实现构件功能的功能状态。
可选地,代码生成装置在构建代码生成模板时,还包括:第五获取模块,用于获取每个代码构件在调用目标程序语言时的调用接口和/或调用类,其中,调用接口和/或调用类用于确定代码生成模板的代码生成策略;第二定义模块,用于基于调用接口和/或调用类定义代码生成模板的第二类模板边界,其中,第二类模板边界用于描述代码生成模板所实现构件功能的代码块生成策略。
可选地,代码生成装置在构建代码生成模板时,还包括:第六获取模块,用于获取每个代码构件在进行业务代码扩展时使用的指定类以及关联指定类的类关联信息;第三定义模块,用于基于指定类以及类关联信息定义代码生成模板的第三类模板边界,其中,第三类模板边界用于描述代码生成模板所实现构件功能的类关联文件。
可选地,代码语法树中包括下述至少之一:类描述、属性描述以及代码块结构。
上述的代码生成装置还可以包括处理器和存储器,上述接收单元30,查询单元31,第一生成单元32,第二生成单元33等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
上述处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来自动化生成目标代码片段或者目标代码文件将对比结果发送至目标终端。
上述存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任意一项所述代码生成方法。
根据本发明实施例的另一方面,还提供了一种电子设备,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述任意一项所述代码生成方法。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:接收代码生成请求,其中,代码生成请求中携带有业务终端输入的检索关键词;响应代码生成请求,基于检索关键词查询预设语料库,得到模板查询结果以及与检索关键词对应的语料类,其中,预设语料库中包含N个代码生成模板,N为正整数,语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,构件生成类用于生成代码文件,代码片段的生成类用于生成代码片段;在模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用目标代码生成模板,并基于目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;在模板查询结果指示不存在目标代码生成模板的情况下,基于预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于代码语法树生成目标代码片段或者目标代码文件,其中,预设语法结构为编辑代码语料使用的目标程序语言所指定的语法结构。
图4是根据本发明实施例的一种用于代码生成方法的电子设备(或移动设备)的硬件结构框图。如图4所示,电子设备可以包括一个或多个(图4中采用402a、402b,……,402n来示出)处理器402(处理器402可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器404。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、键盘、电源和/或相机。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,电子设备还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (12)

1.一种代码生成方法,其特征在于,包括:
接收代码生成请求,其中,所述代码生成请求中携带有业务终端输入的检索关键词;
响应所述代码生成请求,基于所述检索关键词查询预设语料库,得到模板查询结果以及与所述检索关键词对应的语料类,其中,所述预设语料库中包含N个代码生成模板,N为正整数,所述语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,所述构件生成类用于生成代码文件,所述代码片段的生成类用于生成代码片段;
在所述模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用所述目标代码生成模板,并基于所述目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;
在所述模板查询结果指示不存在目标代码生成模板的情况下,基于所述预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于所述代码语法树生成目标代码片段或者目标代码文件,其中,所述预设语法结构为编辑代码语料使用的所述目标程序语言所指定的语法结构。
2.根据权利要求1所述的生成方法,其特征在于,基于所述检索关键词查询预设语料库,得到模板查询结果以及与所述检索关键词对应的语料类的步骤,包括:
在所述检索关键词的数量大于预设数值的情况下,对所述代码生成请求中携带的所述检索关键词进行组合,得到组合关键词;
由所述组合关键词索引所述预设语料库,得到索引结果;
在所述索引结果指示所述预设语料库中存在某一代码生成模板的语料词与所述组合关键词一致的情况下,确认所述预设语料库存在目标代码生成模板,并将确认信息赋予所述模板查询结果;
在所述索引结果指示所述预设语料库中不存在任一代码生成模板的语料词与所述组合关键词一致的情况下,确认所述预设语料库不存在目标代码生成模板,并将确认信息赋予所述模板查询结果。
3.根据权利要求1所述的生成方法,其特征在于,在接收代码生成请求之后,还包括:
接收关联所述检索关键词的语料选项集合,其中,所述语料选项集合包括下述至少之一:注解语料选项、继承语料选项、方法体选项,所述注解语料选项包括:是否注解选项、注解说明选项、注解使用范围,所述继承语料选项包括:是否继承选项、继承类或接口、继承类型,所述方法体选项包括:方法修饰符、方法名称、方法参数签名;
基于所述语料选项集合以及所述模板查询结果,确认是否能够调用所述目标代码生成模板。
4.根据权利要求1所述的生成方法,其特征在于,在接收代码生成请求之前,还包括:
获取历史过程中已构建的二方库和三方库,其中,所述二方库为机构内部自身构建的代码库,所述三方库为非金融机构之外的第三方机构所构建的代码库;
提取所述二方库和所述三方库中关联每个代码构件的代码生成点或者关联代码片段的代码生成点;
获取历史过程中已构建的所有代码生成模板;
基于所有所述代码生成点和所述代码生成模板,构建所述预设语料库。
5.根据权利要求4所述的生成方法,其特征在于,在基于所有所述代码生成点和所述代码生成模板,构建所述预设语料库之后,还包括:
抽取每个所述代码生成模板的模板关键词;
对所述模板关键词进行任意组合,得到组合关键词集合;
建立所述组合关键词集合中每个组合关键词与所述代码生成模板之间的映射关系。
6.根据权利要求1所述的生成方法,其特征在于,在构建所述代码生成模板时,包括:
获取已知的所有代码构件,其中,每个所述代码构件包含至少一个功能模块,每个所述功能模块对应一个构件功能;
获取每个所述代码构件的所有构件功能,得到构件功能集;
基于所述构件功能集定义所述代码生成模板的第一类模板边界,其中,所述第一类模板边界用于描述所述代码生成模板所实现构件功能的功能状态。
7.根据权利要求6所述的生成方法,其特征在于,在构建所述代码生成模板时,还包括:
获取每个所述代码构件在调用目标程序语言时的调用接口和/或调用类,其中,所述调用接口和/或调用类用于确定所述代码生成模板的代码生成策略;
基于所述调用接口和/或调用类定义所述代码生成模板的第二类模板边界,其中,所述第二类模板边界用于描述所述代码生成模板所实现构件功能的代码块生成策略。
8.根据权利要求6所述的生成方法,其特征在于,在构建所述代码生成模板时,还包括:
获取每个所述代码构件在进行业务代码扩展时使用的指定类以及关联所述指定类的类关联信息;
基于所述指定类以及所述类关联信息定义所述代码生成模板的第三类模板边界,其中,所述第三类模板边界用于描述所述代码生成模板所实现构件功能的类关联文件。
9.根据权利要求1所述的生成方法,其特征在于,所述代码语法树中包括下述至少之一:类描述、属性描述以及代码块结构。
10.一种代码生成装置,其特征在于,包括:
接收单元,用于接收代码生成请求,其中,所述代码生成请求中携带有业务终端输入的检索关键词;
查询单元,用于响应所述代码生成请求,基于所述检索关键词查询预设语料库,得到模板查询结果以及与所述检索关键词对应的语料类,其中,所述预设语料库中包含N个代码生成模板,N为正整数,所述语料类包含:与指定构件关联的构件生成类或者代码片段的生成类,所述构件生成类用于生成代码文件,所述代码片段的生成类用于生成代码片段;
第一生成单元,用于在所述模板查询结果指示存在目标代码生成模板的情况下,基于模板文件路径调用所述目标代码生成模板,并基于所述目标代码生成模板以及模板更新参数生成目标代码片段或者目标代码文件;
第二生成单元,用于在所述模板查询结果指示不存在目标代码生成模板的情况下,基于所述预设语料库、目标程序语言以及预设语法结构构建代码语法树,并基于所述代码语法树生成目标代码片段或者目标代码文件,其中,所述预设语法结构为编辑代码语料使用的所述目标程序语言所指定的语法结构。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行权利要求1至9中任意一项所述的代码生成方法。
12.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至9中任意一项所述的代码生成方法。
CN202310532991.7A 2023-05-11 2023-05-11 代码生成方法及其装置、电子设备及存储介质 Pending CN116560642A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310532991.7A CN116560642A (zh) 2023-05-11 2023-05-11 代码生成方法及其装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310532991.7A CN116560642A (zh) 2023-05-11 2023-05-11 代码生成方法及其装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN116560642A true CN116560642A (zh) 2023-08-08

Family

ID=87496042

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310532991.7A Pending CN116560642A (zh) 2023-05-11 2023-05-11 代码生成方法及其装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116560642A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117289905A (zh) * 2023-11-24 2023-12-26 浙江口碑网络技术有限公司 一种应用软件开发方法和装置、存储介质和电子设备
CN117435178A (zh) * 2023-12-20 2024-01-23 厦门东软汉和信息科技有限公司 一种代码生成***、方法、装置及存储介质
CN117827178A (zh) * 2024-03-04 2024-04-05 深圳市法本信息技术股份有限公司 一种代码自动生成方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117289905A (zh) * 2023-11-24 2023-12-26 浙江口碑网络技术有限公司 一种应用软件开发方法和装置、存储介质和电子设备
CN117289905B (zh) * 2023-11-24 2024-03-19 浙江口碑网络技术有限公司 一种应用软件开发方法和装置、存储介质和电子设备
CN117435178A (zh) * 2023-12-20 2024-01-23 厦门东软汉和信息科技有限公司 一种代码生成***、方法、装置及存储介质
CN117435178B (zh) * 2023-12-20 2024-03-15 厦门东软汉和信息科技有限公司 一种代码生成***、方法、装置及存储介质
CN117827178A (zh) * 2024-03-04 2024-04-05 深圳市法本信息技术股份有限公司 一种代码自动生成方法

Similar Documents

Publication Publication Date Title
CN116560642A (zh) 代码生成方法及其装置、电子设备及存储介质
CN112148509A (zh) 数据处理方法、装置、服务器及计算机可读存储介质
US20160171978A1 (en) Voice recognition system and construction method thereof
CN111400681B (zh) 数据权限处理方法、装置及设备
CN107924326A (zh) 对经更新的类型的迁移方法进行覆盖
US10782935B2 (en) Method and system to provide a generalized framework for dynamic creation of module analytic applications
CN109710220B (zh) 关系型数据库查询方法、装置、设备及存储介质
CN104461531A (zh) 一种报表***自定义函数的实现方法
CN114138748A (zh) 数据库映射文件生成方法、装置、设备及存储介质
CN106570095B (zh) 一种xml数据的操作方法及设备
CN106126224A (zh) 一种生成程序对象的工具、***和方法
CN113987337A (zh) 基于组件化动态编排的搜索方法、***、设备及存储介质
CN113031967B (zh) 一种代码转换方法及装置
CN108459846B (zh) 软件云定制方法及平台
CN113342399B (zh) 应用项目的结构配置方法、装置及可读存储介质
CN112114794B (zh) 网站应用程序自动生成方法、装置和计算机存储介质
US20200042297A1 (en) Property filtering
CN117372182B (zh) 一种基于快速开发持久层代码辅助方法的保险管理***
CN116700840B (zh) 文件执行方法、装置、电子设备及可读存储介质
CN116756184B (zh) 数据库实例处理方法、装置、设备、存储介质及程序产品
CN110162296B (zh) 应用程序编程接口文档的生成方法、装置及终端设备
CN117112654B (zh) 城市数据展示方法、装置、计算机设备和存储介质
US11947931B2 (en) Generic factory class
US11340875B2 (en) Searchable storage of sequential application programs
CN111142856B (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