CN113791768A - 代码生成方法及装置、存储介质、终端 - Google Patents
代码生成方法及装置、存储介质、终端 Download PDFInfo
- Publication number
- CN113791768A CN113791768A CN202111109246.9A CN202111109246A CN113791768A CN 113791768 A CN113791768 A CN 113791768A CN 202111109246 A CN202111109246 A CN 202111109246A CN 113791768 A CN113791768 A CN 113791768A
- Authority
- CN
- China
- Prior art keywords
- node
- field
- nodes
- code
- depth value
- 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.)
- Granted
Links
Images
Classifications
-
- 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/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/316—Aspect-oriented programming techniques
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种代码生成方法及装置、存储介质、终端,所述方法包括:获取对象的定义信息,所述定义信息包括多个字段的描述信息;对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,所述节点与所述字段一一对应,其中,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。通过本发明的方案,能够高效准确地生成目标函数的代码。
Description
技术领域
本发明涉及计算机编程技术领域,尤其涉及一种代码生成方法及装置、存储介质、终端。
背景技术
采用面向对象的编程语言进行编程时,需要根据对象的定义对对象的成员进行访问等操作,这一过程中容易因人工编码时访问错误的成员而导致程序运行结果出现错误的情况,并且这种错误通常无法通过编译检查出来,只能根据程序运行的错误结果人为地进行检查,效率较低,且容易造成生产问题。因此,亟需一种代码生成方法,能够高效、准确地生成用户需要的代码。
发明内容
本发明解决的技术问题是提供一种高效、准确地代码生成方法。
为解决上述技术问题,本发明实施例提供一种代码生成方法,所述方法包括:获取对象的定义信息,所述定义信息包括多个字段的描述信息;对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,其中,所述节点与所述字段一一对应,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。
可选的,所述对象为结构体。
可选的,所述节点的属性信息包括以下一项或多项:节点的标识、父节点的标识、节点的名称、节点对应的字段的类型、节点类型参数、节点的子节点个数、节点的深度值、节点对应的字段的数组表达式;其中,所述节点的名称为所述节点对应的字段,所述节点类型参数的取值用于指示所述节点是否为叶子节点,所述数组表达式用于指示数组的维数和每一维中元素的个数,所述节点的深度值用于确定访问所述节点对应的字段的语句的缩进量。
可选的,确定节点的深度值包括:步骤一:将任意一个叶子节点作为当前节点;步骤二:确定所述当前节点的父节点的中间深度值,所述中间深度值为所述当前节点的深度值加1;步骤三:判断所述父节点的当前深度值是否小于所述中间深度值,如果是,则执行步骤四,否则执行步骤五;步骤四:将所述父节点的当前深度值更新为所述中间深度值,并判断所述当前节点的父节点是否为根节点,如果是,则执行步骤五,否则将所述父节点作为所述当前节点,并执行步骤二;步骤五:判断所有的叶子节点是否被遍历,如果否,则将下一个叶子节点作为所述当前节点,并执行步骤二,直至所有的叶子节点遍历完成。
可选的,所述目标代码包括多行语句,根据预设代码模板和所述多个节点的属性信息生成目标函数的代码包括:根据所述预设代码模板确定待访问的字段,并生成所述待访问的字段对应的语句;其中,所述待访问的字段对应的语句的缩进量为所述待访问的字段对应的节点的缩进单位和预设单位缩进量的乘积;其中,叶子节点的缩进单位为根节点的深度值与所述叶子节点的父节点的深度值的差值加1,非叶子节点的缩进单位为根节点的深度值与所述非叶子节点的深度值的差值加1。
可选的,根据预设代码模板和所述多个节点的属性信息生成目标代码包括:根据所述预设代码模板确定待访问的字段;根据所述待访问的字段对应的节点的属性信息,判断所述待访问的字段是否为数组,如果是,则根据所述数组表达式确定所述待访问的字段对应的循环语句;其中,所述循环语句中第i层循环对应于所述数组的第i维,其中,第i层循环的循环次数是根据第i维的元素个数确定的,i为正整数。
可选的,所述循环语句包括循环控制语句、作用域语句和循环体语句,根据预设代码模板和所述多个节点的属性信息生成目标代码还包括:采用下列公式确定所述循环语句中第i层循环的循环控制语句和作用域语句的缩进量:indent1[i]=(indent0+i-1)×K;其中,indent1[i]为所述第i层循环的循环控制语句和作用域语句的缩进量,indent0为所述待访问的字段对应的节点的缩进单位,K为预设单位缩进量;采用下列公式确定所述循环语句中第i层循环的循环体语句的缩进量:indent2[i]=(indent0+i)×K,其中,indent2[i]为所述第i层循环的循环体语句的缩进量,所述叶子节点的缩进单位为根节点的深度值与所述叶子节点的父节点的深度值的差值加1,所述非叶子节点的缩进单位为根节点的深度值与所述叶子节点的深度值的差值加1。
可选的,所述节点的属性信息还包括:链式字段名,所述链式字段名包括成员运算符、所述节点的字段名和所述节点的祖先节点的字段名,其中,所述链式字段名中每两个字段名之间通过成员运算符连接,所述字段名在所述链式字段名中按照节点的层次从小到大的顺序排列;其中,如果所述节点对应的字段为数组,则所述节点的字段名是根据对应的字段和元素下标确定的,如果所述节点对应的字段为非数组,则所述节点的字段名为对应的字段。
可选的,根据预设代码模板和所述多个节点的属性信息生成目标代码包括:对所述节点的链式字段名进行实例化处理,以得到所述节点的链式变量名,其中,所述链式变量名用于使所述节点对应的字段的变量在所述目标代码中被访问。
可选的,确定每个非根节点的链式字段名的方法包括:从根节点开始,依次将该非根节点的祖先节点的字段名和该非根节点的字段名进行入栈和出栈,并按照出栈的顺序依次将所述字段名写入预设的数组中,以生成字段名数组;根据所述字段名数组,确定该非根节点的链式字段名。
可选的,根据预设代码模板和所述多个节点的属性信息生成目标代码之前,所述方法还包括:读取用户对所述字段定义的变量名;根据所述字段的变量名和所述树形模型,确定所述字段对应的节点的链式变量名,所述链式变量名包括成员运算符、所述节点的变量名和所述节点的祖先节点的变量名,所述链式变量名中每两个变量名之间通过成员运算符连接,所述变量名在所述链式变量名中按照节点的层次从小到大的顺序排列;其中,如果所述节点对应的字段为非数组,则所述节点的变量名为对应的字段的变量名,如果所述节点对应的字段为数组,则所述节点的变量名是根据对应的字段的变量名和元素下标确定的。
本发明实施例还提供一种代码生成装置,所述装置包括:获取模块,用于获取对象的定义信息,所述定义信息包括多个字段的描述信息;生成树模块,用于对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,其中,所述节点与所述字段一一对应,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;代码生成模块,用于根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。
本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述的代码生成方法的步骤。
本发明实施例还提供一种终端,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述的代码生成方法的步骤。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
在本发明实施例的方案中,对对象的定义信息进行解析,生成对象的树形模型,其中,树形模型的节点与对象的定义信息中描述的字段一一对应。由于树形模型中每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员,因此,生成的树形模型中节点之间的父子关系可以表征对象和成员之间的关系,非叶子节点之间的父子关系可以清楚直观地表征字段之间的嵌套关系。进一步地,由于预设代码模板用于描述目标代码的功能,因此,根据节点的属性信息和预设代码模板可以生成针对所述对象的目标代码,无需人工参与,由此可以有效解决人工编码容易出错问题,并且还利于缩短开发周期,从而可以准确、高效地得到用户需要的目标代码。
进一步,本发明实施例的方案中,采用反向更新的方法,从叶子节点开始确定每条路径的各个节点的深度值,相比于现有技术中从根节点开始确定节点的深度值的方法,采用这样的方案,可以使节点的深度值与该节点对应的字段在对象中的逻辑位置对应,以便后续根据节点的深度值确定代码的缩进量,从而提高目标代码的可读性。
进一步,本发明实施例的方案中,如果字段为数组,则该字段对应的节点的属性信息包括数据表达式,由于数组表达式用于指示数组的维数和每一维中元素的个数,因此,生成目标代码时可以根据数组表达式生成字段的循环语句,利于提高目标代码的准确性。
进一步,本发明实施例的方案中,从根节点开始,依次将该非根节点的祖先节点的字段名和该非根节点的字段名进行入栈和出栈,并按照出栈的顺序依次将所述字段名写入预设的数组中,以生成字段名数组,然后可以根据字段名数组,确定该非根节点的链式字段名。采用这样的方案,可以得到各个非根节点的链式字段名,由此可以通过级联的方式访问到对象最底层的字段,利于后续准确地生成目标代码。
附图说明
图1是本发明实施例中一种代码生成方法的流程示意图;
图2是本发明实施例中一种树形模型的结构示意图;
图3是本发明实施例中另一种代码生成方法的部分流程示意图;
图4是本发明实施例中一种代码生成装置的结构示意图。
具体实施方式
如背景技术所述,亟需一种能够高效、准确的代码生成方法。
本发明的发明人经过研究发现,根据头文件中定义的对象(例如,C语言或C++语言中的结构体)编写代码时,容易因人工编码时访问错误的成员而导致程序运行结果出现错误的情况,但这样的错误情况通常无法通过编译检查出来,只有根据程序运行的错误结果人为地进行检查,效率较低,且容易造成生产问题。
现有技术中,常见的CLang等编译器分析C/C++代码时,自动生成抽象语法分析树(ATS),然后使用CLang提供的接口分析结构体,为自动代码生成准备基础。但是由于抽象语法分析树并不会表示出真实语法出现的每一个细节因此,抽象语言分析树无法支持结构体的字段之间存在嵌套关系和字段是数组等复杂情况,也即,根据抽象语法分析树自动生成代码的方法仍然存在很大的局限性。
为了解决上述技术问题,本发明实施例提供一种代码生成方法,在本发明实施例的方案中,对对象的定义信息进行解析,生成对象的树形模型,其中,树形模型的节点与对象的定义信息中描述的字段一一对应。由于树形模型中每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员,因此,生成的树形模型中节点之间的父子关系可以表征对象和成员之间的关系,非叶子节点之间的父子关系可以清楚直观地表征字段之间的嵌套关系。进一步地,由于预设代码模板用于描述目标代码的功能,因此,根据节点的属性信息和预设代码模板可以生成针对所述对象的目标代码,无需人工参与,由此可以有效解决人工编码容易出错问题,并且还利于缩短开发周期,从而可以准确、高效地得到用户需要的目标代码。
为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
参照图1,图1是本发明实施例中一种代码生成方法的流程示意图,所述方法可以由终端执行,所述终端可以是各种现有的具有数据接收和处理能力的终端设备,例如,可以是手机、计算机和平板电脑等,但并不限于此。通过本发明实施例提供的方法,终端可以自动地基于对象的定义信息和预设代码模板生成目标代码,无需人工参与。需要说明的是,本发明实施例中生成的代码可以是基于现有的各种面向对象的编程语言编写的,例如,可以是基于C语言、C++语言编写的,也可以是基于java语言编写的等等,但并不限于此。图1示出的代码生成方法可以包括以下步骤:
步骤S101:获取对象的定义信息,所述定义信息包括多个字段的描述信息;
步骤S102:对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息;
步骤S103:根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码。
可以理解的是,在具体实施中,所述方法可以采用软件程序的方式实现,该软件程序运行于芯片或芯片模组内部集成的处理器中;或者,该方法可以采用硬件或者软硬结合的方式来实现。
在步骤S101的具体实施中,可以获取对象的定义信息,所述定义信息包括多个字段的描述信息。其中,对象的形式和编写代码采用的编程语言对应,例如,编程语言为C语言或C++语言,对象可以是结构体,又例如,编程语言为Java语言,对象可以是类等,但并不限于此,本发明实施例对于对象的形式并不进行限制。
具体而言,可以获取定义文件,所述定义文件可以包括对对象的定义语句,然后可以基于定义文件提取对象的定义信息。在一个具体的例子中,编程语言为C语言或C++语言,对象为结构体,定义文件可以为头文件。可以从外部获取头文件,也可以从本地的数据库读取头文件,本发明实施例对此并不进行限制。进一步地,可以从头文件中提取对象的定义信息,例如,可以采用正则表达式(Regular Expression)进行提取,但并不限于此。
进一步地,对象的定义信息可以包括多个字段的描述信息,其中,多个字段可以包括N级字段,其中第j+1级字段为第j级字段的成员。具体而言,多个字段可以包括第一级字段,第一级字段用于表示对象,例如,第一级字段可以为对象的名称,多个字段还可以包括第二级字段,第二级字段用于表示对象的成员等,例如,第二级字段可以为对象的成员的名称,第三级字段用于表示第二级字段的成员,以此类推,第N级字段为第N-1级字段的成员。其中,N为大于1的正整数,j为正整数,j≤N-1。
进一步地,字段的描述信息可以包括字段的类型,字段的类型可以为基础类型和复合类型,其中,基础类型可以是整型、长整型、字符型和浮点型等,但并不限于此。对于基础类型的字段,描述信息还可以包括字段的长度,字段的长度是根据字段的类型确定的,例如,整型字段的长度为4个字节,长整型字段的长度为8个字节等。需要说明的是,字段的类型为代码中针对该字段所定义的变量所属的类型。例如,在C++语言中,如果字段的类型为复合类型,则针对该字段定义的变量可以为结构体类型。
进一步地,如果基础类型的字段为数组,该字段的描述信息还可以包括数组的维数以及每一维元素的个数。
进一步地,对于复合类型的字段,该字段的描述信息可以包括多个基础类型的字段,所述多个基础类型的字段为该复合类型的字段的成员。换言之,基础类型的字段的描述信息中并不包含其他字段。更进一步地,复合类型的字段的描述信息还可以包括字段的成员的个数等。此外,字段的描述信息还可以包括字段的注释,字段的注释可以是对字段进行解释的信息等。
在步骤S102的具体实施中,可以对定义信息进行解析,生成对象的树形模型。换言之,可以根据对象的定义信息生成该对象的树形模型。其中,树形模型和对象一一对应,也即,可以根据定义文件中定义的每一对象生成该对象的树形模型。例如,可以根据头文件的内容生成多个树形模型,树形模型和头文件中的结构体一一对应。
具体而言,树形模型可以包括多个节点,节点和树形模型对应的对象的定义信息中描述的字段一一对应,且每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员。更具体地,树形模型的非叶子节点对应的字段的类型为复合类型,树形模型的叶子节点对应的字段的类型为基础类型。因此,树形模型中节点之间的父子关系可以用于描述字段和该字段的成员之间的关系,两个非叶子节点之间的父子关系可以用于描述两个字段的嵌套关系。
更具体地,根节点对应于用于表示对象的字段,根节点的子节点对应的字段为对象的成员。如果根节点的子节点为叶子节点,则该子节点对应的字段的类型基础类型,也即,该字段并不具有成员;如果根节点的子节点为非叶子节点,则该子节点对应的字段为复合类型,也即,该字段具有成员。
参照图2,图2是本发明实施例中一种树形模型的结构示意图。所述树形模型包括多个节点(也即,节点0、节点1、节点2……节点8)。
其中,根节点为节点1,根节点与对象A对应,节点2、节点3、节点4和节点5对应的字段为对象A的成员,由于节点2、节点4和节点5为叶子节点,因此,节点2、节点4和节点5对应的字段的类型为基础类型。由于节点3为非叶子节点,则节点3对应的字段B的类型为复合类型,节点3的子节点(节点6、节点7和节点8)为字段B的成员。由于节点6、节点7和节点8均为叶子节点,节点6、节点7和节点8对应的字段的类型也为基础类型。由此,通过树形模型可以清楚直观地描述字段的类型以及字段之间的嵌套关系,从而可以清楚地描述对象的数据结构。
继续参考图1,每个节点具有属性信息,节点的属性信息可以包括以下一项或多项:节点的标识、父节点的标识、节点的名称、节点对应的字段的类型。其中,每个节点的标识是全局唯一的,节点的名称可以为节点对应的字段,例如,根节点的名称为用于表示对象的字段等。
进一步地,节点的属性信息还可以包括节点的父节点的标识。其中,根节点的父节点的标识为空。
进一步地,节点的属性信息还可以包括:节点类型参数,节点类型参数可以用于描述节点是否为叶子节点,也即,当节点类型参数的值为第一预设值时,该节点为叶子节点。其中,叶子节点对应的字段的类型为基础类型。
进一步地,当节点类型参数的值为第二预设值时,该节点为非叶子节点,非叶子节点对应的字段的类型为复合类型。非叶子节点的属性信息还可以包括子节点的个数,所述子节点的个数即为该字段的成员的个数。其中,第一预设值和第二预设值可以是预先设置的。
进一步地,如果基础类型的字段为数组,则该字段对应的节点的属性信息还可以包括数组信息,所述数组信息可以包括数组的维数、数组表达式等,但并不限于此。
其中,数组表达式可以用于指示数组的维数和每一维中元素的个数,例如,数组a为三维数组:a[X][Y][Z],数组a的数组表达式为X_Y_Z,但并不限于此。其中,X、Y、Z为各维中的元素个数,X、Y、Z为正整数。又例如,数据b为一维数组:b[X],则数组b的数组表达式为X。
进一步地,节点的属性信息还可以包括节点的深度值,每个节点的深度值的初始值可以为0,生成树形模型后,可以通过对树形模型进行遍历,对节点的深度值进行更新。
参照图3,图3是本发明实施例中另一种代码生成方法的部分流程示意图。图3示出的代码生成方法可以包括步骤S201至步骤S208,其中,步骤S201至步骤S208可以在步骤S102之后、步骤S103之前执行。通过执行步骤S201至步骤S208,可以确定树形模型中各个节点最终的深度值。更具体地,树形模型中各个节点的深度值的初始值均为0,通过上述步骤S201至步骤S208可以更新非叶子节点的深度值,以得到各节点最终的深度值,节点的深度值可以用于确定代码的缩进量。图3示出的代码生成方法可以包括:
步骤S201:将任意一个叶子节点作为当前节点;
步骤S202:确定所述当前节点的父节点的中间深度值,所述中间深度值为所述当前节点的深度值加1;
步骤S203:判断所述父节点的当前深度值是否小于所述中间深度值;如果是,则执行步骤S204,否则执行步骤S206;
步骤S204:将所述父节点的当前深度值更新为所述中间深度值;
步骤S205:判断所述当前节点的父节点是否为根节点;如果是,则执行步骤S206,否则执行步骤S207;
步骤S206:判断所有的叶子节点是否被遍历;如果是,则得到各节点的深度值,否则执行步骤S208;
步骤S207:将所述父节点作为当前节点;并继续执行步骤S202;
步骤S208:将下一个叶子节点作为当前节点;并继续执行步骤S202。
需要说明的是,各个节点的深度值的初始值为0,通过执行步骤S201至步骤S208,可以对各个非叶子节点的深度值进行更新,各个叶子节点的深度值仍为0。
由此,本发明实施例的方案中,采用反向更新的方法,从叶子节点开始确定每条路径的各个节点的深度值,相比于现有技术中从根节点开始确定节点的深度值的方法,采用这样的方案,可以使节点的深度值与该节点对应的字段在对象中的逻辑位置对应,以便后续根据节点的深度值确定代码的缩进量,从而提高目标代码的可读性。
继续参考图1,节点的属性信息还可以包括链式字段名,所述链式字段名可以使针对节点对应的字段定义的变量能够被访问。
其中,每个节点的链式字段名可以包括该节点的字段名、该节点的祖先节点的字段名和成员运算符。更具体地,如果该节点对应的字段为非数组,则该节点的字段名即为该节点对应的字段,如果该节点对应的字段为数组,则该节点的字段名是根据对应的字段和元素下标确定的。成员运算符可以是“.”、“->”等,但并不限于此,成员运算符的具体形式可以根据具体的编程语言确定。
具体而言,确定每个非根节点的链式字段名的方法可以包括:从根节点开始,依次将该非根节点的祖先节点的字段名和该非根节点的字段名进行入栈和出栈,并按照出栈的顺序依次将所述字段名写入预设的数组中,以生成字段名数组;根据所述字段名数组,确定该非根节点的链式字段名。
更具体地,按照出栈的顺序依次将字段名写入预设的数组中具体可以包括:将第m个出栈的字段名作为预设的数组的第m个元素的值,以得到字段名数组,也即,字段名数组用于存放节点的字段名,其中,多个字段名在字段名数组中的前后顺序与出栈的先后顺序一致。进一步地,根据字段名数组确定该非根节点的链式字段名可以包括:将字段名数组中字段名倒序读出,以得到该非根节点的链式字段名。其中,链式字段名中每两个字段名之间通过成员运算符连接。由此,非根节点的字段和该非根节点的祖先节点的字段名在链式字段名中按照节点的层次从小到大的顺序排列,其中,根节点的层次为0,根节点的子节点的层次均为1,依次类推……需要说明的是,根节点的属性信息中可以不包括链式字段名。其中,m为正整数。
在步骤S103的具体实施中,可以对节点的链式字段名进行实例化处理,以得到节点的链式变量名,通过节点的链式变量名可以在目标代码中访问节点对应的字段的变量。具体而言,可以读取用户对字段定义的变量,并根据用户对字段定义的变量对节点的链式字段名进行实例化,以得到节点的链式变量名。
在一个具体的例子中,也可以直接得到链式变量名,也即,无需先确定节点的链式字段名,再根据链式字段名得到链式变量名。具体而言,可以读取用户对字段定义的变量名,并确定字段对应的节点的变量名。其中,如果字段为非数组,则节点的变量名为对应的字段的变量名,如果字段为数组,则节点的变量名是根据对应的字段的变量名和元素下标确定的。
进一步地,从根节点开始,依次将该非根节点的祖先节点的变量名和该非根节点的字段名进行入栈和出栈,并按照出栈的顺序依次将所述字段名写入预设的数组中,以生成变量名数组;根据所述变量名数组,确定该非根节点的链式变量名。根据变量名数组确定链式变量名的方法可以参照上文关于根据字段名确定链式字段名的方法,在此不再赘述。
其中,所述链式变量名可以包括成员运算符、所述节点的变量名和所述节点的祖先节点的变量名,所述链式变量名中每两个变量名之间通过成员运算符连接,所述变量名在所述链式变量名中按照节点的层次从大到小的顺序排列。参照图2,图2中节点1对应的字段为university,节点3对应的字段为Institute,且字段Institute为数组,节点6对应的字段为studentcount,其中,用户针对字段university定义的变量为obj,对于Institute定义的变量为inst,则节点3的变量名为inst[n],其中,n可以为数组中任一元素的下标,n为正整数。由此,节点6的链式变量名为obj.inst[n].studentcount。
继续参照图1,得到各节点对应的链式变量名后,可以根据预设代码模板对各个节点对应的字段进行访问,以便生成目标代码。
具体而言,可以根据所述预设代码模板确定待访问的字段,然后可以生成待访问的字段对应的语句。其中,可以根据待访问的字段对应的节点的深度值确定待访问的字段对应的语句的缩进量。
更具体地,根据所述待访问的字段对应的节点的深度值确定节点的缩进单位,如果待访问的字段对应的节点为叶子节点,则节点的缩进单位为根节点的深度值与该叶子节点的父节点的深度值的差值加1,如果待访问的字段对应的节点为非叶子节点,则节点的缩进单位为根节点的深度值与该非叶子节点的深度值的差值加1。
进一步地,可以根据缩进单位确定待访问的字段对应的语句的缩进量,其中,缩进量为缩进单位和预设单位缩进量的乘积。预设单位缩进量可以是预先设置的,本发明实施例对预设单位缩进的具体数值并不进行限制。
进一步地,还可以判断待访问的字段是否为数组,如果是,则可以根据属性信息中的数组表达式生成待访问字段对应的循环语句。其中,循环语句中第i层循环对应于数组第i层循环对应于数组的第i维,第i层循环的循环次数是根据第i维的元素个数确定的。具体而言,第i维的循环语句可以包括循环控制语句、作用域语句和循环体语句,其中,循环控制语句中可以包括条件判断句,条件判断句的内容可以是根据第i维的元素个数确定的。由此,可以根据数组表达式控制循环语句的逻辑等。
进一步地,还可以确定第i维的循环语句的缩进量。具体而言,可以采用下列公式确定所述循环语句中第i层循环的循环控制语句和作用域语句的缩进量:
indent1[i]=(indent0+i-1)×K;
其中,indent1[i]为所述第i层循环的循环控制语句和作用域语句的缩进量,indent0为所述待访问的字段对应的节点的缩进单位,K为预设单位缩进量。
进一步地,还可以采用下列公式确定所述循环语句中第i层循环的循环体语句的缩进量:
indent2[i]=(indent0+i)×K
其中,indent2[i]为所述第i层循环的循环体语句的缩进量。还需要说明的是,如果待访问的字段为多维数组,也即,第i层循环嵌套第i+1层循环,则第i层循环的循环体语句为第i层循环的循环体中除第i+1层循环的循环语句以外的其他语句。
采用上述方案可以根据数组的维数确定循环语句的缩进量,有利于进一步提高目标代码的可读性。
需要说明的是,本发明实施例中的预设代码模板用于描述目标代码的功能。例如,目标代码为目标函数代码时,预设代码模板可以用于描述目标函数的功能,目标代码为测试代码时,预设代码模板可以用于描述测试步骤等,但并不限于此,本发明实施例对于预设代码模板的具体内容并不进行限制。可以根据设置不同的预设代码模板生成不同的目标代码,本发明实施例对此并不进行限制。进一步地,生成的目标代码中包括所述对象。例如,在一个具体的例子中,目标代码为目标函数代码,所述对象可以为该目标函数的形参,但并不限于此。
参照图4,图4是本发明实施例中一种代码生成装置的结构示意图。图4示出的代码生成装置可以包括:
获取模块41,用于获取对象的定义信息,所述定义信息包括多个字段的描述信息;
生成树模块42,用于对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,其中,所述节点与所述字段一一对应,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;
代码生成模块43,用于根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。
在具体实施中,上述的代码生成装置可以对应于终端内具有代码生成功能的芯片,或者对应于终端内具有代码生成动能的芯片模组,或者对应于终端。
关于图4示出的代码生成装置的工作原理、工作方式和有益效果等更多内容,可以参照上文关于代码生成方法的相关描述,在此不再赘述。
本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述的代码生成方法的步骤。所述存储介质可以包括ROM、RAM、磁盘或光盘等。所述存储介质还可以包括非挥发性存储器(non-volatile)或者非瞬态(non-transitory)存储器等。
本发明实施例还提供一种终端,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述的代码生成方法的步骤。所述终端包括但不限于手机、计算机、平板电脑等终端设备。
应理解,本申请实施例中,所述处理器可以为中央处理单元(central processingunit,简称CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signalprocessor,简称DSP)、专用集成电路(application specific integrated circuit,简称ASIC)、现成可编程门阵列(field programmable gate array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,简称ROM)、可编程只读存储器(programmable ROM,简称PROM)、可擦除可编程只读存储器(erasable PROM,简称EPROM)、电可擦除可编程只读存储器(electricallyEPROM,简称EEPROM)或闪存。易失性存储器可以是随机存取存储器(random accessmemory,简称RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,简称RAM)可用,例如静态随机存取存储器(staticRAM,简称SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronousDRAM,简称SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,简称DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,简称ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,简称SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,简称DR RAM)。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机程序可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的;例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式;例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。例如,对于应用于或集成于芯片的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于芯片模组的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于芯片模组的同一组件(例如芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片模组内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于终端的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于终端内同一组件(例如,芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于终端内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,表示前后关联对象是一种“或”的关系。
本申请实施例中出现的“多个”是指两个或两个以上。
本申请实施例中出现的第一、第二等描述,仅作示意与区分描述对象之用,没有次序之分,也不表示本申请实施例中对设备个数的特别限定,不能构成对本申请实施例的任何限制。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (14)
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层循环的循环控制语句和作用域语句的缩进量,indent0为所述待访问的字段对应的节点的缩进单位,K为预设单位缩进量;
采用下列公式确定所述循环语句中第i层循环的循环体语句的缩进量:
indent2[i]=(indent0+i)×K
其中,indent2[i]为所述第i层循环的循环体语句的缩进量,所述叶子节点的缩进单位为根节点的深度值与所述叶子节点的父节点的深度值的差值加1,所述非叶子节点的缩进单位为根节点的深度值与所述叶子节点的深度值的差值加1。
8.根据权利要求1所述的代码生成方法,其特征在于,所述节点的属性信息还包括:链式字段名,所述链式字段名包括成员运算符、所述节点的字段名和所述节点的祖先节点的字段名,其中,所述链式字段名中每两个字段名之间通过成员运算符连接,所述字段名在所述链式字段名中按照节点的层次从小到大的顺序排列;
其中,如果所述节点对应的字段为数组,则所述节点的字段名是根据对应的字段和元素下标确定的,如果所述节点对应的字段为非数组,则所述节点的字段名为对应的字段。
9.根据权利要求8所述的代码生成方法,其特征在于,根据预设代码模板和所述多个节点的属性信息生成目标代码包括:
对所述节点的链式字段名进行实例化处理,以得到所述节点的链式变量名,其中,所述链式变量名用于使所述节点对应的字段的变量在所述目标代码中被访问。
10.根据权利要求8所述的代码生成方法,其特征在于,确定每个非根节点的链式字段名的方法包括:
从根节点开始,依次将该非根节点的祖先节点的字段名和该非根节点的字段名进行入栈和出栈,并按照出栈的顺序依次将所述字段名写入预设的数组中,以生成字段名数组;
根据所述字段名数组,确定该非根节点的链式字段名。
11.根据权利要求1所述的代码生成方法,其特征在于,根据预设代码模板和所述多个节点的属性信息生成目标代码之前,所述方法还包括:
读取用户对所述字段定义的变量名;
根据所述字段的变量名和所述树形模型,确定所述字段对应的节点的链式变量名,所述链式变量名包括成员运算符、所述节点的变量名和所述节点的祖先节点的变量名,所述链式变量名中每两个变量名之间通过成员运算符连接,所述变量名在所述链式变量名中按照节点的层次从小到大的顺序排列;
其中,如果所述节点对应的字段为非数组,则所述节点的变量名为对应的字段的变量名,如果所述节点对应的字段为数组,则所述节点的变量名是根据对应的字段的变量名和元素下标确定的。
12.一种代码生成装置,其特征在于,所述装置包括:
获取模块,用于获取对象的定义信息,所述定义信息包括多个字段的描述信息;
生成树模块,用于对所述定义信息进行解析,生成所述对象的树形模型,所述树形模型包括多个节点,每个节点具有属性信息,其中,所述节点与所述字段一一对应,每一非叶子节点的子节点对应的字段为该非叶子节点对应的字段的成员;
代码生成模块,用于根据预设代码模板和所述多个节点的属性信息生成针对所述对象的目标代码,其中,所述预设代码模板用于描述所述目标代码的功能。
13.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时,执行权利要求1至11中任一项所述的代码生成方法的步骤。
14.一种终端,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序时执行权利要求1至11中任一项所述的代码生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111109246.9A CN113791768B (zh) | 2021-09-22 | 2021-09-22 | 代码生成方法及装置、存储介质、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111109246.9A CN113791768B (zh) | 2021-09-22 | 2021-09-22 | 代码生成方法及装置、存储介质、终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113791768A true CN113791768A (zh) | 2021-12-14 |
CN113791768B CN113791768B (zh) | 2023-04-14 |
Family
ID=78879127
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111109246.9A Active CN113791768B (zh) | 2021-09-22 | 2021-09-22 | 代码生成方法及装置、存储介质、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113791768B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816425A (zh) * | 2022-04-27 | 2022-07-29 | 珠海市奥德维科技有限公司 | 将自动化语言程序转换为lua语言程序的方法、系统、电子设备及存储介质 |
CN117270838A (zh) * | 2023-11-22 | 2023-12-22 | 太平金融科技服务(上海)有限公司 | 一种通用公式脚本的生成方法、装置、设备及介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2347231A1 (en) * | 2001-05-09 | 2002-11-09 | Ibm Canada Limited-Ibm Canada Limitee | Code generation for mapping object fields within nested arrays |
CN102663103A (zh) * | 2012-04-13 | 2012-09-12 | 北京工业大学 | 可配置的自动化生成数据库和数据访问的方法 |
CN104915952A (zh) * | 2015-05-15 | 2015-09-16 | 中国科学院上海微系统与信息技术研究所 | 一种深度图像中基于多叉树的局部凸出对象提取方法 |
CN107220096A (zh) * | 2017-04-20 | 2017-09-29 | 北京小度信息科技有限公司 | 一种json数据解析方法及装置 |
CN107291450A (zh) * | 2017-05-25 | 2017-10-24 | 深圳市彬讯科技有限公司 | 一种编程友好型的敏捷代码自动生成方法 |
CN109683881A (zh) * | 2018-12-27 | 2019-04-26 | 潍柴动力股份有限公司 | 一种代码格式调整方法及装置 |
CN109766083A (zh) * | 2018-12-27 | 2019-05-17 | 浪潮软件集团有限公司 | 一种使用java语言调用fabric区块链网络上链码的实现方法 |
CN110716953A (zh) * | 2019-10-10 | 2020-01-21 | 深圳前海微众银行股份有限公司 | Sql语句自动生成方法、装置、设备及可读存储介质 |
CN111523290A (zh) * | 2020-04-09 | 2020-08-11 | 杭州趣链科技有限公司 | 一种代码转换方法、设备和存储介质 |
US20200379751A1 (en) * | 2019-05-28 | 2020-12-03 | Servicenow, Inc. | Systems and methods for software build file analytics |
CN112114792A (zh) * | 2020-09-14 | 2020-12-22 | 中国船舶重工集团公司第七0九研究所 | 通用c/c++结构化对象转换为json对象的代码生成方法与系统 |
US20210191699A1 (en) * | 2018-03-16 | 2021-06-24 | Capital One Services, Llc | Generating closures from abstract representation of source code |
-
2021
- 2021-09-22 CN CN202111109246.9A patent/CN113791768B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2347231A1 (en) * | 2001-05-09 | 2002-11-09 | Ibm Canada Limited-Ibm Canada Limitee | Code generation for mapping object fields within nested arrays |
CN102663103A (zh) * | 2012-04-13 | 2012-09-12 | 北京工业大学 | 可配置的自动化生成数据库和数据访问的方法 |
CN104915952A (zh) * | 2015-05-15 | 2015-09-16 | 中国科学院上海微系统与信息技术研究所 | 一种深度图像中基于多叉树的局部凸出对象提取方法 |
CN107220096A (zh) * | 2017-04-20 | 2017-09-29 | 北京小度信息科技有限公司 | 一种json数据解析方法及装置 |
CN107291450A (zh) * | 2017-05-25 | 2017-10-24 | 深圳市彬讯科技有限公司 | 一种编程友好型的敏捷代码自动生成方法 |
US20210191699A1 (en) * | 2018-03-16 | 2021-06-24 | Capital One Services, Llc | Generating closures from abstract representation of source code |
CN109683881A (zh) * | 2018-12-27 | 2019-04-26 | 潍柴动力股份有限公司 | 一种代码格式调整方法及装置 |
CN109766083A (zh) * | 2018-12-27 | 2019-05-17 | 浪潮软件集团有限公司 | 一种使用java语言调用fabric区块链网络上链码的实现方法 |
US20200379751A1 (en) * | 2019-05-28 | 2020-12-03 | Servicenow, Inc. | Systems and methods for software build file analytics |
CN110716953A (zh) * | 2019-10-10 | 2020-01-21 | 深圳前海微众银行股份有限公司 | Sql语句自动生成方法、装置、设备及可读存储介质 |
CN111523290A (zh) * | 2020-04-09 | 2020-08-11 | 杭州趣链科技有限公司 | 一种代码转换方法、设备和存储介质 |
CN112114792A (zh) * | 2020-09-14 | 2020-12-22 | 中国船舶重工集团公司第七0九研究所 | 通用c/c++结构化对象转换为json对象的代码生成方法与系统 |
Non-Patent Citations (1)
Title |
---|
慕测科技: "用于代码生成的基于树的Transformer结构", 《HTTPS://WWW.51CTO.COM/ARTICLE/631708.HTML?PC》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816425A (zh) * | 2022-04-27 | 2022-07-29 | 珠海市奥德维科技有限公司 | 将自动化语言程序转换为lua语言程序的方法、系统、电子设备及存储介质 |
CN117270838A (zh) * | 2023-11-22 | 2023-12-22 | 太平金融科技服务(上海)有限公司 | 一种通用公式脚本的生成方法、装置、设备及介质 |
CN117270838B (zh) * | 2023-11-22 | 2024-02-13 | 太平金融科技服务(上海)有限公司 | 一种通用公式脚本的生成方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113791768B (zh) | 2023-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10572822B2 (en) | Modular memoization, tracking and train-data management of feature extraction | |
CN113791768B (zh) | 代码生成方法及装置、存储介质、终端 | |
CN107622080B (zh) | 一种数据处理方法及设备 | |
CN106951231B (zh) | 一种计算机软件开发方法及装置 | |
US10534592B2 (en) | Template expressions for constraint-based systems | |
US11327722B1 (en) | Programming language corpus generation | |
CN112328226B (zh) | 一种嵌入式系统自动化测试代码生成方法及装置 | |
CN112187713B (zh) | 报文转换的方法、装置、计算机设备和存储介质 | |
CN111159215A (zh) | Java类与关系型数据库的映射方法、装置及计算设备 | |
US20190042207A1 (en) | Configuration model parsing for constraint-based systems | |
CN114138748A (zh) | 数据库映射文件生成方法、装置、设备及存储介质 | |
US11055275B2 (en) | Database revalidation using parallel distance-based groups | |
CN113010550B (zh) | 结构化数据的批处理对象生成、批处理方法和装置 | |
CN115129598A (zh) | 一种sql语句的风险检测方法、装置、系统及介质 | |
CN113176877A (zh) | 实体类生成方法、装置及存储介质 | |
CN116501744B (zh) | 仿真数据的自动化建表与入库方法、装置和计算机设备 | |
CN111813846A (zh) | 一种数据分析处理系统和数据处理方法 | |
US9754047B2 (en) | Dynamically adapting objects | |
CN115544522B (zh) | 源码漏洞检测方法、装置、电子设备及存储介质 | |
CN116954622B (zh) | 抽象语法树和源代码坐标的关联方法、电子设备和介质 | |
CN110879722B (zh) | 生成逻辑示意图的方法及装置、计算机可存储介质 | |
US20240135148A1 (en) | Semantic Representations of Mathematical Expressions in a Continuous Vector Space and Generation of Different but Mathematicallly Equivalent Expressions and Applications Thereof | |
CN114416090A (zh) | 一种单页面应用框架Vue组件的转换方法及装置 | |
CN114238086A (zh) | 内存泄露检测方法、装置、计算机设备和存储介质 | |
CN115756487A (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 |