代码生成方法及装置、存储介质、终端制造方法及图纸

技术编号:31378944 阅读:24 留言:0更新日期:2021-12-15 11:21
一种代码生成方法及装置、存储介质、终端,所述方法包括:获取对象的定义信息,所述定义信息包括多个字段的描述信息;对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,所述节点与所述字段一一对应,其中,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。通过本发明专利技术的方案,能够高效准确地生成目标函数的代码。目标函数的代码。目标函数的代码。

【技术实现步骤摘要】
代码生成方法及装置、存储介质、终端


[0001]本专利技术涉及计算机编程
,尤其涉及一种代码生成方法及装置、存储介质、终端。

技术介绍

[0002]采用面向对象的编程语言进行编程时,需要根据对象的定义对对象的成员进行访问等操作,这一过程中容易因人工编码时访问错误的成员而导致程序运行结果出现错误的情况,并且这种错误通常无法通过编译检查出来,只能根据程序运行的错误结果人为地进行检查,效率较低,且容易造成生产问题。因此,亟需一种代码生成方法,能够高效、准确地生成用户需要的代码。

技术实现思路

[0003]本专利技术解决的技术问题是提供一种高效、准确地代码生成方法。
[0004]为解决上述技术问题,本专利技术实施例提供一种代码生成方法,所述方法包括:获取对象的定义信息,所述定义信息包括多个字段的描述信息;对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,其中,所述节点与所述字段一一对应,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。
[0005]可选的,所述对象为结构体。
[0006]可选的,所述节点的属性信息包括以下一项或多项:节点的标识、父节点的标识、节点的名称、节点对应的字段的类型、节点类型参数、节点的子节点个数、节点的深度值、节点对应的字段的数组表达式;其中,所述节点的名称为所述节点对应的字段,所述节点类型参数的取值用于指示所述节点是否为叶子节点,所述数组表达式用于指示数组的维数和每一维中元素的个数,所述节点的深度值用于确定访问所述节点对应的字段的语句的缩进量。
[0007]可选的,确定节点的深度值包括:步骤一:将任意一个叶子节点作为当前节点;步骤二:确定所述当前节点的父节点的中间深度值,所述中间深度值为所述当前节点的深度值加1;步骤三:判断所述父节点的当前深度值是否小于所述中间深度值,如果是,则执行步骤四,否则执行步骤五;步骤四:将所述父节点的当前深度值更新为所述中间深度值,并判断所述当前节点的父节点是否为根节点,如果是,则执行步骤五,否则将所述父节点作为所述当前节点,并执行步骤二;步骤五:判断所有的叶子节点是否被遍历,如果否,则将下一个叶子节点作为所述当前节点,并执行步骤二,直至所有的叶子节点遍历完成。
[0008]可选的,所述目标代码包括多行语句,根据预设代码模板和所述多个节点的属性信息生成目标函数的代码包括:根据所述预设代码模板确定待访问的字段,并生成所述待访问的字段对应的语句;其中,所述待访问的字段对应的语句的缩进量为所述待访问的字
段对应的节点的缩进单位和预设单位缩进量的乘积;其中,叶子节点的缩进单位为根节点的深度值与所述叶子节点的父节点的深度值的差值加1,非叶子节点的缩进单位为根节点的深度值与所述非叶子节点的深度值的差值加1。
[0009]可选的,根据预设代码模板和所述多个节点的属性信息生成目标代码包括:根据所述预设代码模板确定待访问的字段;根据所述待访问的字段对应的节点的属性信息,判断所述待访问的字段是否为数组,如果是,则根据所述数组表达式确定所述待访问的字段对应的循环语句;其中,所述循环语句中第i层循环对应于所述数组的第i维,其中,第i层循环的循环次数是根据第i维的元素个数确定的,i为正整数。
[0010]可选的,所述循环语句包括循环控制语句、作用域语句和循环体语句,根据预设代码模板和所述多个节点的属性信息生成目标代码还包括:采用下列公式确定所述循环语句中第i层循环的循环控制语句和作用域语句的缩进量:indent1[i]=(indent0+i

1)
×
K;其中,indent1[i]为所述第i层循环的循环控制语句和作用域语句的缩进量,indent0为所述待访问的字段对应的节点的缩进单位,K为预设单位缩进量;采用下列公式确定所述循环语句中第i层循环的循环体语句的缩进量:indent2[i]=(indent0+i)
×
K,其中,indent2[i]为所述第i层循环的循环体语句的缩进量,所述叶子节点的缩进单位为根节点的深度值与所述叶子节点的父节点的深度值的差值加1,所述非叶子节点的缩进单位为根节点的深度值与所述叶子节点的深度值的差值加1。
[0011]可选的,所述节点的属性信息还包括:链式字段名,所述链式字段名包括成员运算符、所述节点的字段名和所述节点的祖先节点的字段名,其中,所述链式字段名中每两个字段名之间通过成员运算符连接,所述字段名在所述链式字段名中按照节点的层次从小到大的顺序排列;其中,如果所述节点对应的字段为数组,则所述节点的字段名是根据对应的字段和元素下标确定的,如果所述节点对应的字段为非数组,则所述节点的字段名为对应的字段。
[0012]可选的,根据预设代码模板和所述多个节点的属性信息生成目标代码包括:对所述节点的链式字段名进行实例化处理,以得到所述节点的链式变量名,其中,所述链式变量名用于使所述节点对应的字段的变量在所述目标代码中被访问。
[0013]可选的,确定每个非根节点的链式字段名的方法包括:从根节点开始,依次将该非根节点的祖先节点的字段名和该非根节点的字段名进行入栈和出栈,并按照出栈的顺序依次将所述字段名写入预设的数组中,以生成字段名数组;根据所述字段名数组,确定该非根节点的链式字段名。
[0014]可选的,根据预设代码模板和所述多个节点的属性信息生成目标代码之前,所述方法还包括:读取用户对所述字段定义的变量名;根据所述字段的变量名和所述树形模型,确定所述字段对应的节点的链式变量名,所述链式变量名包括成员运算符、所述节点的变量名和所述节点的祖先节点的变量名,所述链式变量名中每两个变量名之间通过成员运算符连接,所述变量名在所述链式变量名中按照节点的层次从小到大的顺序排列;其中,如果所述节点对应的字段为非数组,则所述节点的变量名为对应的字段的变量名,如果所述节点对应的字段为数组,则所述节点的变量名是根据对应的字段的变量名和元素下标确定的。
[0015]本专利技术实施例还提供一种代码生成装置,所述装置包括:获取模块,用于获取对象
的定义信息,所述定义信息包括多个字段的描述信息;生成树模块,用于对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,其中,所述节点与所述字段一一对应,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;代码生成模块,用于根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。
[0016]本专利技术实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述的代码生成方法的步骤。
[0017]本专利技术实施例还提供一种终端,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码生成方法,其特征在于,所述方法包括:获取对象的定义信息,所述定义信息包括多个字段的描述信息;对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,其中,所述节点与所述字段一一对应,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。2.根据权利要求1所述的代码生成方法,其特征在于,所述对象为结构体。3.根据权利要求1所述的代码生成方法,其特征在于,所述节点的属性信息包括以下一项或多项:节点的标识、父节点的标识、节点的名称、节点对应的字段的类型、节点类型参数、节点的子节点个数、节点的深度值、节点对应的字段的数组表达式;其中,所述节点的名称为所述节点对应的字段,所述节点类型参数的取值用于指示所述节点是否为叶子节点,所述数组表达式用于指示数组的维数和每一维中元素的个数,所述节点的深度值用于确定访问所述节点对应的字段的语句的缩进量。4.根据权利要求3所述的代码生成方法,其特征在于,确定节点的深度值包括:步骤一:将任意一个叶子节点作为当前节点;步骤二:确定所述当前节点的父节点的中间深度值,所述中间深度值为所述当前节点的深度值加1;步骤三:判断所述父节点的当前深度值是否小于所述中间深度值,如果是,则执行步骤四,否则执行步骤五;步骤四:将所述父节点的当前深度值更新为所述中间深度值,并判断所述当前节点的父节点是否为根节点,如果是,则执行步骤五,否则将所述父节点作为所述当前节点,并执行步骤二;步骤五:判断所有的叶子节点是否被遍历,如果否,则将下一个叶子节点作为所述当前节点,并执行步骤二,直至所有的叶子节点遍历完成。5.根据权利要求3所述的代码生成方法,其特征在于,所述目标代码包括多行语句,根据预设代码模板和所述多个节点的属性信息生成目标函数的代码包括:根据所述预设代码模板确定待访问的字段,并生成所述待访问的字段对应的语句;其中,所述待访问的字段对应的语句的缩进量为所述待访问的字段对应的节点的缩进单位和预设单位缩进量的乘积;其中,叶子节点的缩进单位为根节点的深度值与所述叶子节点的父节点的深度值的差值加1,非叶子节点的缩进单位为根节点的深度值与所述非叶子节点的深度值的差值加1。6.根据权利要求3所述的代码生成方法,其特征在于,根据预设代码模板和所述多个节点的属性信息生成目标代码包括:根据所述预设代码模板确定待访问的字段;根据所述待访问的字段对应的节点的属性信息,判断所述待访问的字段是否为数组,如果是,则根据所述数组表达式确定所述待访问的字段对应的循环语句;其中,所述循环语句中第i层循环对应于所述数组的第i维,其中,第i层循环的循环次数是根据第i维的元素个数确定的,i为正整数。
7.根据权利要求6所述的代码生成方法,其特征在于,所述循环语句包括循环控制语句、作用域语句和循环体语句,根据预设代码模板和所述多个节点的属性信息生成目标代码还包括:采用下列公式确定所述循环语句中第i层循环的循环控制语句和作用域语句的缩进量:indent1[i]=(indent0+i

1)
×
K;其中,indent1[i]为所述第i层循环的循环控制语句和作用域语句的缩进...

【专利技术属性】
技术研发人员:王伟蔡文豪周尤珠王东王洪涛
申请(专利权)人:海通证券股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1