CN116107550A - 一种操作代码的生成方法及装置 - Google Patents
一种操作代码的生成方法及装置 Download PDFInfo
- Publication number
- CN116107550A CN116107550A CN202211593955.3A CN202211593955A CN116107550A CN 116107550 A CN116107550 A CN 116107550A CN 202211593955 A CN202211593955 A CN 202211593955A CN 116107550 A CN116107550 A CN 116107550A
- Authority
- CN
- China
- Prior art keywords
- syntax tree
- abstract syntax
- references
- configuration file
- user
- 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.)
- Pending
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种操作代码的生成方法及装置,该方法为:从用户输入的配置文件中解析得到表引用和字段引用;基于表引用和字段引用生成第一抽象语法树;通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树;基于第二抽象语法树生成数据库操作代码和数据库数据定义语句。本方案中,解析用户输入的配置文件以得到表引用和字段引用。基于表引用和字段引用生成第一抽象语法树。通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,并基于第二抽象语法树生成数据库操作代码和数据库数据定义语句,不需要人工编写即可自动生成代码,提高代码生成效率。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种操作代码的生成方法及装置。
背景技术
数据库操作代码对于各类信息系统而言是必备的开发代码,数据库操作代码的相关工作通常涉及数据库端和开发端;如果任意一端发生修改则会出现两端不一致的情况,进而造成信息系统错误。
目前仍然是采用人工编写的方式来生成数据库操作代码,但是由于数据库操作上不具有通用性,用户需要耗费时间来熟悉各类数据库操作语句才能编写数据库操作代码,代码生成效率较低。
发明内容
有鉴于此,本发明实施例提供一种操作代码的生成方法及装置,以解决人工编写代码的方式存在的代码生成效率较低等问题。
为实现上述目的,本发明实施例提供如下技术方案:
本发明实施例第一方面公开一种操作代码的生成方法,所述方法包括:
从用户输入的配置文件中解析得到表引用和字段引用;
基于所述表引用和所述字段引用生成第一抽象语法树;
通过解析目标平台的配置信息对所述第一抽象语法树进行标注以得到第二抽象语法树,所述目标平台为所述用户预先指定的数据库平台;
基于所述第二抽象语法树生成数据库操作代码和数据库数据定义语句。
优选的,基于所述第二抽象语法树生成数据库操作代码和数据库数据定义语句,包括:
遍历所述第二抽象语法树中的每个子节点,依次迭代生成中间代码;
利用虚拟机执行所述中间代码,以生成数据库操作代码和数据库数据定义语句。
优选的,从用户输入的配置文件中解析得到表引用和字段引用之前,还包括:
检验所述用户输入的配置文件是否满足预设规则;
若所述配置文件满足所述预设规则,执行用户输入的配置文件中解析得到表引用和字段引用这一步骤;
若所述配置文件不满足所述预设规则,输出第一报错信息。
优选的,基于所述表引用和所述字段引用生成第一抽象语法树之前,还包括:
判断所述表引用和所述字段引用是否满足预设的语法规则;
若所述表引用和所述字段引用满足预设的语法规则,执行基于所述表引用和所述字段引用生成第一抽象语法树这一步骤;
若所述表引用和所述字段引用不满足预设的语法规则,输出第二报错信息。
优选的,还包括:
当检测到所述目标平台不支持所述配置文件中任意属性的数据时,输出第三报错信息以提示所述用户修改所述配置文件。
本发明实施例第二方面公开一种操作代码的生成装置,所述装置包括:
解析单元,用于从用户输入的配置文件中解析得到表引用和字段引用;
第一生成单元,用于基于所述表引用和所述字段引用生成第一抽象语法树;
标注单元,用于通过解析目标平台的配置信息对所述第一抽象语法树进行标注以得到第二抽象语法树,所述目标平台为所述用户预先指定的数据库平台;
第二生成单元,用于基于所述第二抽象语法树生成数据库操作代码和数据库数据定义语句。
优选的,所述第二生成单元具体用于:遍历所述第二抽象语法树中的每个子节点,依次迭代生成中间代码;利用虚拟机执行所述中间代码,以生成数据库操作代码和数据库数据定义语句。
优选的,还包括:
检验单元,用于检验所述用户输入的配置文件是否满足预设规则;若所述配置文件满足所述预设规则,执行所述解析单元;若所述配置文件不满足所述预设规则,输出第一报错信息。
优选的,还包括:
判断单元,用于判断所述表引用和所述字段引用是否满足预设的语法规则;若所述表引用和所述字段引用满足预设的语法规则,执行所述第一生成单元;若所述表引用和所述字段引用不满足预设的语法规则,输出第二报错信息。
优选的,还包括:
处理单元,用于当检测到所述目标平台不支持所述配置文件中任意属性的数据时,输出第三报错信息以提示所述用户修改所述配置文件。
基于上述本发明实施例提供的一种操作代码的生成方法及装置,该方法为:从用户输入的配置文件中解析得到表引用和字段引用;基于表引用和字段引用生成第一抽象语法树;通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树;基于第二抽象语法树生成数据库操作代码和数据库数据定义语句。本方案中,解析用户输入的配置文件以得到表引用和字段引用。基于表引用和字段引用生成第一抽象语法树。通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,并基于第二抽象语法树生成数据库操作代码和数据库数据定义语句,不需要人工编写即可自动生成数据库操作代码和数据库数据定义语句,提高代码生成效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种操作代码的生成方法的流程图;
图2为本发明实施例提供的指定处理系统的分层结构示意图;
图3为本发明实施例提供的配置层的数据处理示意图;
图4为本发明实施例提供的解析层的数据处理示意图;
图5为本发明实施例提供的第一抽象语法树的部分内容示意图;
图6为本发明实施例提供的一种操作代码的生成装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,目前仍然是采用人工编写的方式来生成数据库操作代码,但是由于数据库操作上不具有通用性,用户需要耗费时间来熟悉各类数据库操作语句才能编写数据库操作代码,代码生成效率较低。
因此,本发明实施例提供一种操作代码的生成方法及装置,解析用户输入的配置文件以得到表引用和字段引用。基于表引用和字段引用生成第一抽象语法树。通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,并基于第二抽象语法树生成数据库操作代码和数据库数据定义语句,不需要人工编写即可自动生成数据库操作代码和数据库数据定义语句,以提高代码生成效率。
参见图1,示出了本发明实施例提供的一种操作代码的生成方法的流程图,该生成方法包括:
步骤S101:从用户输入的配置文件中解析得到表引用和字段引用。
一些实施例中,在执行步骤S101之前,获取用户输入的配置文件;该配置文件至少包含由用户输入的配置数据(如数据库类型、目标语言、数据库表信息等字段)。
获取配置文件后,检验该用户输入的配置文件是否满足预设规则(相当于检验用户的输入是否合规);例如:检验配置数据的语法规范性是否满足预设规则、检验不同行列字段的定义是否满足预设规则、以及检验配置文件的类型是否满足预设规则。
若配置文件满足预设规则,执行步骤S101;若配置文件不满足预设规则,输出第一报错信息以提示用户配置文件不合规。
需要说明的是,配置文件支持多种不同格式,如配置文件的格式可以是Excel格式、YAML格式或JSON格式。不同格式的配置文件中的字段定义风格保持一致,用户可根据实际需求选择不同格式来定义相应的配置数据。
在具体实现步骤S101的过程中,若用户输入的配置文件满足预设规则,从用户输入的配置文件中解析得到表引用和字段引用,表引用和字段引用相当于用户的配置项。
一些实施例中,抽象化统一的解析接口;通过该解析接口来解析不同类型的配置文件(也就是上述提及的不同格式的配置文件),其中解析不同类型的配置文件可得到相同数据结构的解析输出结果;或者说,不同类型的配置文件采用相同的解析接口进行解析,以形成统一数据结构的解析输出结果。
步骤S102:基于表引用和字段引用生成第一抽象语法树。
由于不同数据库平台对于字段定义的要求有所不同,故当用户指定目标平台后,需要检验表引用和字段引用的合法性,其中目标平台即为用户预先指定的数据库平台。一些实施例中,在执行步骤S102之前,判断从配置文件中解析得到的表引用和字段引用是否满足预设的语法规则(该语法规则与目标平台相关)。若表引用和字段引用满足预设的语法规则,执行步骤S102。若表引用和字段引用不满足预设的语法规则,输出第二报错信息以提示用户输入的表引用和字段引用不满足语法规则。
例如:设字段A应为数字,而用户输入的字段A为字符串;此时输出第二报错信息以提示用户输入的表引用和字段引用不满足语法规则。
又例如:设Oracle数据库平台有clob数据类型,而Mysql数据库平台没有clob数据类型;当用户指定的目标平台为Mysql数据库平台时,如果用户的配置数据中包含了clob字段,此时输出第二报错信息以提示用户输入的表引用和字段引用不满足语法规则。
在具体实现步骤S102的过程中,若表引用和字段引用满足预设的语法规则,基于该表引用和该字段引用生成第一抽象语法树(Abstract Syntax Tree,AST)。
可以理解的是,可利用解析工具来生成第一抽象语法树;具体而言,可采用递归向下解析法来生成第一抽象语法树。
步骤S103:通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树。
一些实施例中,用户指定目标平台后,检测目标平台是否支持配置文件中各个属性的数据。当检测到目标平台不支持配置文件中任意属性的数据时,输出第三报错信息以提示用户修改配置文件。
例如:设目标平台为Mysql数据库平台,如果用户的配置文件中包含了clob字段,由于Mysql数据库平台不支持clob字段,此时输出第三报错信息以提示用户修改配置文件。
在具体实现步骤S103的过程中,通过解析目标平台的配置信息来对第一抽象语法树进行标注,以补充第一抽象语法树中关于目标平台相关的内容(实际上是修改第一抽象语法树上节点的属性),从而得到第二抽象语法树。
步骤S104:基于第二抽象语法树生成数据库操作代码和数据库数据定义语句。
在具体实现步骤S104的过程中,遍历第二抽象语法树中的每个子节点,依次迭代生成中间代码(Intermediate Representation,IR),需要说明的是,该中间代码可以用于屏蔽不同数据库平台的差异性,从而提高系统处理效率。
生成中间代码后,利用虚拟机执行中间代码,以生成数据库操作代码(也就是语言代码)和数据库数据定义语句。
需要说明的是,数据库操作代码可以是Java/Python的数据库操作代码。数据库数据定义语句(数据库DDL语句)可以是数据库初始化SQL语句,其中,DDL(DataDefinitionLanguage)语句为数据定义语句。数据库操作代码可以被数据库系统执行,数据库数据定义语句可以用于系统接口调用(或者说直接在目标平台对应的目标数据库中运行)。
通过上述步骤S101至步骤S104的内容可见,在生成数据库操作代码和数据库数据定义语句的过程中,可以对整个过程的进度进行跟踪;整个生成数据库操作代码和数据库数据定义语句的过程可以划分为不同阶段,在相应阶段下检验配置文件是否满足预设规则、检验表引用和字段引用是否满足预设的语法规则、以及检验目标平台是否支持配置文件中各个属性的数据。
当任意阶段检验出错时,输出相应的报错信息(第一报错信息、第二报错信息或第三报错信息),以向用户展示详细的错误信息,使用户能够快速定位错误和快速修复错误。当任意阶段检验出错时,还需删除中间文件、重置系统状态、根据用户配置的日志级别打印日志内容。
一些实施例中,可以从其他来源获取AST文件并从该AST文件中获取第二抽象树,利用该第二抽象树生成中间代码,最终利用中间代码生成数据库操作代码和数据库数据定义语句。也可以从其他来源获取IR文件并从该IR文件中读取中间代码,再利用中间代码生成数据库操作代码和数据库数据定义语句。在此实现方式中,从其他来源所获取的AST文件和IR文件需满足预设的文件规范,在应用AST文件或IR文件生成数据库操作代码和数据库数据定义语句之前,需要按照预设的文件规范来检查所应用的AST文件或IR文件,整个过程相当于管道设计模式,整个过程的每一步由一个小工具组成,所有小工具串联形成上述生成数据库操作代码和数据库数据定义语句的步骤。
在本发明实施例中,解析用户输入的配置文件以得到表引用和字段引用。基于表引用和字段引用生成第一抽象语法树。通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,并基于第二抽象语法树生成数据库操作代码和数据库数据定义语句,不需要人工编写即可自动生成数据库操作代码和数据库数据定义语句,提高代码生成效率。
一些实施例中,上述本发明实施例提供的一种操作代码的生成方法可以应用在指定处理系统中;参见图2,示出了本发明实施例提供的指定处理系统的分层结构示意图,该指定处理系统包含配置层100、解析层200、平台层300和代码生成层400。该指定处理系统的上一层依赖下层提供的服务,可以在不影响指定处理系统的情况下升级分层结构,每层在保证相同的输入/输出的前提下可以对应多种实现方式。
配置层100、解析层200、平台层300和代码生成层400之间相互独立,可将各层划分到同一线程,也可以根据实际需求将各层划分到不同线程或不同节点中,从而提高各层的数据处理效率。以下分别对配置层100、解析层200、平台层300和代码生成层400的执行原理进行解释说明。
配置层100,用于检验配置文件是否满足预设规则;若配置文件满足预设规则,从用户输入的配置文件中解析得到表引用和字段引用。配置层100将表引用和字段引用输出到解析层200。
解析层200,用于判断从配置文件中解析得到的表引用和字段引用是否满足预设的语法规则;若表引用和字段引用满足预设的语法规则,基于该表引用和该字段引用生成第一抽象语法树。解析层200将第一抽象语法树输出到平台层300。
平台层300,用于通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,平台层300将第二抽象语法树输出到代码生成层400。此外,平台层300还用于当检测到目标平台不支持配置文件中任意属性的数据时,输出第三报错信息以提示用户修改配置文件。
代码生成层400,用于基于第二抽象语法树生成最终代码,该最终代码包含数据库操作代码和数据库数据定义语句。
需要说明的是,配置层100、解析层200、平台层300和代码生成层400之间的调用关系,决定了数据之间的高耦合特性,这样每层需串行化处理数据。当遇到复杂的配置文件时,各层运行的时间也会相应增长;每层都会检验相应数据的合法性,不会在代码生成层400一次性大量报错。
上述提及的指定处理系统可供用户操作,用户可以在该指定处理系统中完成配置文件中不同配置项的配置,配置完成后运行该指定处理系统来处理该配置文件,从而生成对应目录的配置内容,该目录的配置内容包含:数据库操作代码、数据库数据定义语句、以及目录结构。
指定处理系统处理配置文件的过程中,如果输出报错信息(第一报错信息、第二报错信息和/或第三报错信息),该指定处理系统会在日志文件中详细打印出错的行信息以及错误类型。
用户可以调试该指定处理系统,调试过程中,该指定处理系统也可以打印每一层的调试信息,以供用户查看生成数据库操作代码和数据库数据定义语句的过程。
配置层100所读取的配置文件支持Excel格式、YAML格式或JSON格式等格式,不同格式的配置文件中的字段定义风格保持一致,用户可根据实际需求选择不同格式来定义相应的配置数据;配置层100可以对配置文件中的配置项进行词法性校验。
解析层200在判断从配置文件中解析得到的表引用和字段引用是否满足预设的语法规则的过程中,主要进行以下两类检查。
第一类检查,对表引用和字段引用(相当于用户输入的内容)进行词法性校验;例如:检验用户输入的字符串是否合法,以及检验用户输入的数据类型是否为预设类型。其中,如果未通过词法性校验,输出第二报错信息。
第二类检查:在通过词法性校验的基础上,判断配置文件中用户配置的内容是否满足语法规则。其中,如果不满足语法规则,输出第二报错信息。
当通过上述两类检查后,解析层200基于表引用和字段引用生成第一抽象语法树。
需要说明的是,每个语法规则对应一棵抽象语法树(相当于子抽象语法树),整个指定处理系统相当于一个整体的语法规则,这样由各个语法规则对应的子抽象语法树即可构成第一抽象语法树,进而基于第一抽象语法树生成第二抽象语法树。
需要说明的是,在定义语法规则时,指定处理系统也规定了中间代码的格式,故利用语法规则可生成中间代码。在利用第二抽象语法树生成中间代码时,遍历第二抽象语法树中的每个子节点,依次迭代生成中间代码,最终形成了配置文件的转换。
代码生成层400根据中间代码,结合目标平台对应的数据库类型和编程语言,生成符合用户需求的数据库操作代码和数据库数据定义语句。
值得说明的是,在实际应用中,用户预先设置好配置文件(配置好数据库表信息、字段类型、长度信息等),然后该指定处理系统生成符合用户需求的数据库操作代码和数据库数据定义语句。
以上是关于配置层100、解析层200、平台层300和代码生成层400的相关说明。
通过图3示出的配置层的数据处理示意图可见,配置层100通过针对不同类型的配置文件(图3中的配置文件类型1至配置文件类型3)采用不同的解析策略,最后形成一个统一内部可传递、可识别的词法要素,将词法要素提供给解析层200进行识别和解析语法规则。
可以理解的是,不同类型的配置文件的文件格式不一样,但不同类型的配置文件的基础配置项均相同。针对配置文件的解析,本方案通过统一的解析接口,不同类型的配置文件在此基础上匹配相应的解析方式。
值得说明的是,为避免多个不同类型的配置文件因相互嵌套而导致不便于管理,本方案中可以在一个实例中只配置一种类型的配置文件,但配置文件的内部可引用/包含其他相同类型的配置文件。
因配置文件内部出现嵌套使用,配置层100将文件之间的引用线性化,形成线性依赖关系,逐步解析相应的配置文件以输出最终的词法元素。配置层100输出的词法元素作为语法规则的基础单元提供给解析层200进行解析。由于不同类型数据库的词法定义规则不同,配置层100需要对用户输入的配置文件的配置内容进行基本的校验;当该配置文件的配置内容不通过校验时,配置层100输出第一报错信息以提示用户配置文件不合规。
配置层100的校验主要包含以下三种类型。
第一种类型:配置文件的规范性校验。配置文件的规范性校验主要用于检查配置文件的合法性,如:指定文件类型为JSON但用户提供的是XML配置数据,此时配置层100输出第一报错信息以提示用户更改文件类型。
第二种类型:配置项词法合法性校验。配置项词法合法性校验用于检查文件内容的合法性,每个配置项不能包含特殊符号,当配置层100形成一个词法元素时,先进行配置项词法合法性校验。
第三种类型:特定数据库类型配置项合法性。当确定了目标平台后,配置层100根据该目标平台对应的数据库类型进行基础性的检查。
由于根据目标平台对应的数据库类型进行校验,配置层100应根据不同数据库的命名规范进行不同类型的检查,以避免为下一层提供不规范的数据。在实际处理过程中,校验不应检查到一个错误指定处理系统就立即退出,应在完成后续检查;待完成所有检查后再输出相应的报错信息,方便用户一次性修改所有错误。
为提高便利性,解析层200的报错信息可输出到终端打印,也可以输出至文件中;输出的词法元素也具有类似的处理方式。
如图4提供的解析层的数据处理示意图可见,解析层200根据配置层100提供的词法元素并结合每个配置项的语法规则来实现不同规则的归一化处理,从而形成第一抽象语法树。每个语法规则是一棵抽象语法树(子抽象语法树),整个配置文件形成第一抽象语法树(最终的抽象语法树)。第一抽象语法树用于确定第二抽象语法树,第二抽象语法树通过递归调用各个子抽象语法树来生成中间代码。
需要说明的是,语法规则是一种数据组织规则,该语法规则屏蔽不同数据库的差异;输出的第一抽象语法树为语法规则的结构化,独立于目标平台的中间数据格式。第一抽象语法树类似于编译技术中的语法树,但第一抽象语法树没有循环和分支等结构,仅有一些表示数据库表结构,以便于后续中间代码的生成。第一抽象语法树与配置文件的结构存在关联关系,配置文件的配置项通过语法规则校验后即可生成第一抽象语法树。
解析层200根据配置层100提取得到的词法元素,结合语法规则来构建第一抽象语法树,部分语法规则的内容参见下述表1(表1仅用于举例)。
表1:
解析层通过解析语法规则来形成一棵棵子抽象语法树,子抽象语法树再经过汇总形成第一抽象语法树。当配置文件的配置项无法匹配任意语法规则时,指定处理系统将输出第二报错信息以提示用户配置项的错误信息。
配置文件经过解析层200解析后,所生成的第一抽象语法树的部分内容参见图5,第一抽象语法树的根节点为虚拟节点,其余子节点对应配置文件中的各个配置块;解析层200通过递归下降解析方式或LL(*)解析方式,逐一利用语法规则来解析配置文件的配置项,最终形成第一抽象语法树。
当配置文件新增配置项时,需新增对应的语法规则以及代码生成方式,否则新增的配置项无法生效,解析层200也会因为新增的配置项不符合语法规则而输出报错信息。语法规则不受限于特定的平台,所有数据类型经抽象统一,例如:string列类型在不同的平台会产生不同的定义类型。
综上可见,解析层200根据语法规则并结合配置层100的输入,将配置文件抽象成第一抽象语法树。配置文件可以是XML文件、JSON文件或Excel表格文件等,配置文件经过解析层200解析后生成第一抽象语法树,这样就屏蔽了不同格式、不同配置项之间的差异性,从而形成内部数据结构。
由于第一抽象语法树独立于平台,平台层300根据不同平台的差异来对第一抽象语法树进行信息修正以得到第二抽象语法树,第二抽象语法树(修正后的第一抽象语法树)可以根据目标平台生成数据库操作代码和数据库数据定义语句(数据库DDL语句)。
需要说明的是,修正第一抽象语法树的过程主要是完成通用性到特殊性的配置项映射,映射包含以下两部分:数据库端平台映射和语言端类型映射;数据库端平台映射完成数据库DDL语句的准备工作,语言端类型映射完成数据库操作代码的准备工作。
平台层300修正第一抽象语法树以得到第二抽象语法树之后,代码生成层400遍历第二抽象语法树来产生代码;每个配置项都需同时产生两类代码(数据库操作代码和数据库数据定义语句)。为保证所生成的代码的准确性,每类代码需结合不同语言特性来做标准化的输出。
在生成代码的过程中,代码生成层400需要预设部分规则以保证所生成的代码和配置文件的配置项之间的一致性,主要是保证数据库表名的一致性、类名及成员定义的一致性。表名可以采用“xx_xx”的格式来命名,类名采用驼峰式命名规则,最终符合程序设计中的命名规范,方便用户查阅时快速理解映射关系。
在生成代码的过程中,如果语言端使用了一些“包”,则代码在生成过程中需导入该“包”对应的路径,并在一些类成员、方法中增加注释;注释内容来自配置项以及指定处理系统生成的默认信息。此外,代码生成层400还提供完整的单元测试用例,用户配置完数据库信息后直接执行单元测试用例,可以提高用户调用效率和代码熟悉程度。
与上述本发明实施例提供的一种操作代码的生成方法相对应,参见图6,本发明实施例还提供了一种操作代码的生成装置的结构框图,该生成装置包括:解析单元601、第一生成单元602、标注单元603和第二生成单元604;
解析单元601,用于从用户输入的配置文件中解析得到表引用和字段引用。
第一生成单元602,用于基于表引用和字段引用生成第一抽象语法树。
标注单元603,用于通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,目标平台为用户预先指定的数据库平台。
第二生成单元604,用于基于第二抽象语法树生成数据库操作代码和数据库数据定义语句。
在具体实现中,第二生成单元604具体用于:遍历第二抽象语法树中的每个子节点,依次迭代生成中间代码;利用虚拟机执行中间代码,以生成数据库操作代码和数据库数据定义语句。
在本发明实施例中,解析用户输入的配置文件以得到表引用和字段引用。基于表引用和字段引用生成第一抽象语法树。通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,并基于第二抽象语法树生成数据库操作代码和数据库数据定义语句,不需要人工编写即可自动生成数据库操作代码和数据库数据定义语句,提高代码生成效率。
优选的,结合图6示出的内容,该生成装置还包括:
检验单元,用于检验用户输入的配置文件是否满足预设规则;若配置文件满足预设规则,执行解析单元601;若配置文件不满足所述预设规则,输出第一报错信息。
优选的,结合图6示出的内容,该生成装置还包括:
判断单元,用于判断表引用和字段引用是否满足预设的语法规则;若表引用和字段引用满足预设的语法规则,执行第一生成单元602;若表引用和字段引用不满足预设的语法规则,输出第二报错信息。
优选的,结合图6示出的内容,该生成装置还包括:
处理单元,用于当检测到目标平台不支持配置文件中任意属性的数据时,输出第三报错信息以提示用户修改配置文件。
综上所述,本发明实施例提供一种操作代码的生成方法及装置,解析用户输入的配置文件以得到表引用和字段引用。基于表引用和字段引用生成第一抽象语法树。通过解析目标平台的配置信息对第一抽象语法树进行标注以得到第二抽象语法树,并基于第二抽象语法树生成数据库操作代码和数据库数据定义语句,不需要人工编写即可自动生成数据库操作代码和数据库数据定义语句,提高代码生成效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种操作代码的生成方法,其特征在于,所述方法包括:
从用户输入的配置文件中解析得到表引用和字段引用;
基于所述表引用和所述字段引用生成第一抽象语法树;
通过解析目标平台的配置信息对所述第一抽象语法树进行标注以得到第二抽象语法树,所述目标平台为所述用户预先指定的数据库平台;
基于所述第二抽象语法树生成数据库操作代码和数据库数据定义语句。
2.根据权利要求1所述的方法,其特征在于,基于所述第二抽象语法树生成数据库操作代码和数据库数据定义语句,包括:
遍历所述第二抽象语法树中的每个子节点,依次迭代生成中间代码;
利用虚拟机执行所述中间代码,以生成数据库操作代码和数据库数据定义语句。
3.根据权利要求1所述的方法,其特征在于,从用户输入的配置文件中解析得到表引用和字段引用之前,还包括:
检验所述用户输入的配置文件是否满足预设规则;
若所述配置文件满足所述预设规则,执行用户输入的配置文件中解析得到表引用和字段引用这一步骤;
若所述配置文件不满足所述预设规则,输出第一报错信息。
4.根据权利要求1所述的方法,其特征在于,基于所述表引用和所述字段引用生成第一抽象语法树之前,还包括:
判断所述表引用和所述字段引用是否满足预设的语法规则;
若所述表引用和所述字段引用满足预设的语法规则,执行基于所述表引用和所述字段引用生成第一抽象语法树这一步骤;
若所述表引用和所述字段引用不满足预设的语法规则,输出第二报错信息。
5.根据权利要求1所述的方法,其特征在于,还包括:
当检测到所述目标平台不支持所述配置文件中任意属性的数据时,输出第三报错信息以提示所述用户修改所述配置文件。
6.一种操作代码的生成装置,其特征在于,所述装置包括:
解析单元,用于从用户输入的配置文件中解析得到表引用和字段引用;
第一生成单元,用于基于所述表引用和所述字段引用生成第一抽象语法树;
标注单元,用于通过解析目标平台的配置信息对所述第一抽象语法树进行标注以得到第二抽象语法树,所述目标平台为所述用户预先指定的数据库平台;
第二生成单元,用于基于所述第二抽象语法树生成数据库操作代码和数据库数据定义语句。
7.根据权利要求6所述的装置,其特征在于,所述第二生成单元具体用于:遍历所述第二抽象语法树中的每个子节点,依次迭代生成中间代码;利用虚拟机执行所述中间代码,以生成数据库操作代码和数据库数据定义语句。
8.根据权利要求6所述的装置,其特征在于,还包括:
检验单元,用于检验所述用户输入的配置文件是否满足预设规则;若所述配置文件满足所述预设规则,执行所述解析单元;若所述配置文件不满足所述预设规则,输出第一报错信息。
9.根据权利要求6所述的装置,其特征在于,还包括:
判断单元,用于判断所述表引用和所述字段引用是否满足预设的语法规则;若所述表引用和所述字段引用满足预设的语法规则,执行所述第一生成单元;若所述表引用和所述字段引用不满足预设的语法规则,输出第二报错信息。
10.根据权利要求6所述的装置,其特征在于,还包括:
处理单元,用于当检测到所述目标平台不支持所述配置文件中任意属性的数据时,输出第三报错信息以提示所述用户修改所述配置文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211593955.3A CN116107550A (zh) | 2022-12-13 | 2022-12-13 | 一种操作代码的生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211593955.3A CN116107550A (zh) | 2022-12-13 | 2022-12-13 | 一种操作代码的生成方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116107550A true CN116107550A (zh) | 2023-05-12 |
Family
ID=86255244
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211593955.3A Pending CN116107550A (zh) | 2022-12-13 | 2022-12-13 | 一种操作代码的生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107550A (zh) |
-
2022
- 2022-12-13 CN CN202211593955.3A patent/CN116107550A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2010319344B2 (en) | Managing record format information | |
Lawley et al. | Practical declarative model transformation with Tefkat | |
US9489418B2 (en) | Processing database queries embedded in application source code from within integrated development environment tool | |
US20050060317A1 (en) | Method and system for the specification of interface definitions and business rules and automatic generation of message validation and transformation software | |
US8286132B2 (en) | Comparing and merging structured documents syntactically and semantically | |
US7958493B2 (en) | Type inference system and method | |
US7620959B2 (en) | Reflection-based processing of input parameters for commands | |
US10614126B2 (en) | Textual query editor for graph databases that performs semantic analysis using extracted information | |
US20040010754A1 (en) | System and method for transformation of XML documents using stylesheets | |
US20030097637A1 (en) | Schema generation apparatus, data processor, and program for processing in the same data processor | |
Strein et al. | An extensible meta-model for program analysis | |
Alves et al. | A case study in grammar engineering | |
CN116107550A (zh) | 一种操作代码的生成方法及装置 | |
Anderson et al. | Supporting analysis of SQL queries in PHP AiR | |
CN108509187B (zh) | 一种自动生成软件平台mib功能代码的方法及系统 | |
CN115357492A (zh) | 一种用于Java软件的形式化验证方法及装置 | |
Lano et al. | Case study: FIXML to Java, C# and C++. | |
Geneves et al. | XML reasoning made practical | |
CN112486990A (zh) | 一种根据模型描述同步数据库表结构的方法及设备 | |
CN117390055B (zh) | Jooq连表语句生成方法、设备以及介质 | |
Bartgis | Towards an Assignment Description Language for Assignment Test Generation | |
Zohri Yafi | A Syntactical Reverse Engineering Approach to Fourth Generation Programming Languages Using Formal Methods | |
Rinderle-Ma et al. | Transformation and Integration of Exchange Formats | |
KR100930108B1 (ko) | XQuery 질의를 위한 스키마 기반 정적 검사 시스템및 방법 | |
Daly et al. | PADS: An end-to-end system for processing ad hoc data |
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 |