一种代码生成方法及装置与流程

文档序号:12801716阅读:215来源:国知局
一种代码生成方法及装置与流程

本申请涉及数据处理技术领域,更具体地说,涉及一种代码生成方法及装置。



背景技术:

用户根据业务流程的需要,可以编写出一些描述业务逻辑(如,业务执行流程或业务控制流程)的业务逻辑语言,该类业务逻辑语言一般是由用户使用解释性语言编写而成。为了将包含业务逻辑语言的文件资源转换为计算机可执行的可执行文件,则需要先将业务逻辑语言转换为计算机编程语言对应的源代码,如,c语言或c++语言的代码。

目前,如果需要将用于描述业务逻辑的业务逻辑语言转换为计算机编程语言对应的源代码时,需要用户对c语言或c++语言非常了解,才能够根据该业务逻辑语言,人工编写出相应的源代码,对开发人员的技术要求较高,导致代码开发过程难度大,开发效率低。



技术实现要素:

有鉴于此,本申请提供了一种代码生成方法及装置,以实现基于业务逻辑语言,高效、便捷的生成代码。

为了实现上述目的,现提出的方案如下:

一种代码生成方法,包括:

获取待转换为代码的目标文件,所述目标文件包括至少一段用于描述业务逻辑的业务逻辑语言;

对应任意一段业务逻辑语言,对所述业务逻辑语言进行解析,以标记出组成所述业务逻辑语言的多个语言单元,所述语言单元为注释、采用计算机编程语言描述的初始源代码段或者用于描述业务逻辑中业务步骤的业务分支语言;

如果所述语言单元为业务分支语言,依据与所述业务分支语言的分支名称对应的转换规则,将所述业务分支语言转换为采用计算机编程语言描述的目标源代码段,所述目标源代码段包括目标代码段和注释中的一种或两种;

将确定出的所述注释、初始源代码段以及所述目标源代码段进行组合,得到所述业务逻辑语言对应的源代码集合;

将所述至少一段业务逻辑语言转换出的至少一个源代码集合进行组合后保存到文件中,得到所述目标文件转换出源文件,所述源文件中包括所述至少一个源代码集合。

可选的,所述对所述业务逻辑语言进行解析之前,还包括:

确定所述目标文件的文件类型;

根据所述目标文件的文件类型,加载与所述文件类型对应的解析引擎;

所述对所述业务逻辑语言进行解析,包括:

利用所述解析引擎对所述业务逻辑语言进行解析。

可选的,在所述对所述业务逻辑语言进行解析之前,还包括:

检测是否预置有与所述目标文件的文件类型对应的配置信息,所述配置信息用于变更所述业务逻辑语言所转换出的源文件中源代码的组成形式;

如果存在所述配置信息,则向所述目标文件的业务逻辑语言中加载所述配置信息。

可选的,所述对所述业务逻辑语言进行解析,以标记出组成所述业务逻辑语言的多个语言单元,包括:

基于所述业务逻辑语言中所包含的指定标签标志,将所述业务逻辑语言解析为由所述指定标签标志分隔出的多个语言单元。

可选的,所述依据与所述业务分支语言的分支名称对应的转换规则,将所述业务分支语言转换为采用计算机编程语言描述的目标源代码段,包括:

依据预置的分支名称与参数转换规则的对应关系,确定与所述业务分支语言的分支名称对应的参数转换规则;

将所述业务分支语言中的待转换参数转换为采用计算机编程语言描述的代码参数;

将所述业务分支语言中的所述待转换参数所关联的数值设置为所述待转换参数转换出的代码参数所关联的数值。

可选的,还包括:

如果不存在与所述业务分支语言的分支名称对应的参数转换规则,则将所述业务分支语言标记为注释。

可选的,在所述得到所述目标文件转换出源文件之后,还包括:

依据所述目标文件的存储路径,确定编译所述源文件的操作系统;

在确定出的所述操作系统上编译所述源文件,以得到可运行的可执行文件。

另一方面,本申请实施例还提供了一种代码生成装置,包括:

文件获取单元,用于获取待转换为代码的目标文件,所述目标文件包括至少一段用于描述业务逻辑的业务逻辑语言;

语言解析单元,用于对应任意一段业务逻辑语言,对所述业务逻辑语言进行解析,以标记出组成所述业务逻辑语言的多个语言单元,所述语言单元为注释、采用计算机编程语言描述的初始源代码段或者用于描述业务逻辑中业务步骤的业务分支语言;

分支转换单元,用于如果所述语言单元为业务分支语言,依据与所述业务分支语言的分支名称对应的转换规则,将所述业务分支语言转换为采用计算机编程语言描述的目标源代码段,所述目标源代码段包括目标代码段和注释中的一种或两种;

代码组合单元,用于将所述注释、初始源代码以及所述目标源代码段进行组合,得到所述业务逻辑语言对应的源代码集合;

源文件生成单元,用于将所述至少一段业务逻辑语言转换出的至少一个源代码集合进行组合后保存到文件中,得到所述目标文件转换出源文件,所述源文件中包括所述至少一个源代码集合。

可选的,还包括:

类型确定单元,用于在所述语言解析单元对所述业务逻辑语言进行解析之前,确定所述目标文件的文件类型;

解析引擎加载单元,用于根据所述目标文件的文件类型,加载与所述文件类型对应的解析引擎;

所述语言解析单元在对所述业务逻辑语言进行解析时,具体用于利用所述解析引擎对所述业务逻辑语言进行解析。

可选的,分支转换单元,包括:

规则确定单元,用于如果所述语言单元为业务分支语言,依据预置的分支名称与参数转换规则的对应关系,确定与所述业务分支语言的分支名称对应的参数转换规则;

参数转换单元,用于将所述业务分支语言中的待转换参数转换为采用计算机编程语言描述的代码参数;

数值关联单元,用于将所述业务分支语言中的所述待转换参数所关联的数值设置为所述待转换参数转换出的代码参数所关联的数值。

注释识别单元,用于如果不存在与所述业务分支语言的分支名称对应的参数转换规则,则将所述业务分支语言标记为注释。

由以上内容可知,在本申请实施例中,获取到待转换为代码的目标文件之后,会依次对每段业务逻辑语言进行解析,以标记出组成该业务逻辑语言的多个语言单元,该语言单元为注释、采用计算机编程语言描述的初始源代码段或者用于描述业务逻辑中业务步骤的业务分支语言;如果语言单元为业务分支语言,则会依据与业务分支语言的分支名称对应的转换规则,将该业务分支语言转换为采用计算机编程语言描述的目标源代码段,这样,通过将由该业务逻辑语言转换出的注释、初始源代码以及目标源代码进行组合,就可以得到该业务逻辑语言对应的源代码集合,并将至少一段业务逻辑语言转换出的至少一个源代码集合进行组合后保存到文件,就可以得到源文件,从而实现了自动将业务逻辑语言转换为代码,无需具有专业知识的人员手动编写代码,降低了生成代码所需的技术要求,也降低了生成代码的复杂度,提高了代码生成效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请一种代码生成方法一个实施例的流程示意图;

图2示出了本申请实施例中的业务逻辑语言的组成结构示意图;

图3示出了本申请的代码生成方法对目标文件中的业务逻辑语言进行循环处理的示意图;

图4示出了本申请一种代码生成方法又一个实施例的流程示意图;

图5示出了本申请一种代码生成装置一个实施例的组成结构示意图。

具体实施方式

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

首先对本申请的一种代码生成方法进行介绍。

参见图1,其示出了本申请一种代码生成方法又一个实施例的组成结构示意图,本实施例的方法可以应用于计算机设备,如独立的计算机,或者是分布式系统中的服务器节点等等。

本实施例的方法可以包括:

s101,获取待转换为代码的目标文件,该目标文件包括至少一段用于描述业务逻辑的业务逻辑语言。

其中,该目标文件为用于转换为计算机编程语言对应的代码的文件资源,其用于描述函数体需要处理的业务逻辑。该目标文件中所包含的业务逻辑语言为描述业务逻辑的逻辑语言,如该目标文件中包含描述业务执行流程,业务执行流程所所涉及的业务步骤、流程控制相关的信息。由于目标文件中包含的业务逻辑语言并非是c或c++等代码,因此,为了便于描述,在本申请实施例中也将业务逻辑语言称为伪代码。

在本申请实施例中该目标文件的形式可以有多种,如该目标文件可以为xml文件,txt文件或者是自定义的文件资源。作为一种优选实施方式,本申请实施例中可以采用自定义文件资源,例如.atomfunc原子函数资源等。

可以理解的是,目标文件可以存储在目录下,在实际应用中一个目录下可以包括多个待转换为代码的目标文件,但是对于每一个目标文件均可以采用本申请实施例的代码生成方法来转换代码,

s102,对应任意一段业务逻辑语言,对该业务逻辑语言进行解析,以标记出组成所述业务逻辑语言的多个语言单元。

其中,该语言单元为注释、采用计算机编程语言描述的初始源代码段或者用于描述业务逻辑中业务步骤的业务分支语言中的一种。

可以理解的是,对于一个业务逻辑而言,可能会需要多个业务流程或者步骤,因此,描述业务逻辑的业务逻辑语言可以由一个或多个描述业务逻辑中业务步骤的业务分支语言构成。每个业务分支语言可以认为是业务逻辑语言的基本单元,如果将业务逻辑语言认为是伪代码,那么业务分支语言就可以认为是伪代码中的宏。

在不同业务分支语言之间还可以添加有一些注释,注释可以是用于辅助解释业务逻辑。如,注释可以是按照c/c++语法描述的注释信息,例如以“/****/”包括起来的多行伪代码,或以“//”开头的单行伪代码。

在业务分支语言或者注释之间还可以有一行或多行代码所组成的代码段,其中,为了便于与后续从业务分支语言中转换出的代码段进行区分,将业务逻辑语言中直接解析出的代码段称为初始源代码段。

可以理解的是,由于初始源代码段本身就是代码,所以无需再进一步进行转换,而业务逻辑语言中的注释也可以直接用于解释代码的作用或含义,所以对于初始源代码段和注释可以无需进行转换,而直接确定为代码并直接输出,以便后续与业务分支语言转换出的代码进行组合。

在一种实现方式中,业务逻辑语言可以通过特定的标签标志将各个语言单元分隔出来,因此,可以基于该业务逻辑语言中所包含的指定标签标志,将该业务逻辑语言解析为由指定标签标志分隔出的多个语言单元。其中。该指定标签标志可以有一种或多种,如,注释可以是以“/****/”包括起来的多行伪代码,或以“//”开头的单行伪代码,那么“/****/”内的语言可以认为是注释;而业务分支语言(即宏)可以以不同于注释的特定标签标示出来,例如,可以采用但不局限于中括号“[]”的方式标示出来,这样,一个中括号内包括的伪代码行就对应着一套业务分支语言。

需要说明的是,一段逻辑业务语言本身可能就是一个业务分支语言,在该种情况下,一段逻辑业务语言可以解析出一个业务分支语言。

s103,如果该语言单元为业务分支语言,依据与该业务分支语言的分支名称对应的转换规则,将该业务分支语言转换为采用计算机编程语言描述的目标源代码段。

其中,该目标源代码段包括目标代码段和注释中的一种或两种。

不同类型的业务分支语言可以对应有不同的转换规则,基于业务分支语言所对应的转换规则,可以将业务分支语言转换为代码段。可以理解的是,一套业务分支语言内同样可以包括注释或者代码,对于业务分支语言内的注释或者代码可以直接输出,也就是说,对于业务分支语言内的注释或者代码,转换规则可以是直接输出而不进行转换,而对于注释和代码之外的参数可以按照相应的转换规则转换为代码。

为了便于理解,本申请实施例中业务逻辑语言、业务分支语言以及注释之间的组成关系可以参见图2所示,在图2中伪代码表示业务逻辑语言,宏表示业务分支语言。由图2可见,伪代码可以由宏、源码(本申请实施例所提到的初始源代码)以及注释组成,而源码可以是普通文本或者是字符串。宏可以包括用户宏以系统宏。其中,用户宏系统宏:由本方案内置的用于资源解析、逻辑判断、异常处理等代码生成处理逻辑的封装;用户自定义:由使用本方案进行自行定义的代码生成处理逻辑封装。

s104,将该注释、初始源代码以及该目标源代码段进行组合,得到所述业务逻辑语言对应的源代码集合。

其中,对得到的注释、初始源代码段以及目标源代码段进行组合拼接时,可以按照注释、原始代码,以及转换出注释或者目标源代码的业务分支语言在业务逻辑语言中的顺序,依次对各个注释、初始源代码以及目标源代码段进行拼接得到代码。在本申请实施例中将拼接出的代码称为源代码集合。

s105,将该至少一段业务逻辑语言转换出的至少一个源代码集合进行组合后保存到文件中,得到该目标文件转换出源文件。

其中,该源文件中包括至少一个源代码集合。

本申请实施例的方案实现了自动将业务逻辑语言转换为代码,无需具有专业知识的人员手动编写代码,降低了生成代码所需的技术要求,也降低了生成代码的复杂度,提高了代码生成效率。

可以理解的是,在本申请实施例中,对于一段业务逻辑语言,在标记出该业务逻辑语言中所包含的多个语言单元之后,仍需要分析每个语言单元是否已经是源代码等不需要进行进一步转换的数据,如果语言单元为业务分支语言,则需要对语言单元进行转换,以最终得到源代码或者注释,如图3,其示出了代码生成方法对目标文件中的业务逻辑语言进行循环处理的一种示意图。

结合图3,参见图4,其示出了本申请一种代码生成方法又一个实施例的流程示意图,本实施例的方法可以包括:

s401,获取待转换为代码的目标文件,该目标文件包括至少一段用于描述业务逻辑的业务逻辑语言。

如图3中,以目标文件为用于生成c/c++源码的文件资源为例,该资源被输入到运行本申请的代码生成方法的设备中,以对资源进行处理。

s402,确定该目标文件的文件类型。

其中,文件类型用于区分目标文件中的业务逻辑语言的类型,如文件类型可以为c/c++形式的文件。

s403,根据该目标文件的文件类型,加载与该文件类型对应的解析引擎。

s404,检测是否预置有与所述目标文件的文件类型对应的配置信息,所述配置信息用于变更所述业务逻辑语言所转换出的源文件中源代码的组成形式。

s405,如果存在该配置信息,则向所述目标文件的业务逻辑语言中加载所述配置信息。

当然,如果不存在该配置信息,则可以直接执行后续操作。

如图3中,以通过蓝图工厂扩展点管理这一程序来完成步骤s402至s404的操作,并最终分析得到目标文件的类型,所需的解析引擎(如图3中得到的蓝图工厂中的上下文),以及配置模型(如图3中蓝图工厂中的模型),得到以上信息之后,可以触发token迭代,以通过token迭代的方式标记出该业务逻辑语言中所包含的各个语言单元。

s406,对应任意一段业务逻辑语言,利用该解析引擎对业务逻辑语言进行解析,以标记出组成该业务逻辑语言的多个语言单元。

其中,定义文件资源中所包含的业务逻辑语言所需成源代码的主体框架,该主题框架中可以定义一个token队列,其中,token可以理解为业务逻辑语言中生成引擎处理的最小逻辑单元,即,每一个语言单元就是一个token。例如,以文件资源为该atomfunc形式的资源为例,则主要有以下几部分:

函数定义token:定义函数的描述体,主要描述函数的返回值、名称以及参数等信息;

参数初始化token:对函数输入参数、输出参数以及内部变量进行定义与初始化处理;

伪代码解析token:解析伪代码结构逻辑部分;

函数结束token:函数返回操作,对函数正常执行进行函数输出参数返回,如果出错进行错误消息返回,并对函数中使用到的结构体进行析构释放内存操作。

在本申请实施例中,可以根据定义出的token队列中的token的类型,分别调取不同的token方式进行token处理。本申请实施例中,需要处理的token分为4种类型:普通文本、注释、宏、伪代码。

其中,普通代码和注释不需要再做处理,最终代码生成时,直接取出拼接即可,其中,普通代码就是本申请提到的初始源代码,如,一般的c/c++代码,例如流程控制、条件判断语句等。注释可以是按照原代码语法描述的注释信息,如,按照c/c++语法描述的注释信息,例如,通过“/****/”包括起来的多行伪代码,或以“//”开头的单行伪代码可以认为是注释信息。

伪代码就是一段业务逻辑语言,具体可以参见图2中伪代码的组成结构示意图,对于伪代码,需要调用伪代码解析器进行解析,然后再生成相关token迭代,如图3中,如果该业务逻辑语言不是单纯的注释或者是宏等,则需要进行左侧的处理,以通过加载上下文(可以理解为处理程序或引擎),标记出伪代码所包含的普通文本、注释和宏。

宏可以理解为伪代码的一个子组成部分,如,可以通过特殊标签(例如中括号“[]”)包括起来的伪代码行。宏的定义可以为:<宏标记>[宏名称][宏参数]。其中,宏标记为标记同一个宏在不同逻辑场景下生成源码的差异部分,非必须存在;宏名称为唯一表示此宏用于处理的逻辑场景,必须存在;宏参数:用于宏处理逻辑时的辅助信息,非必须存在。对于宏,需要调用相关的宏处理程序进行处理,然后再生成相关的token迭代。如图3右侧,通过包含处理逻辑的宏处理器工厂扩展点管理来对宏进行处理,具体可以参见后续步骤s407至410。

s407,如果该语言单元为业务分支语言,依据预置的分支名称与参数转换规则的对应关系,确定与该业务分支语言的分支名称对应的参数转换规则。

s408,将该业务分支语言中的待转换参数转换为采用计算机编程语言描述的代码参数。

s409,将该业务分支语言中的待转换参数所关联的数值设置为该待转换参数转换出的代码参数所关联的数值。

其中,对于业务分支语言(即宏)而言,如果该业务分支语言中的待转换参数关联有相关的数值,则可以从数据库或者指定存储区中获取该待转换参数所关联的数值,并将该数值作为该待转换参数对应的代码参数所关联的数据。

s410,如果不存在与该业务分支语言的分支名称对应的参数转换规则,则将该业务分支语言标记为注释。

如果不存在该业务分支语言对应的参数转换规则,则说明该业务分支语言为注释,则可以直接将该业务分支语言标记为注释。如图3中,如果将宏解析为普通代码并进入token处理部分。在token处理部分中,如果从业务逻辑语言或者业务分支语言中最终得到普通代码和注释,则可以进行到代码生成的操作,即后续步骤s411。

s411,将解析得到该注释、初始源代码、代码参数以及代码参数所关联的数值进行组合,得到该业务逻辑语言对应的源代码集合。

在经过以上s406至s410将一段业务逻辑语言全部转换为注释、初始源代码以及代码参数之后,就可以进行拼接组合,最终得到该业务逻辑语言所对应的源代码集合。可以理解的是,在进行拼接组合时,可以依据注释、初始源代码在业务逻辑语言中的原始位置,以及该代码参数所对应的业务分支语言在业务逻辑语言中的原始位置,来确定注释、初始源代码以及代码参数在该源代码集合中的位置。

s412,将该至少一段业务逻辑语言转换出的至少一个源代码集合进行组合后保存到文件中,得到该目标文件转换出源文件。

其中,该源文件中包括至少一个源代码集合。

s413,依据该目标文件的存储路径,确定编译该源文件的操作系统。

s414,在确定出的该操作系统上编译源文件,以得到可运行的可执行文件。

另一方面,本申请实施例还提供了一种代码生成装置。

参见图5,其示出了本申请一种代码生成装置一个实施例的组成结构示意图,本实施例的装置可以包括:

文件获取单元501,用于获取待转换为代码的目标文件,所述目标文件包括至少一段用于描述业务逻辑的业务逻辑语言;

语言解析单元502,用于对应任意一段业务逻辑语言,对所述业务逻辑语言进行解析,以标记出组成所述业务逻辑语言的多个语言单元,所述语言单元为注释、采用计算机编程语言描述的初始源代码段或者用于描述业务逻辑中业务步骤的业务分支语言;

分支转换单元503,用于如果所述语言单元为业务分支语言,依据与所述业务分支语言的分支名称对应的转换规则,将所述业务分支语言转换为采用计算机编程语言描述的目标源代码段,所述目标源代码段包括目标代码段和注释中的一种或两种;

代码组合单元504,用于将所述注释、初始源代码以及所述目标源代码段进行组合,得到所述业务逻辑语言对应的源代码集合;

源文件生成单元505,用于将所述至少一段业务逻辑语言转换出的至少一个源代码集合进行组合后保存到文件中,得到所述目标文件转换出源文件,所述源文件中包括所述至少一个源代码集合。

可选的,所述装置还可以包括:

类型确定单元,用于在所述语言解析单元对所述业务逻辑语言进行解析之前,确定所述目标文件的文件类型;

解析引擎加载单元,用于根据所述目标文件的文件类型,加载与所述文件类型对应的解析引擎;

所述语言解析单元在对所述业务逻辑语言进行解析时,具体用于利用所述解析引擎对所述业务逻辑语言进行解析。

进一步的,所述装置还可以包括:

配置信息检测单元,用于在所述语言解析单元对所述业务逻辑语言进行解析之前,检测是否预置有与所述目标文件的文件类型对应的配置信息,所述配置信息用于变更所述业务逻辑语言所转换出的源文件中源代码的组成形式;

配置信息加载单元,用于如果存在所述配置信息,则向所述目标文件的业务逻辑语言中加载所述配置信息。

可选的,所述分支转换单元,包括:

规则确定单元,用于如果所述语言单元为业务分支语言,依据预置的分支名称与参数转换规则的对应关系,确定与所述业务分支语言的分支名称对应的参数转换规则;

参数转换单元,用于将所述业务分支语言中的待转换参数转换为采用计算机编程语言描述的代码参数;

数值关联单元,用于将所述业务分支语言中的所述待转换参数所关联的数值设置为所述待转换参数转换出的代码参数所关联的数值。

注释识别单元,用于如果不存在与所述业务分支语言的分支名称对应的参数转换规则,则将所述业务分支语言标记为注释。

可选的,所述装置还包括:

操作系统确定单元,用于在所述源文件生成单元得到所述目标文件转换出源文件之后,依据所述目标文件的存储路径,确定编译所述源文件的操作系统;

代码编译单元,用于在确定出的所述操作系统上编译所述源文件,以得到可运行的执行文件。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1