CN104657140B - 代码生成方法及装置 - Google Patents
代码生成方法及装置 Download PDFInfo
- Publication number
- CN104657140B CN104657140B CN201510070808.1A CN201510070808A CN104657140B CN 104657140 B CN104657140 B CN 104657140B CN 201510070808 A CN201510070808 A CN 201510070808A CN 104657140 B CN104657140 B CN 104657140B
- Authority
- CN
- China
- Prior art keywords
- data table
- syntax tree
- abstract syntax
- code
- generating
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 107
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 238000012986 modification Methods 0.000 abstract description 2
- 230000004048 modification Effects 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种代码生成方法及装置,属于计算机领域。所述方法包括:当接收到代码生成指令时,根据所述代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件;如果已存储所述数据表的历史代码文件,则将所述历史代码文件转换成第一抽象语法树;根据所述数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树;根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码。本发明通过检测该数据表的历史代码文件,并将历史代码文件中开发人员修改的代码添加到为该数据表重新生成的代码中,无需开发人员再次进行修改,提高了代码生成效率。
Description
技术领域
本发明涉及计算机领域,特别涉及一种代码生成方法及装置。
背景技术
随着计算机技术的快速发展,出现了越来越多诸如即时通讯、游戏等互联网业务,进而也衍生出了越来越多用于处理这些业务的业务系统。每个业务系统可能会包括多个不同的功能模块,每个功能模块可以将所需的数据存储在多张数据表中,因此,开发人员在开发该业务系统时,需要针对每个功能模块的多张数据表分别编写用于描述和定位每张数据表的代码,以便业务系统在运行中能够通过每张数据表的代码,从每张数据表中读数据、写数据或者删除数据。
而对于不同的数据表,从数据表中读数据、写数据或者删除数据的过程基本相同,因此,为了提高业务系统的开发效率,开发人员可以通过代码生成器,为每张数据表分别生成代码。之后,开发人员可以根据该业务系统的实际需求,对生成的代码进行修改,完成该业务系统的开发。
随着该业务系统的运行,当确定该业务系统中数据表的结构不能满足需求时,开发人员可以对该数据表的结构进行修改,之后,再通过代码生成器为该数据表生成新代码,而生成的新代码中覆盖了开发人员之前基于该业务系统的实际需求进行修改的代码,此时,为了满足该业务系统的实际需求,开发人员需要再次对生成的新代码进行修改,操作比较复杂,降低了代码生成效率。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种代码生成方法及装置。所述技术方案如下:
一方面,提供了一种代码生成方法,所述方法包括:
当接收到代码生成指令时,根据所述代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件;
如果已存储所述数据表的历史代码文件,则将所述历史代码文件转换成第一抽象语法树;
根据所述数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树;
根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码。
可选地,所述根据所述代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件,包括:
根据所述代码生成指令携带的数据表标识,获取数据表的代码文件存储路径;
如果所述代码文件存储路径中存储有代码文件,则确定已存储所述数据表的历史代码文件,否则,确定没有存储所述数据表的历史代码文件。
可选地,所述根据所述数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树,包括:
根据所述数据表标识,获取对应的数据表属性信息;
根据所述数据表属性信息和存储的数据表模板代码,生成所述数据表的标准代码;
将所述数据表的标准代码转换成第二抽象语法树。
可选地,所述根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码,包括:
从所述第一抽象语法树包括的方法中,获取与所述第二抽象语法树包括的方法不同的方法;
从所述第一抽象语法树包括的成员变量中,获取与所述第二抽象语法树包括的成员变量不同的成员变量;
将获取到的方法和获取到的成员变量添加到所述第二抽象语法树中,得到新抽象语法树;
根据所述新抽象语法树,生成所述数据表的代码。
可选地,所述根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码,包括:
从所述第二抽象语法树包括的方法中,获取与所述第一抽象语法树包括的方法不同的方法;
从所述第二抽象语法树包括的成员变量中,获取与所述第一抽象语法树包括的成员变量不同的成员变量;
将获取到的方法和获取到的成员变量添加到所述第一抽象语法树中,得到新抽象语法树;
根据所述新抽象语法树,生成所述数据表的代码。
另一方面,提供了一种代码生成装置,所述装置包括:
判断模块,用于当接收到代码生成指令时,根据所述代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件;
转换模块,用于如果已存储所述数据表的历史代码文件,则将所述历史代码文件转换成第一抽象语法树;
第一生成模块,用于根据所述数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树;
第二生成模块,用于根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码。
可选地,所述判断模块包括:
第一获取单元,用于根据所述代码生成指令携带的数据表标识,获取数据表的代码文件存储路径;
确定单元,用于如果所述代码文件存储路径中存储有代码文件,则确定已存储所述数据表的历史代码文件,否则,确定没有存储所述数据表的历史代码文件。
可选地,所述第一生成模块包括:
第二获取单元,用于根据所述数据表标识,获取对应的数据表属性信息;
第一生成单元,用于根据所述数据表属性信息和存储的数据表模板代码,生成所述数据表的标准代码;
转换单元,用于将所述数据表的标准代码转换成第二抽象语法树。
可选地,所述第二生成模块包括:
第三获取单元,用于从所述第一抽象语法树包括的方法中,获取与所述第二抽象语法树包括的方法不同的方法;
第四获取单元,用于从所述第一抽象语法树包括的成员变量中,获取与所述第二抽象语法树包括的成员变量不同的成员变量;
第一添加单元,用于将获取到的方法和获取到的成员变量添加到所述第二抽象语法树中,得到新抽象语法树;
第二生成单元,用于根据所述新抽象语法树,生成所述数据表的代码。
可选地,所述第二生成模块包括:
第五获取单元,用于从所述第二抽象语法树包括的方法中,获取与所述第一抽象语法树包括的方法不同的方法;
第六获取单元,用于从所述第二抽象语法树包括的成员变量中,获取与所述第一抽象语法树包括的成员变量不同的成员变量;
第二添加单元,用于将获取到的方法和获取到的成员变量添加到所述第一抽象语法树中,得到新抽象语法树;
第三生成单元,用于根据所述新抽象语法树,生成所述数据表的代码。
在本发明实施例中,当接收到代码生成指令时,根据该代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件,如果已存储该数据表的历史代码文件,则确定之前已为该数据表生成的代码,且开发人员对该数据表的结构重新进行了修改。此时,将该数据表的历史代码文件转换成第一抽象语法树,并根据数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树,根据第一抽象语法树与第二抽象语法树,生成该数据表的代码,使生成的代码中包括历史代码文件中开发人员进行修改的代码,无需开发人员再次对生成的代码进行修改,操作比较简单,节省了代码生成时间,进而提高了代码生成效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种代码生成方法流程图;
图2是本发明实施例提供的一种代码生成方法流程图;
图3是本发明实施例提供的一种代码生成装置结构示意图;
图4是本发明实施例提供的另一种代码生成装置结构示意图;
图5是本发明实施例提供的又一种代码生成装置结构示意图;
图6是本发明实施例提供的一种第二生成模块结构示意图;
图7是本发明实施例提供的另一种第二生成模块结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在对本发明实施例进行详细地解释说明之前,先对本发明的应用场景进行介绍。在本发明实施例中,用于处理互联网业务的业务系统可以包括多个不同的功能模块,每个功能模块可以将所需的数据存储在多张数据表中,而每张数据表可以为多行多列的表格,每行表格用于存储一个字段的数据,每列表格用于存储另一个字段的数据,比如,该互联网业务为游戏,游戏业务系统包括的某个功能模块的数据表为2行2列的表格,第一行表格用于存储用户A的数据,第二行表格用于存储用户B的数据,第一列表格用于存储用户登录游戏的时间,第二列表格用于存储用户登录游戏的地点。而为了从数据表中读数据、写数据或者删除数据,需要为该数据表编写用于描述和定位该数据表的代码,通过该代码,对该数据表进行读、写或删除等操作。比如,当业务系统检测到用户A登录游戏的时间时,可以通过该数据表的代码查找到该数据表,并通过该代码确定用于存储用户A登录游戏的时间的表格为该数据表中第一行第一列的表格,从而使业务系统将用户A登录游戏的时间写入该数据表第一行第一列的表格中。
图1是本发明实施例提供的一种代码生成方法流程图。参见图1,该方法包括:
步骤101:当接收到代码生成指令时,根据代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件。
步骤102:如果已存储该数据表的历史代码文件,则将该数据表的历史代码文件转换成第一抽象语法树。
步骤103:根据数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树。
步骤104:根据第一抽象语法树与第二抽象语法树,生成该数据表的代码。
在本发明实施例中,当接收到代码生成指令时,根据该代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件,如果已存储该数据表的历史代码文件,则确定之前已为该数据表生成的代码,且开发人员对该数据表的结构重新进行了修改。此时,将该数据表的历史代码文件转换成第一抽象语法树,并根据数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树,根据第一抽象语法树与第二抽象语法树,生成该数据表的代码,使生成的代码中包括历史代码文件中开发人员进行修改的代码,无需开发人员再次对生成的代码进行修改,操作比较简单,节省了代码生成时间,进而提高了代码生成效率。
可选地,根据代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件,包括:
根据代码生成指令携带的数据表标识,获取数据表的代码文件存储路径;
如果获取的代码文件存储路径中存储有代码文件,则确定已存储该数据表的历史代码文件,否则,确定没有存储该数据表的历史代码文件。
可选地,根据数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树,包括:
根据数据表标识,获取对应的数据表属性信息;
根据获取的数据表属性信息和存储的数据表模板代码,生成该数据表的标准代码;
将该数据表的标准代码转换成第二抽象语法树。
可选地,根据第一抽象语法树与第二抽象语法树,生成该数据表的代码,包括:
从第一抽象语法树包括的方法中,获取与第二抽象语法树包括的方法不同的方法;
从第一抽象语法树包括的成员变量中,获取与第二抽象语法树包括的成员变量不同的成员变量;
将获取到的方法和获取到的成员变量添加到第二抽象语法树中,得到新抽象语法树;
根据新抽象语法树,生成该数据表的代码。
可选地,根据第一抽象语法树与第二抽象语法树,生成该数据表的代码,包括:
从第二抽象语法树包括的方法中,获取与第一抽象语法树包括的方法不同的方法;
从第二抽象语法树包括的成员变量中,获取与第一抽象语法树包括的成员变量不同的成员变量;
将获取到的方法和获取到的成员变量添加到第一抽象语法树中,得到新抽象语法树;
根据新抽象语法树,生成该数据表的代码。
上述所有可选技术方案,均可按照任意结合形成本发明的可选实施例,本发明实施例对此不再一一赘述。
图2是本发明实施例提供的一种代码生成方法流程图,该方法可以应用于终端中,该终端可以为个人计算机、笔记本等。参见图2,该方法包括:
步骤201:当接收到代码生成指令时,根据代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件。
对于事先创建的多个数据表中的每个数据表,当开发人员为该数据表生成代码时,开发人员可以从该多个数据表中选择该数据表,并向终端提交代码生成指令。当终端接收到代码生成指令时,终端根据代码生成指令携带的数据表标识,获取该数据表的代码文件存储路径;如果代码文件存储路径中存储有代码文件,则确定已存储该数据表的历史代码文件,否则,确定没有存储该数据表的历史代码文件。
为了节省代码生成时间,开发人员可以事先对每个数据表设置对应的代码文件存储路径,并将数据表标识与设置的代码文件存储路径,存储在数据表标识与代码文件存储路径之间的对应关系中,之后,为该数据表每生成一次代码时,可以直接将该代码对应的代码文件存储在该代码文件存储路径下。当然,开发人员也可以在为该数据表首次生成代码时,对该数据表设置对应的代码文件存储路径,并将该数据表标识与设置的代码文件存储路径,存储在数据表标识与代码文件存储路径之间的对应关系中。当终端接收到代码生成指令时,终端可以直接根据代码生成指令携带的数据表标识,从存储的数据表标识与代码文件存储路径之间的对应关系中,获取该数据表的代码文件存储路径。
需要说明的是,在本发明实施例中,在终端中也可以不用存储数据表标识与代码文件存储路径之间的对应关系,当开发人员为该数据表每生成一次代码时,该开发人员需要选择一次代码文件存储路径,并将选择的代码文件存储路径携带在代码生成指令中。并且,为了在数据表的结构发生变化之后,使生成该数据表代码的操作比较简单,以及提高代码生成效率时,需要开发人员为该数据表每次选择相同的代码文件存储路径,这样才能判断终端是否已存储该数据表的历史代码文件。
其中,数据表标识可以为数据表名称、数据表编号等等,本发明实施例对此不做具体限定。另外,代码生成指令可以是开发人员进行触发,即,开发人员通过终端界面中的代码生成按钮进行触发,当然,开发人员也可以通过事先设定的操作进行触发,本发明实施例同样对此不做具体限定。
步骤202:如果已存储该数据表的历史代码文件,则将该数据表的历史代码文件转换成第一抽象语法树。
如果已存储该数据表的历史代码文件,则确定之前已为该数据表生成代码,且随着业务系统的运行,该数据表的结构不能满足需求,此时,开发人员已对该数据表的结构进行了修改,且该代码生成指令用于为结构修改后的该数据表生成代码。
由于该数据表的历史代码文件中,可能存储开发人员基于业务系统的实际需求进行修改的代码,并且为结构修改后的数据表生成代码之后,确保生成的代码中不覆盖开发人员修改的代码,也即是,为该数据表重新生成的代码中保留开发人员修改的代码,需要将该数据表的历史代码文件转换成第一抽象语法树,从而获取开发人员修改的代码。
在本发明实施例中,抽象语法树可以为AST(Abstract Syntax Tree,抽象语法树),本发明实施例对此不做具体限定。
进一步地,如果没有存储该数据表的历史代码文件,则确定之前没有为该数据表生成代码,此时,代码生成指令用于首次为该数据表生成代码。终端可以直接调用代码生成引擎,并根据该数据表标识的数据表属性信息和存储的数据表模板代码,为该数据表生成标准代码。之后,开发人员可以基于业务系统的实际需求,对生成的标准代码进行修改,得到该数据表的代码,并将该数据表的代码存储在该数据表的代码文件存储路径下。
需要说明的是,数据表模板代码用于描述数据表的结构,也即是,数据表模板代码是事先基于数据表的结构生成。另外,对于结构相同的多张数据表,该多张数据表的数据表模板代码相同。
基于上述步骤确定终端已存储该数据表的历史代码文件,并将该数据表的历史代码文件转换成第一抽象语法树之后,由于该数据表的结构已修改,所以,需要为该数据表重新生成标准代码,具体如下。
步骤203:根据该数据表标识,获取对应的数据表属性信息。
为该数据表生成标准代码时,需要获取到数据表属性信息,而在本发明实施例中,可以事先存储数据表标识与数据表属性信息之间的对应关系。此时,就可以根据该数据表标识,从存储的数据表标识与数据表属性信息之间的对应关系中获取对应的数据表属性信息。
其中,数据表属性信息可以包括数据表中的各个字段名称、各个字段类型、字段之间的对应关系等等,本发明实施例对此不做具体限定。
步骤204:根据获取的数据表属性信息和存储的数据表模板代码,生成该数据表的标准代码。
在本发明实施例中,根据获取的数据表属性信息和存储的数据表模板代码,生成该数据表的标准代码的方法可以包括多种,比如,存储的数据表模板中包括数据表属性信息的填充位置,此时,可以调用代码生成引擎,将获取的数据表属性信息填充到存储的数据表模板代码中对应的位置,得到该数据表的标准代码。本发明实施不再对各种方法进行一一列出。
需要说明的是,在本发明实施例中,开发人员可以事先通过模板语言编写数据表模板代码,并进行存储。而模板语言可以为Velocity、freemark等语言,本发明实施例对此不做具体限定。
步骤205:将该数据表的标准代码转换成第二抽象语法树。
该数据表的历史代码文件中可以包括该数据表的历史标准代码和开发人员修改的代码,历史标准代码基于结构修改之前的数据表属性信息和数据表模板代码生成,而当该数据表的结构发生变化,也即是,该数据表的属性信息发生变化,此时,该数据表的标准代码相对于历史标准代码也发生了变化。因此,需要将该数据表的标准代码转换成第二抽象语法树,进而生成该数据表的代码。
步骤206:根据第一抽象语法树与第二抽象语法树,生成该数据表的代码。
数据表的代码中可以包括多个类,每个类可以包括多个方法和多个成员变量,且该多个类之间可以相互调用类中的方法和成员变量,因此,在本发明实施例中,将代码中的方法和成员变量作为最小单元,并基于第一抽象语法树和第二抽象语法树,生成该数据表的代码的操作可以为:将第一抽象语法树包括的方法和第二抽象语法树包括的方法进行比较,获取第一方法集合,第一方法集合包括第一抽象语法树与第二抽象语法树相同的方法,以及将第一抽象语法树包括的成员变量与第二抽象语法树包括的成员变量进行比较,获取第一成员变量集合,第一成员变量集合包括第一抽象语法树与第二抽象语法树相同的成员变量,将第一方法集合、第一成员变量集合、第二方法集合和第二成员变量集合组成新抽象语法树,根据新抽象语法树,生成该数据表的代码。其中,第二方法集合包括的方法为第三抽象语法树的方法中除第一方法集合之外的方法,第二成员变量集合包括的成员变量为第三抽象语法树的成员变量中除第二成员变量之外的成员变量,第三抽象语法树为第一抽象语法树和第二抽象语法树中的任一抽象语法树。
具体地,生成该数据表代码的方式可以包括两种,具体如下。
第一种方式,将第一抽象语法树包括的方法与第二抽象语法树包括的方法进行比较,从第一抽象语法树包括的方法中,获取与第二抽象语法树包括的方法不同的方法;将第一抽象语法树包括的成员变量与第二抽象语法树包括的成员变量进行比较,从第一抽象语法树包括的成员变量中,获取与第二抽象语法树包括的成员变量不同的成员变量;将获取到的方法和获取到的成员变量添加到第二抽象语法树中,得到新抽象语法树;根据新抽象语法树,生成该数据表的代码。
第二种方式,将第一抽象语法树包括的方法与第二抽象语法树包括的方法进行比较,从第二抽象语法树包括的方法中,获取与第一抽象语法树包括的方法不同的方法;将第一抽象语法树包括的成员变量与第二抽象语法树包括的成员变量进行比较,从第二抽象语法树包括的成员变量中,获取与第一抽象语法树包括的成员变量不同的成员变量;将获取到的方法和获取到的成员变量添加到第一抽象语法树中,得到新抽象语法树;根据新抽象语法树,生成该数据表的代码。
由于通过数据表模板代码生成该数据表的标准代码之后,不允许开发人员对标准代码中的方法和成员变量进行修改或删除,只能在标准代码中增加方法或成员变量,并且方法包括方法名、返回值类型、入参个数和入参类型等参数,成员变量包括成员变量名称和成员变量类型等参数,所以,在上述两种方式中,将第一抽象语法树包括的方法与第二抽象语法树包括的方法进行比较时,需要两个抽象语法树中方法包括的方法名、返回值类型、入参个数和入参类型等参数进行逐个比较;将第一抽象语法树包括的成员变量与第二抽象语法树包括的成员变量进行比较时,需要将两个抽象语法树中成员变量包括的成员变量名称和成员变量类型等参数逐个进行比较,以准确地生成该数据表的代码。
另外,由于抽象语法树中,对方法和成员变量的位置没有具体要求,所以,上述两种方式中生成的新抽象语法树是相同的。
需要说明的是,本发明实施例中涉及到的代码均为数据表的源代码,抽象语法树是源代码的抽象语法结构的树状表现形式,并且抽象语法树的结构不依赖于源代码语言的文法,也即是,通过抽象语法树对代码进行语法分析时,采用上下文无关分析文法,因此,采用抽象语法树生成代码时,提高了生成数据表的代码的可靠性。
在本发明实施例中,如果之前已对该数据表生成过代码,且对该数据表的结构进行修改之后,还可以根据上述方法,再次通过数据表模板代码生成该数据表的代码,也即是,开发人员对历史标准代码进行修改之后,依然可以通过数据表模板代码重复生成该数据表的代码,并且开发人员修改的代码不会被覆盖掉。
在本发明实施例中,当接收到代码生成指令时,根据该代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件,如果已存储该数据表的历史代码文件,则确定之前已为该数据表生成代码,且开发人员对该数据表的结构重新进行了修改。此时,将该数据表的历史代码文件转换成第一抽象语法树,并根据数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树,根据第一抽象语法树与第二抽象语法树,生成该数据表的代码,使生成的代码中包括历史代码文件中开发人员进行修改的代码,无需开发人员再次对生成的代码进行修改,操作比较简单,节省了代码生成时间,进而提高了代码生成效率。
图3是本发明实施例提供的一种代码生成装置结构示意图。参见图3,该装置包括:
判断模块301,用于当接收到代码生成指令时,根据代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件;
转换模块302,用于如果已存储该数据表的历史代码文件,则将该数据表的历史代码文件转换成第一抽象语法树;
第一生成模块303,用于根据数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树;
第二生成模块304,用于根据第一抽象语法树与第二抽象语法树,生成该数据表的代码。
可选地,参见图4,判断模块301包括:
第一获取单元3011,用于根据代码生成指令携带的数据表标识,获取数据表的代码文件存储路径;
确定单元3012,用于如果获取的代码文件存储路径中存储有代码文件,则确定已存储该数据表的历史代码文件,否则,确定没有存储该数据表的历史代码文件。
可选地,参见图5,第一生成模块303包括:
第二获取单元3031,用于根据数据表标识,获取对应的数据表属性信息;
第一生成单元3032,用于根据获取的数据表属性信息和存储的数据表模板代码,生成该数据表的标准代码;
转换单元3033,用于将该数据表的标准代码转换成第二抽象语法树。
可选地,参见图6,第二生成模块304包括:
第三获取单元3041,用于从第一抽象语法树包括的方法中,获取与第二抽象语法树包括的方法不同的方法;
第四获取单元3042,用于从第一抽象语法树包括的成员变量中,获取与第二抽象语法树包括的成员变量不同的成员变量;
第一添加单元3043,用于将获取到的方法和获取到的成员变量添加到第二抽象语法树中,得到新抽象语法树;
第二生成单元3044,用于根据新抽象语法树,生成该数据表的代码。
可选地,参见图7,第二生成模块304包括:
第五获取单元3045,用于从第二抽象语法树包括的方法中,获取与第一抽象语法树包括的方法不同的方法;
第六获取单元3046,用于从第二抽象语法树包括的成员变量中,获取与第一抽象语法树包括的成员变量不同的成员变量;
第二添加单元3047,用于将获取到的方法和获取到的成员变量添加到第一抽象语法树中,得到新抽象语法树;
第三生成单元3048,用于根据新抽象语法树,生成该数据表的代码。
在本发明实施例中,当接收到代码生成指令时,根据该代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件,如果已存储该数据表的历史代码文件,则确定之前已为该数据表生成代码,且开发人员对该数据表的结构重新进行了修改。此时,将该数据表的历史代码文件转换成第一抽象语法树,并根据数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树,根据第一抽象语法树与第二抽象语法树,生成该数据表的代码,使生成的代码中包括历史代码文件中开发人员进行修改的代码,无需开发人员再次对生成的代码进行修改,操作比较简单,节省了代码生成时间,进而提高了代码生成效率。
需要说明的是:上述实施例提供的代码生成装置在代码生成时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的代码生成装置与代码生成方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种代码生成方法,其特征在于,所述方法包括:
当接收到代码生成指令时,根据所述代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件;
如果已存储所述数据表的历史代码文件,则将所述历史代码文件转换成第一抽象语法树;
根据所述数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树;
根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码;
其中,所述根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码,包括:
从所述第一抽象语法树包括的方法中,获取与所述第二抽象语法树包括的方法不同的方法;从所述第一抽象语法树包括的成员变量中,获取与所述第二抽象语法树包括的成员变量不同的成员变量;将获取到的方法和获取到的成员变量添加到所述第二抽象语法树中,得到新抽象语法树;根据所述新抽象语法树,生成所述数据表的代码;
或者,
从所述第二抽象语法树包括的方法中,获取与所述第一抽象语法树包括的方法不同的方法;从所述第二抽象语法树包括的成员变量中,获取与所述第一抽象语法树包括的成员变量不同的成员变量;将获取到的方法和获取到的成员变量添加到所述第一抽象语法树中,得到新抽象语法树;根据所述新抽象语法树,生成所述数据表的代码。
2.如权利要求1所述的方法,其特征在于,所述根据所述代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件,包括:
根据所述代码生成指令携带的数据表标识,获取数据表的代码文件存储路径;
如果所述代码文件存储路径中存储有代码文件,则确定已存储所述数据表的历史代码文件,否则,确定没有存储所述数据表的历史代码文件。
3.如权利要求1所述的方法,其特征在于,所述根据所述数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树,包括:
根据所述数据表标识,获取对应的数据表属性信息;
根据所述数据表属性信息和存储的数据表模板代码,生成所述数据表的标准代码;
将所述数据表的标准代码转换成第二抽象语法树。
4.一种代码生成装置,其特征在于,所述装置包括:
判断模块,用于当接收到代码生成指令时,根据所述代码生成指令携带的数据表标识,判断是否已存储数据表的历史代码文件;
转换模块,用于如果已存储所述数据表的历史代码文件,则将所述历史代码文件转换成第一抽象语法树;
第一生成模块,用于根据所述数据表标识对应的数据表属性信息和存储的数据表模板代码,生成第二抽象语法树;
第二生成模块,用于根据所述第一抽象语法树与所述第二抽象语法树,生成所述数据表的代码;
其中,所述第二生成模块包括:
第三获取单元,用于从所述第一抽象语法树包括的方法中,获取与所述第二抽象语法树包括的方法不同的方法;第四获取单元,用于从所述第一抽象语法树包括的成员变量中,获取与所述第二抽象语法树包括的成员变量不同的成员变量;第一添加单元,用于将获取到的方法和获取到的成员变量添加到所述第二抽象语法树中,得到新抽象语法树;第二生成单元,用于根据所述新抽象语法树,生成所述数据表的代码;
或者,
第五获取单元,用于从所述第二抽象语法树包括的方法中,获取与所述第一抽象语法树包括的方法不同的方法;第六获取单元,用于从所述第二抽象语法树包括的成员变量中,获取与所述第一抽象语法树包括的成员变量不同的成员变量;第二添加单元,用于将获取到的方法和获取到的成员变量添加到所述第一抽象语法树中,得到新抽象语法树;第三生成单元,用于根据所述新抽象语法树,生成所述数据表的代码。
5.如权利要求4所述的装置,其特征在于,所述判断模块包括:
第一获取单元,用于根据所述代码生成指令携带的数据表标识,获取数据表的代码文件存储路径;
确定单元,用于如果所述代码文件存储路径中存储有代码文件,则确定已存储所述数据表的历史代码文件,否则,确定没有存储所述数据表的历史代码文件。
6.如权利要求4所述的装置,其特征在于,所述第一生成模块包括:
第二获取单元,用于根据所述数据表标识,获取对应的数据表属性信息;
第一生成单元,用于根据所述数据表属性信息和存储的数据表模板代码,生成所述数据表的标准代码;
转换单元,用于将所述数据表的标准代码转换成第二抽象语法树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510070808.1A CN104657140B (zh) | 2015-02-10 | 2015-02-10 | 代码生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510070808.1A CN104657140B (zh) | 2015-02-10 | 2015-02-10 | 代码生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104657140A CN104657140A (zh) | 2015-05-27 |
CN104657140B true CN104657140B (zh) | 2018-01-09 |
Family
ID=53248326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510070808.1A Active CN104657140B (zh) | 2015-02-10 | 2015-02-10 | 代码生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104657140B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112698831A (zh) * | 2020-12-25 | 2021-04-23 | 昆明理工大学 | 一种代码自动生成质量评估方法 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107423106B (zh) * | 2017-07-07 | 2021-04-23 | 北京小米移动软件有限公司 | 支持多框架语法的方法和装置 |
CN109783344B (zh) * | 2017-11-14 | 2022-02-18 | 中国航发商用航空发动机有限责任公司 | 选取覆盖所有源代码结构的最小代码子集的方法 |
CN109726375B (zh) * | 2018-05-23 | 2024-02-13 | 中国平安人寿保险股份有限公司 | 代码配置化修改方法、装置、设备及可读存储介质 |
CN109032662B (zh) * | 2018-06-19 | 2021-03-23 | 未鲲(上海)科技服务有限公司 | 代码文件生成方法、装置、计算机设备和存储介质 |
CN109684326A (zh) * | 2018-11-13 | 2019-04-26 | 平安科技(深圳)有限公司 | 数据表创建方法、装置、设备及计算机可读存储介质 |
CN110096513B (zh) * | 2019-04-10 | 2024-05-28 | 创新先进技术有限公司 | 一种数据查询、资金核对方法及装置 |
CN110609693B (zh) * | 2019-08-15 | 2023-05-26 | 深圳赛安特技术服务有限公司 | 基于数据标准化的代码更新方法、装置及终端设备 |
CN110555178B (zh) * | 2019-08-28 | 2020-07-21 | 贝壳找房(北京)科技有限公司 | 数据代理方法及装置 |
CN110633084B (zh) * | 2019-09-12 | 2020-10-02 | 北京大学 | 基于单个样例的代码转换推导方法和装置 |
CN111124414B (zh) * | 2019-12-02 | 2024-02-06 | 东巽科技(北京)有限公司 | 一种基于操作链接的抽象语法树取词方法 |
CN111142871B (zh) * | 2019-12-24 | 2023-06-06 | 杭州安恒信息技术股份有限公司 | 一种前端页面开发系统、方法、设备、介质 |
CN111249736B (zh) * | 2020-01-16 | 2023-03-21 | 网易(杭州)网络有限公司 | 代码处理方法及装置 |
CN111651363B (zh) * | 2020-06-29 | 2024-07-02 | 平安银行股份有限公司 | 测试数据获取方法、装置、电子设备及介质 |
CN112286557B (zh) * | 2020-11-05 | 2024-03-22 | 苏州帝博信息技术有限公司 | 一种非覆盖式更新代码内容的方法和装置 |
CN113110832A (zh) * | 2021-04-08 | 2021-07-13 | 北京联创新天科技有限公司 | 一种智能高效代码生成方法、装置及存储介质 |
CN113535147A (zh) * | 2021-07-20 | 2021-10-22 | 挂号网(杭州)科技有限公司 | 一种调用代码的生成方法、装置、电子终端及存储介质 |
CN114625379B (zh) * | 2022-05-16 | 2022-08-26 | 杭州兑吧网络科技有限公司 | H5项目源码的生成方法及h5项目源码开发系统 |
CN114895876B (zh) * | 2022-05-27 | 2023-05-23 | 无锡雪浪数制科技有限公司 | 一种基于模型驱动可视化开发工业系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6856998B2 (en) * | 2000-04-11 | 2005-02-15 | Omron Corporation | Program for generating method retrieval information and an arithmetic processing apparatus |
CN101523384A (zh) * | 2005-07-29 | 2009-09-02 | 微软公司 | 代码生成模式 |
CN102122247A (zh) * | 2011-03-17 | 2011-07-13 | 深圳市同洲软件有限公司 | 一种自动生成代码的系统及方法 |
CN102279749A (zh) * | 2011-08-30 | 2011-12-14 | 大唐移动通信设备有限公司 | 一种代码归并方法和设备 |
CN102508660A (zh) * | 2011-10-26 | 2012-06-20 | 青岛海信宽带多媒体技术有限公司 | 可执行文件的生成方法及生成装置 |
CN102968306A (zh) * | 2012-11-29 | 2013-03-13 | 广东全通教育股份有限公司 | 一种基于数据模型驱动的代码自动生成方法和系统 |
CN104331285A (zh) * | 2014-10-30 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种代码自动生成方法及系统 |
-
2015
- 2015-02-10 CN CN201510070808.1A patent/CN104657140B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6856998B2 (en) * | 2000-04-11 | 2005-02-15 | Omron Corporation | Program for generating method retrieval information and an arithmetic processing apparatus |
CN101523384A (zh) * | 2005-07-29 | 2009-09-02 | 微软公司 | 代码生成模式 |
CN102122247A (zh) * | 2011-03-17 | 2011-07-13 | 深圳市同洲软件有限公司 | 一种自动生成代码的系统及方法 |
CN102279749A (zh) * | 2011-08-30 | 2011-12-14 | 大唐移动通信设备有限公司 | 一种代码归并方法和设备 |
CN102508660A (zh) * | 2011-10-26 | 2012-06-20 | 青岛海信宽带多媒体技术有限公司 | 可执行文件的生成方法及生成装置 |
CN102968306A (zh) * | 2012-11-29 | 2013-03-13 | 广东全通教育股份有限公司 | 一种基于数据模型驱动的代码自动生成方法和系统 |
CN104331285A (zh) * | 2014-10-30 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种代码自动生成方法及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112698831A (zh) * | 2020-12-25 | 2021-04-23 | 昆明理工大学 | 一种代码自动生成质量评估方法 |
CN112698831B (zh) * | 2020-12-25 | 2022-08-09 | 昆明理工大学 | 一种代码自动生成质量评估方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104657140A (zh) | 2015-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104657140B (zh) | 代码生成方法及装置 | |
CN109086199B (zh) | 一种自动化生成测试脚本的方法、终端和可存储介质 | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
CN110704064B (zh) | 编译和执行智能合约的方法及装置 | |
CN109558525B (zh) | 一种测试数据集的生成方法、装置、设备和存储介质 | |
CN107229559B (zh) | 针对业务系统的测试完整度的检测方法和装置 | |
CN111176996A (zh) | 测试用例生成方法、装置、计算机设备及存储介质 | |
CN109542412A (zh) | 接口信息生成方法、装置、计算机设备和存储介质 | |
CN107506181A (zh) | 业务处理、数据处理方法、装置以及电子设备 | |
CN106294134A (zh) | 代码的崩溃定位方法及装置 | |
CN110221959B (zh) | 应用程序的测试方法、设备以及计算机可读介质 | |
CN113703862B (zh) | 基于配置的接口调用方法、装置、设备及存储介质 | |
CN112905441A (zh) | 测试用例生成方法、测试方法、装置及设备 | |
CN105160018A (zh) | 一种复制/粘贴图片的方法、装置和系统 | |
CN108241676A (zh) | 实现数据同步的方法及设备 | |
CN112685030A (zh) | 一种生成业务代码的方法、装置、存储介质及电子设备 | |
CN113408254A (zh) | 一种页面表单信息填写方法、装置、设备和可读介质 | |
CN110019444B (zh) | 一种操作请求处理方法、装置、设备及系统 | |
CN115599359A (zh) | 一种代码生成方法、装置、设备及介质 | |
CN106502707B (zh) | 代码生成方法及装置 | |
CN110580212B (zh) | 应用程序的数据导出方法、装置、电子设备及存储介质 | |
CN104267935A (zh) | 代码转换方法与装置 | |
CN105867886A (zh) | 一种写表格的方法及装置 | |
CN116432185B (zh) | 一种异常检测方法、装置、可读存储介质及电子设备 | |
CN109509467B (zh) | 代码生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 511446 Guangzhou City, Guangdong Province, Panyu District, South Village, Huambo Business District Wanda Plaza, block B1, floor 28 Applicant after: Guangzhou Huaduo Network Technology Co., Ltd. Address before: 510655, Guangzhou, Whampoa Avenue, No. 2, creative industrial park, building 3-08, Applicant before: Guangzhou Huaduo Network Technology Co., Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |