掌桥专利:专业的专利平台
掌桥专利
首页

代码的生成方法及装置、处理器和电子设备

文献发布时间:2023-06-19 18:30:43


代码的生成方法及装置、处理器和电子设备

技术领域

本申请涉及人工智能技术领域,具体而言,涉及一种代码的生成方法及装置、处理器和电子设备。

背景技术

在软件开发行业中,几乎所有的与用户交互的客户端软件,WEB(World Wide Web,即全球广域网,也称为万维网)网站、手机APP(Application,应用程序),都需要对参数进行合法性、安全性校验。参数数据的合法性从以下几个方面影响着软件的质量:

(1)健壮性:用户输入场景中,针对输入错误或者未输入必输项,软件系统可以给出默认值来增强程序的健壮性;

(2)安全性:数据的合法性校验可以有效的阻止当前比较黑客比较常用如的sql注入(Sql Inject,一种常见的Web安全漏洞),xss攻击(Cross Site Scripting,跨站脚本攻击)等等攻击手段,提升整个系统的安全性;

(3)用户体验:在用户输入不合法参数时,软件系统给出友好且清晰的提示,而不是一堆用户看不懂的内容,改善用户体验。

因此,为了保证程序健壮性,提升软件的安全性,改善用户体验,对各类输入、输出参数进行合法性校验,是软件开发过程中不可或缺的一项重要工作。参数合法性校验主要是对参数的类型、长度、范围、是否必输,业务规则等内容进行逐一校验。在对数据进行业务处理前,通过一系列数据校验,过滤掉不符合要求的内容,只允许合法的数据进入应用程序内部的业务处理流程,从而提高应用系统中数据的有效性和安全性。

而且,相关技术中,参数校验的一般做法是采用手工编码方式,针对每一个具体功能点各自实施参数校验,包括业务实体类上的校验,控制层上参数的校验以及服务层的校验等等,这些内容既包含新增功能的实现,又包含存量功能的改造。但是,这么做存在以下几个缺点:

(1)需要对各个交易模块的每个参数逐个增加校验规则,工作量大且重复度高;

(2)校验分散在各个模块的各个方法中,与业务逻辑依赖性高,增加程序出错机会;

(3)不同项目中,相同的校验规则仍然只能重新代码或者复制重用,产生了大量的冗余代码;

(4)从维护成本上看,对校验规则的修改,需要改动源码且重新编译打包发版,维护成本高。

以上几点说明,对于参数的合法性校验,若采用传统的手工编码方式,编码量大,校验内容分散,业务逻辑依赖性高,且程序更容易出错。且在不同项目中无法直接复用,仍需重复编写大量冗余代码,维护成本高。

针对相关技术中对应用程序的参数进行合法性校验时,采用手工编码的方式编写用于校验参数的代码,导致校验参数的效果较差的问题,目前尚未提出有效的解决方案。

发明内容

本申请的主要目的在于提供一种代码的生成方法及装置、处理器和电子设备,以解决相关技术中对应用程序的参数进行合法性校验时,采用手工编码的方式编写用于校验参数的代码,导致校验参数的效果较差的问题。

为了实现上述目的,根据本申请的一个方面,提供了一种代码的生成方法。该方法包括:获取元模型和目标模板,其中,所述元模型用于描述目标规则,所述目标规则用于对应用程序的参数进行合法性校验;对所述元模型进行解析,得到所述参数的属性信息;将所述属性信息添加到所述目标模板中,得到添加所述属性信息的目标模板;利用模板引擎,对添加所述属性信息的目标模板进行处理,生成目标代码,其中,所述目标代码用于校验所述参数的合法性。

进一步地,在对所述元模型进行解析,得到所述参数的属性信息之前,所述方法还包括:确定语义模型;基于所述语义模型,对所述元模型进行解析,得到所述参数的属性信息。

进一步地,确定语义模型包括:依据所述元模型,生成抽象语法树,其中,所述抽象语法树用于以树状的形式描述所述元模型的语法结构;基于所述抽象语法树,生成所述语义模型。

进一步地,依据所述元模型,生成抽象语法树包括:利用词法分析器,对所述元模型进行解析,生成词法单元序列;利用语法分析器,对所述词法单元序列的语法结构进行分析,生成所述抽象语法树。

进一步地,将所述属性信息添加到所述目标模板中,得到添加所述属性信息的目标模板包括:确定所述属性信息的类型,其中,所述属性信息的类型为以下之一:第一类型和第二类型,所述第二类型的属性信息的变化频率高于所述第一类型的属性信息的变化频率;确定所述目标模板中的第一部分和第二部分,其中,所述第一部分采用表达式的方式表述所述目标模板中的内容,所述第二部分采用字符的方式表述所述目标模板中的内容;将所述第一类型的属性信息添加到所述目标模板的第二部分中,并将所述第二类型的属性信息添加到所述目标模板的第一部分中,得到添加所述属性信息的目标模板。

进一步地,在将所述第一类型的属性信息添加到所述目标模板的第二部分中之后,所述方法还包括:获取第一模板,其中,所述第一模板为将所述第一类型的属性信息添加到所述目标模板的第二部分中之后得到的模板;确定所述第二类型的属性信息;将所述第二类型的属性信息添加到所述第一模板中,得到添加所述属性信息的目标模板。

进一步地,利用模板引擎,对添加所述属性信息的目标模板进行处理,生成目标代码包括:确定添加所述属性信息的目标模板中的属性表达式;利用所述模板引擎,将所述属性表达式转换为字符串;确定添加所述属性信息的目标模板中除属性表达式之外的静态文本;依据所述字符串和所述静态文本,生成所述目标代码。

为了实现上述目的,根据本申请的另一方面,提供了一种代码的生成装置。该装置包括:第一获取单元,用于获取元模型和目标模板,其中,所述元模型用于描述目标规则,所述目标规则用于对应用程序的参数进行合法性校验;第一解析单元,用于对所述元模型进行解析,得到所述参数的属性信息;第一添加单元,用于将所述属性信息添加到所述目标模板中,得到添加所述属性信息的目标模板;第一生成单元,用于利用模板引擎,对添加所述属性信息的目标模板进行处理,生成目标代码,其中,所述目标代码用于校验所述参数的合法性。

进一步地,所述装置还包括:第一确定单元,用于在对所述元模型进行解析,得到所述参数的属性信息之前,确定语义模型;第二解析单元,用于基于所述语义模型,对所述元模型进行解析,得到所述参数的属性信息。

进一步地,所述第一确定单元包括:第一生成模块,用于依据所述元模型,生成抽象语法树,其中,所述抽象语法树用于以树状的形式描述所述元模型的语法结构;第二生成模块,用于基于所述抽象语法树,生成所述语义模型。

进一步地,所述第一生成模块包括:第一生成子模块,用于利用词法分析器,对所述元模型进行解析,生成词法单元序列;第一分析子模块,用于利用语法分析器,对所述词法单元序列的语法结构进行分析,生成所述抽象语法树。

进一步地,所述第一添加单元包括:第一确定模块,用于确定所述属性信息的类型,其中,所述属性信息的类型为以下之一:第一类型和第二类型,所述第二类型的属性信息的变化频率高于所述第一类型的属性信息的变化频率;第二确定模块,用于确定所述目标模板中的第一部分和第二部分,其中,所述第一部分采用表达式的方式表述所述目标模板中的内容,所述第二部分采用字符的方式表述所述目标模板中的内容;第一添加模块,用于将所述第一类型的属性信息添加到所述目标模板的第二部分中,并将所述第二类型的属性信息添加到所述目标模板的第一部分中,得到添加所述属性信息的目标模板。

进一步地,所述装置还包括:第二获取单元,用于在将所述第一类型的属性信息添加到所述目标模板的第二部分中之后,获取第一模板,其中,所述第一模板为将所述第一类型的属性信息添加到所述目标模板的第二部分中之后得到的模板;第二确定单元,用于确定所述第二类型的属性信息;第二添加单元,用于将所述第二类型的属性信息添加到所述第一模板中,得到添加所述属性信息的目标模板。

进一步地,所述第一生成单元包括:第三确定模块,用于确定添加所述属性信息的目标模板中的属性表达式;第一转换模块,用于利用所述模板引擎,将所述属性表达式转换为字符串;第四确定模块,用于确定添加所述属性信息的目标模板中除属性表达式之外的静态文本;第三生成模块,用于依据所述字符串和所述静态文本,生成所述目标代码。

为了实现上述目的,根据本申请的另一方面,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述的任意一项所述的代码的生成方法。

为了实现上述目的,根据本申请的另一方面,提供了一种电子设备,所述电子设备包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的任意一项所述的代码的生成方法。

通过本申请,采用以下步骤:获取元模型和目标模板,其中,元模型用于描述目标规则,目标规则用于对应用程序的参数进行合法性校验;对元模型进行解析,得到参数的属性信息;将属性信息添加到目标模板中,得到添加属性信息的目标模板;利用模板引擎,对添加属性信息的目标模板进行处理,生成目标代码,其中,目标代码用于校验参数的合法性,解决了相关技术中对应用程序的参数进行合法性校验时,采用手工编码的方式编写用于校验参数的代码,导致校验参数的效果较差的问题。通过对元模型进行解析,且元模型用于描述对应用程序的参数进行合法性校验的规则,得到参数的属性信息,并将属性信息添加到模板中,再利用模板引擎,对添加属性信息的模板进行处理,生成用于校验参数的合法性的代码,从而提高了代码的生成效率,并采用生成的代码校验应用程序的参数的合法性,进而提升了校验应用程序的参数的效果。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例提供的代码的生成方法的流程图;

图2是本申请实施例中元模型对应的树形结构的示意图;

图3是本申请实施例中对元模型实例进行词法分析的流程图;

图4是根据本申请实施例提供的代码的生成方法的流程图一;

图5是根据本申请实施例提供的代码的生成方法的流程图二;

图6是本申请实施例中参数合法性校验框架的示意图;

图7是根据本申请实施例提供的可选的代码的生成方法的流程图;

图8是根据本申请实施例提供的代码的生成装置的示意图;

图9是根据本申请实施例提供的电子设备的示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,本公开所涉及的相关信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。例如,本系统和相关用户或机构间设置有接口,在获取相关信息之前,需要通过接口向前述的用户或机构发送获取请求,并在接收到前述的用户或机构反馈的同意信息后,获取相关信息。

为了便于描述,以下对本申请实施例涉及的部分名词或术语进行说明:

领域特定语言(Domain Specific Language,DSL),是针对某一领域,具有受限表达行的一种计算机程序设计语言,且常用于聚焦执行的领域或问题。

StringTemplate:简称ST,一种目前业界广泛使用的模板引擎库,开发者利用ST生成某种固定格式的文本或编程语言的源代码,例如vue(一个前端框架)页面、java后端代码等等。

语义模型:在关系模型基础上增加全新的数据构造器和数据处理原语,用来表达复杂的结构和丰富的语义的数据模型。

抽象语法树(Abstract Syntax Tree,AST):简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

下面结合优选的实施步骤对本发明进行说明,图1是根据本申请实施例提供的代码的生成方法的流程图,如图1所示,该方法包括如下步骤:

步骤S101,获取元模型和目标模板,其中,元模型用于描述目标规则,目标规则用于对应用程序的参数进行合法性校验。

例如,设计符合DSL设计原则的元模型文件,且元模型文件定义了应用程序的输入或者输出参数的校验规则的写法。并且上述的目标模板可以为StringTemplate模板,用于后续在模板中填充内容。

步骤S102,对元模型进行解析,得到参数的属性信息。

例如,对元模型进行解析,得到应用程序的输入或者输出参数的名称、规则等属性信息。

步骤S103,将属性信息添加到目标模板中,得到添加属性信息的目标模板。

例如,将应用程序的输入或者输出参数的名称、规则等属性信息填写到StringTemplate模板中。

步骤S104,利用模板引擎,对添加属性信息的目标模板进行处理,生成目标代码,其中,目标代码用于校验参数的合法性。

例如,模板引擎解析模板文件,且解析的模板文件指将应用程序的输入或者输出参数的名称、规则等属性信息填写到StringTemplate模板中后生成的模板文件,并生成用于校验应用程序的输入或者输出参数的合法性。

通过上述的步骤S101至S104,通过对元模型进行解析,且元模型用于描述对应用程序的参数进行合法性校验的规则,得到参数的属性信息,并将属性信息添加到模板中,再利用模板引擎,对添加属性信息的模板进行处理,生成用于校验参数的合法性的代码,从而提高了代码的生成效率,并采用生成的代码校验应用程序的参数的合法性,进而提升了校验应用程序的参数的效果。

为了快速准确的生成抽象语法树,在本申请实施例提供的代码的生成方法中,还可以通过以下步骤生成抽象语法树:利用词法分析器,对元模型进行解析,生成词法单元序列;利用语法分析器,对词法单元序列的语法结构进行分析,生成抽象语法树。

例如,元模型实例进入校验规则解析层的词法分析器,词法分析器对元模型实例进行解析,生成相应的词法单元流(上述的词法单元序列),然后词法单元流作为语法分析器的输入,语法分析器分析词法单元流的语法结构,将词法单元流组织起来,生成对应的DSL脚本结构的抽象语法树。

另外,关于元模型设计部分,图2是本申请实施例中元模型对应的树形结构的示意图,如图2所示,元模型可以由tech、init、if_action、if_errcode四部分组成:

(1)tech用来区分不同领域的参数校验。其中class_name用于标识不同领域的应用系统,例如,class_name设置为epl,则epl代表政法领域的参数校验规则;

(2)init用来对参数进行初始化。该部分由variable和value组成,variable定义需要初始化的参数变量名,value定义参数实际值;

(3)if_condition定义参数校验通过场景。该部分由condition和action组成。condition定义参数校验条件,action定义符合校验条件时的执行动作;

(4)if_errorcode定义参数校验未通过场景。该部分由expression和errorcode组成,expression定义参数校验条件,errorcode定义参数校验失败时的异常操作。

例如,图3是本申请实施例中对元模型实例进行词法分析的流程图,且图2中的“METHOD”和图3中的“method”均表示方法或者入口,如图3所示,对元模型实例进行词法分析时,先使用tech部分区分不同领域的参数校验,再使用init部分对参数进行初始化,然后使用if_action部分定义参数校验的通过场景,最后使用if_errorcode部分定义参数校验的未通过场景。而且,元模型实例经过词法分析器的解析,解析出的字符数组进入语法分析器,语法分析器将数据转换为元模型允许的语法。

综上所述,通过使用词法分析器和语法分析器,对元模型进行解析,可以快速准确的生成抽象语法树。

为了快速准确的生成语义模型,在本申请实施例提供的代码的生成方法中,还可以通过以下步骤生成语义模型:依据元模型,生成抽象语法树,其中,抽象语法树用于以树状的形式描述元模型的语法结构;基于抽象语法树,生成语义模型。

例如,通过设计的语义模型遍历对元模型解析生成的抽象语法树,将抽象语法树组装成语义模型。

通过上述的方案,根据解析生成的抽象语法树,可以快速准确的生成语义模型。

为了快速准确的得到参数的属性信息,在本申请实施例提供的代码的生成方法中,还可以通过以下步骤得到参数的属性信息:确定语义模型;基于语义模型,对元模型进行解析,得到参数的属性信息。

例如,通过生成的语义模型,执行语义,实现抽象语法树到StringTemplate的一一对应。并通过生成的语义模型转换得到参数的属性信息,且转换得到的属性信息可以为参数的名称、参数的规则等。

综上所述,通过使用语义模型,可以快速准确的得到参数的属性信息。

图4是根据本申请实施例提供的代码的生成方法的流程图一,如图4所示,在本申请实施例提供的代码的生成方法中,将属性信息添加到目标模板中,得到添加属性信息的目标模板包括:

步骤S401,确定属性信息的类型,其中,属性信息的类型为以下之一:第一类型和第二类型,第二类型的属性信息的变化频率高于第一类型的属性信息的变化频率;

步骤S402,确定目标模板中的第一部分和第二部分,其中,第一部分采用表达式的方式表述目标模板中的内容,第二部分采用字符的方式表述目标模板中的内容;

步骤S403,将第一类型的属性信息添加到目标模板的第二部分中,并将第二类型的属性信息添加到目标模板的第一部分中,得到添加属性信息的目标模板。

例如,StringTemplate模板是由普通字符和属性表达式组成,模板文件包含静态文本和动态部分,数据合法性校验规则中的可变部分是动态可变的,用属性表达式表达,共性部分则是固定的,用普通字符表达。故先识别出模板文件中的静态文本和动态部分,并确定经过语义模型处理得到的属性信息是属于数据合法性校验规则中的可变部分(上述的第二类型的属性信息)还是共性部分(第一类型的属性信息),然后进行模板的渲染工作,将经过语义模型处理得到的属性信息根据类型填写到模板中。具体为,将经过语义模型处理得到的属性信息属于数据合法性校验规则中的共性部分填写到模板文件中的静态文本部分,将经过语义模型处理得到的属性信息属于数据合法性校验规则中的可变部分填写到模板文件中的动态部分,并生成填写好属性信息的模板文件。

通过上述的方案,根据经过语义模型处理得到的属性信息的类型和模板文件中的内容,可以快速准确的将属性信息填写到模板文件中。

图5是根据本申请实施例提供的代码的生成方法的流程图二,如图5所示,在本申请实施例提供的代码的生成方法中,在将第一类型的属性信息添加到目标模板的第二部分中之后,该方法还包括:

步骤S501,获取第一模板,其中,第一模板为将第一类型的属性信息添加到目标模板的第二部分中之后得到的模板;

步骤S502,确定第二类型的属性信息;

步骤S503,将第二类型的属性信息添加到第一模板中,得到添加属性信息的目标模板。

例如,StringTemplate将参数合法性校验中的共性部分写在模板中作为代码生成基础模板,将可变性部分抽象出来动态内容写在模板中。也即,将经过语义模型处理得到的属性信息属于数据合法性校验规则中的共性部分填写到模板文件中的静态文本部分之后,生成基础模板(上述的第一模板),再将经过语义模型处理得到的属性信息属于数据合法性校验规则中的可变部分填写到生成的基础模板中,然后生成填写好属性信息的模板文件。

综上所述,首先生成基础模板,再根据生成的基础模板,生成填写好属性信息的模板文件,可以提高模板的生成效率。

为了快速准确的生成目标代码,在本申请实施例提供的代码的生成方法中,还可以通过以下步骤生成目标代码:确定添加属性信息的目标模板中的属性表达式;利用模板引擎,将属性表达式转换为字符串;确定添加属性信息的目标模板中除属性表达式之外的静态文本;依据字符串和静态文本,生成目标代码。

例如,StringTemplate模板是由普通字符和属性表达式组成,模板文件包含静态文本和动态部分,数据合法性校验中的可变部分是动态可变的,用属性表达式表达,共性部分则是固定的,用普通字符表达。StringTemplate将属性表达式转换为字符串输出,属性表达式之外的静态文本则原封不动的输出,再根据输出的字符串和静态文本,生成用于校验应用程序的参数的合法性的代码。

通过上述的方案,在为软件行业各领域应用系统的参数合法性进行校验时,大大节省了单独编写参数校验规则代码的时间,能更好的保证软件开发的正确性和高效性,高效准确的驱动开发,提高了开发效率,保证了代码风格的一致性。

例如,图6是本申请实施例中参数合法性校验框架的示意图,如图6所示,参数合法性校验框架分为三层:校验规则解析层、语义处理层和校验代码生成层,每一层负责实现不用的功能,层次间满足高内聚、低耦合的架构设计思想。且每层的作用分别为:

(1)校验规则解析层主要负责将参数校验规则解析成抽象语法树结构,改层采用DSL表达数据校验的可变性部分。设计符合DSL设计原则的元模型文件,基于元模型,采用DSL生成包括词义、语法分析的元模型引擎即校验规则解析器的生成装置;

(2)语义处理层主要负责将规则解析层生成的抽象语法树组装成语义模型,实现抽象语法树与StringTemplate模板的对应;

(3)校验代码生成层主要负责将中间层语义模型转换得到的属性信息根据类型填写到StringTemplate模板中,生成参数校验代码。StringTemplate将参数合法性校验中的共性部分写在模板中作为代码生成基础模板,将可变性部分抽象出来动态内容写在模板中用于与前一步对应。

例如,图7是根据本申请实施例提供的可选的代码的生成方法的流程图,如图7所示,首先,元模型实例进入校验规则解析层的词法分析器,词法分析器对元模型实例进行解析,生成相应的词法单元流,然后词法单元流作为语法分析器的输入,语法分析器分析词法单元流的语法结构,将词法单元流组织起来,生成对应的DSL脚本结构的抽象语法树。其次,通过设计的语义模型遍历数据解析层生成的抽象语法树,将抽象语法树组装成语义模型,执行语义,实现抽象语法树到StringTemplate的一一对应。最后,模板引擎解析模板文件,识别出静态文本和动态部分,然后进行模板的渲染工作:将经过语义模型处理得到的属性信息根据类型填写到模板中,这样一份完整的参数校验代码装置就生成出来了。

另外,元模型实例通过元模型引擎进行词法分析、语法分析,完成校验规则解析层的解析功能。且参数校验装置中,语义分析与语法、语法解析进行了分离,设计语义模型来定义数据校验的语义,语义模型中通过java逻辑来实现抽象语法树和StringTemplate的一一对应。而且,通过DSL表述参数校验的可变性部分,通过StringTemplate模板表述共性部分,采用基于DSL的可变性建模技术构件元模型,基于元模型通过代码生成技术自动生成参数合法性校验代码。且克服了存量业务系统在大量代码文件、海量业务场景情况下实施参数规则校验功能实现及改造的不足,并提供了一种基于DSL和ST(String Template)的参数校验代码生成装置,易于集成,复用性高,配置简单灵活且扩展性、维护性高,能够快速有效帮忙应用系统的完成参数校验。

综上,本申请实施例提供的代码的生成方法,通过获取元模型和目标模板,其中,元模型用于描述目标规则,目标规则用于对应用程序的参数进行合法性校验;对元模型进行解析,得到参数的属性信息;将属性信息添加到目标模板中,得到添加属性信息的目标模板;利用模板引擎,对添加属性信息的目标模板进行处理,生成目标代码,其中,目标代码用于校验参数的合法性,解决了相关技术中对应用程序的参数进行合法性校验时,采用手工编码的方式编写用于校验参数的代码,导致校验参数的效果较差的问题。通过对元模型进行解析,且元模型用于描述对应用程序的参数进行合法性校验的规则,得到参数的属性信息,并将属性信息添加到模板中,再利用模板引擎,对添加属性信息的模板进行处理,生成用于校验参数的合法性的代码,从而提高了代码的生成效率,并采用生成的代码校验应用程序的参数的合法性,进而提升了校验应用程序的参数的效果。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例还提供了一种代码的生成装置,需要说明的是,本申请实施例的代码的生成装置可以用于执行本申请实施例所提供的用于代码的生成方法。以下对本申请实施例提供的代码的生成装置进行介绍。

图8是根据本申请实施例的代码的生成装置的示意图。如图8所示,该装置包括:第一获取单元801、第一解析单元802、第一添加单元803和第一生成单元804。

具体地,第一获取单元801,用于获取元模型和目标模板,其中,元模型用于描述目标规则,目标规则用于对应用程序的参数进行合法性校验;

第一解析单元802,用于对元模型进行解析,得到参数的属性信息;

第一添加单元803,用于将属性信息添加到目标模板中,得到添加属性信息的目标模板;

第一生成单元804,用于利用模板引擎,对添加属性信息的目标模板进行处理,生成目标代码,其中,目标代码用于校验参数的合法性。

综上,本申请实施例提供的代码的生成装置,通过第一获取单元801获取元模型和目标模板,其中,元模型用于描述目标规则,目标规则用于对应用程序的参数进行合法性校验;第一解析单元802对元模型进行解析,得到参数的属性信息;第一添加单元803将属性信息添加到目标模板中,得到添加属性信息的目标模板;第一生成单元804利用模板引擎,对添加属性信息的目标模板进行处理,生成目标代码,其中,目标代码用于校验参数的合法性,解决了相关技术中对应用程序的参数进行合法性校验时,采用手工编码的方式编写用于校验参数的代码,导致校验参数的效果较差的问题。通过对元模型进行解析,且元模型用于描述对应用程序的参数进行合法性校验的规则,得到参数的属性信息,并将属性信息添加到模板中,再利用模板引擎,对添加属性信息的模板进行处理,生成用于校验参数的合法性的代码,从而提高了代码的生成效率,并采用生成的代码校验应用程序的参数的合法性,进而提升了校验应用程序的参数的效果。

可选地,在本申请实施例提供的代码的生成装置中,该装置还包括:第一确定单元,用于在对元模型进行解析,得到参数的属性信息之前,确定语义模型;第二解析单元,用于基于语义模型,对元模型进行解析,得到参数的属性信息。

可选地,在本申请实施例提供的代码的生成装置中,第一确定单元包括:第一生成模块,用于依据元模型,生成抽象语法树,其中,抽象语法树用于以树状的形式描述元模型的语法结构;第二生成模块,用于基于抽象语法树,生成语义模型。

可选地,在本申请实施例提供的代码的生成装置中,第一生成模块包括:第一生成子模块,用于利用词法分析器,对元模型进行解析,生成词法单元序列;第一分析子模块,用于利用语法分析器,对词法单元序列的语法结构进行分析,生成抽象语法树。

可选地,在本申请实施例提供的代码的生成装置中,第一添加单元包括:第一确定模块,用于确定属性信息的类型,其中,属性信息的类型为以下之一:第一类型和第二类型,第二类型的属性信息的变化频率高于第一类型的属性信息的变化频率;第二确定模块,用于确定目标模板中的第一部分和第二部分,其中,第一部分采用表达式的方式表述目标模板中的内容,第二部分采用字符的方式表述目标模板中的内容;第一添加模块,用于将第一类型的属性信息添加到目标模板的第二部分中,并将第二类型的属性信息添加到目标模板的第一部分中,得到添加属性信息的目标模板。

可选地,在本申请实施例提供的代码的生成装置中,该装置还包括:第二获取单元,用于在将第一类型的属性信息添加到目标模板的第二部分中之后,获取第一模板,其中,第一模板为将第一类型的属性信息添加到目标模板的第二部分中之后得到的模板;第二确定单元,用于确定第二类型的属性信息;第二添加单元,用于将第二类型的属性信息添加到第一模板中,得到添加属性信息的目标模板。

可选地,在本申请实施例提供的代码的生成装置中,第一生成单元包括:第三确定模块,用于确定添加属性信息的目标模板中的属性表达式;第一转换模块,用于利用模板引擎,将属性表达式转换为字符串;第四确定模块,用于确定添加属性信息的目标模板中除属性表达式之外的静态文本;第三生成模块,用于依据字符串和静态文本,生成目标代码。

所述代码的生成装置包括处理器和存储器,上述第一获取单元801、第一解析单元802、第一添加单元803和第一生成单元804等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来提升校验应用程序的参数的效果。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。

本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述代码的生成方法。

如图9所示,本发明实施例提供了一种电子设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:获取元模型和目标模板,其中,所述元模型用于描述目标规则,所述目标规则用于对应用程序的参数进行合法性校验;对所述元模型进行解析,得到所述参数的属性信息;将所述属性信息添加到所述目标模板中,得到添加所述属性信息的目标模板;利用模板引擎,对添加所述属性信息的目标模板进行处理,生成目标代码,其中,所述目标代码用于校验所述参数的合法性。

处理器执行程序时还实现以下步骤:在对所述元模型进行解析,得到所述参数的属性信息之前,所述方法还包括:确定语义模型;基于所述语义模型,对所述元模型进行解析,得到所述参数的属性信息。

处理器执行程序时还实现以下步骤:确定语义模型包括:依据所述元模型,生成抽象语法树,其中,所述抽象语法树用于以树状的形式描述所述元模型的语法结构;基于所述抽象语法树,生成所述语义模型。

处理器执行程序时还实现以下步骤:依据所述元模型,生成抽象语法树包括:利用词法分析器,对所述元模型进行解析,生成词法单元序列;利用语法分析器,对所述词法单元序列的语法结构进行分析,生成所述抽象语法树。

处理器执行程序时还实现以下步骤:将所述属性信息添加到所述目标模板中,得到添加所述属性信息的目标模板包括:确定所述属性信息的类型,其中,所述属性信息的类型为以下之一:第一类型和第二类型,所述第二类型的属性信息的变化频率高于所述第一类型的属性信息的变化频率;确定所述目标模板中的第一部分和第二部分,其中,所述第一部分采用表达式的方式表述所述目标模板中的内容,所述第二部分采用字符的方式表述所述目标模板中的内容;将所述第一类型的属性信息添加到所述目标模板的第二部分中,并将所述第二类型的属性信息添加到所述目标模板的第一部分中,得到添加所述属性信息的目标模板。

处理器执行程序时还实现以下步骤:在将所述第一类型的属性信息添加到所述目标模板的第二部分中之后,所述方法还包括:获取第一模板,其中,所述第一模板为将所述第一类型的属性信息添加到所述目标模板的第二部分中之后得到的模板;确定所述第二类型的属性信息;将所述第二类型的属性信息添加到所述第一模板中,得到添加所述属性信息的目标模板。

处理器执行程序时还实现以下步骤:利用模板引擎,对添加所述属性信息的目标模板进行处理,生成目标代码包括:确定添加所述属性信息的目标模板中的属性表达式;利用所述模板引擎,将所述属性表达式转换为字符串;确定添加所述属性信息的目标模板中除属性表达式之外的静态文本;依据所述字符串和所述静态文本,生成所述目标代码。

本文中的设备可以是服务器、PC、PAD、手机等。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:获取元模型和目标模板,其中,所述元模型用于描述目标规则,所述目标规则用于对应用程序的参数进行合法性校验;对所述元模型进行解析,得到所述参数的属性信息;将所述属性信息添加到所述目标模板中,得到添加所述属性信息的目标模板;利用模板引擎,对添加所述属性信息的目标模板进行处理,生成目标代码,其中,所述目标代码用于校验所述参数的合法性。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在对所述元模型进行解析,得到所述参数的属性信息之前,所述方法还包括:确定语义模型;基于所述语义模型,对所述元模型进行解析,得到所述参数的属性信息。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:确定语义模型包括:依据所述元模型,生成抽象语法树,其中,所述抽象语法树用于以树状的形式描述所述元模型的语法结构;基于所述抽象语法树,生成所述语义模型。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:依据所述元模型,生成抽象语法树包括:利用词法分析器,对所述元模型进行解析,生成词法单元序列;利用语法分析器,对所述词法单元序列的语法结构进行分析,生成所述抽象语法树。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:将所述属性信息添加到所述目标模板中,得到添加所述属性信息的目标模板包括:确定所述属性信息的类型,其中,所述属性信息的类型为以下之一:第一类型和第二类型,所述第二类型的属性信息的变化频率高于所述第一类型的属性信息的变化频率;确定所述目标模板中的第一部分和第二部分,其中,所述第一部分采用表达式的方式表述所述目标模板中的内容,所述第二部分采用字符的方式表述所述目标模板中的内容;将所述第一类型的属性信息添加到所述目标模板的第二部分中,并将所述第二类型的属性信息添加到所述目标模板的第一部分中,得到添加所述属性信息的目标模板。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在将所述第一类型的属性信息添加到所述目标模板的第二部分中之后,所述方法还包括:获取第一模板,其中,所述第一模板为将所述第一类型的属性信息添加到所述目标模板的第二部分中之后得到的模板;确定所述第二类型的属性信息;将所述第二类型的属性信息添加到所述第一模板中,得到添加所述属性信息的目标模板。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:利用模板引擎,对添加所述属性信息的目标模板进行处理,生成目标代码包括:确定添加所述属性信息的目标模板中的属性表达式;利用所述模板引擎,将所述属性表达式转换为字符串;确定添加所述属性信息的目标模板中除属性表达式之外的静态文本;依据所述字符串和所述静态文本,生成所述目标代码。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

相关技术
  • 报文预定义代码生成方法、装置、电子设备和存储介质
  • 多版本代码生成方法、设备及电子设备
  • 代码测试方法及装置、存储介质、电子设备
  • 一种源代码检测方法及装置、电子设备
  • 代码注释的生成方法及装置、处理器和电子设备
  • 处理器可执行的代码的生成方法、存储区域管理方法以及保存代码生成程序的存储介质
技术分类

06120115591779