CN110609693B - 基于数据标准化的代码更新方法、装置及终端设备 - Google Patents
基于数据标准化的代码更新方法、装置及终端设备 Download PDFInfo
- Publication number
- CN110609693B CN110609693B CN201910752136.0A CN201910752136A CN110609693B CN 110609693 B CN110609693 B CN 110609693B CN 201910752136 A CN201910752136 A CN 201910752136A CN 110609693 B CN110609693 B CN 110609693B
- Authority
- CN
- China
- Prior art keywords
- syntax tree
- abstract syntax
- code
- rule
- node
- 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
Images
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- 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)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明适用于数据处理技术领域,提供了基于数据标准化的代码更新方法、装置、终端设备以及计算机可读存储介质,包括:扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树;对所述第一抽象语法树中的编码信息进行共性分析,得到共性编码规则;获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;将包含更新后的编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。本发明基于抽象语法树实现了代码风格的统一,提升了代码更新的效率和准确性。
Description
技术领域
本发明属于数据处理技术领域,尤其涉及基于数据标准化的代码更新方法、装置、终端设备以及计算机可读存储介质。
背景技术
在应用程序的开发阶段,通常需要多人进行同时开发,由于每个人的编程习惯和编程风格可能不相同,在版本迭代、代码评审或者人员交接时,会对代码进行维护,以保证代码的可读性和可用性。
在现有技术中,通常是在每个开发人员进行编码后,由项目主管或开发人员自身按照预设的编码风格对编出的代码进行更新,保证所有代码的风格统一。但是,人为更新的效率低,且在人为更新代码的过程中很容易出现疏漏,导致代码更新的准确性低。
发明内容
有鉴于此,本发明实施例提供了基于数据标准化的代码更新方法、装置、终端设备以及计算机可读存储介质,以解决现有技术中代码更新的效率和准确性低的问题。
本发明实施例的第一方面提供了一种基于数据标准化的代码更新方法,包括:
扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;
获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。
本发明实施例的第二方面提供了一种基于数据标准化的代码更新装置,包括:
扫描单元,用于扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
共性分析单元,用于对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;
判断单元,用于获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
更新单元,用于若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
转化单元,用于将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。
本发明实施例的第三方面提供了一种终端设备,所述终端设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如下步骤:
扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;
获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。
本发明实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如下步骤:
扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;
获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。
本发明实施例与现有技术相比存在的有益效果是:
本发明实施例对标准的第一抽象语法树进行共性分析得到共性编码规则,并对当前代码对应的第二抽象语法树中不符合共性编码规则的编码信息进行更新,最终将包含更新后的编码信息的第二抽象语法树转化为更新代码,本发明实施例基于抽象语法树实现了当前代码与标准代码在编码风格上的统一,同时减少了人工操作,提升了代码更新的效率和准确性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的基于数据标准化的代码更新方法的实现流程图;
图2是本发明实施例提供的对第一抽象语法树中的编码信息进行共性分析,得到共性编码规则的实现流程图;
图3是本发明实施例提供的对第一抽象语法树中的编码信息进行共性分析,得到共性编码规则的另一种实现流程图;
图4是本发明实施例提供的扫描预设的标准代码,并基于标准代码生成第一抽象语法树的实现流程图;
图5是本发明实施例提供的基于数据标准化的代码更新装置的结构框图;
图6是本发明实施例提供的终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
图1示出了本发明实施例提供的基于数据标准化的代码更新方法的实现流程,详述如下:
在S101中,扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息。
在软件开发过程中,通常需要对代码进行更新,以保证代码符合预设的编码风格,相较于传统方式中依靠人工来进行代码调整,在本发明实施例中,基于抽象语法树(Abstract Syntax Tree,AST)进行代码更新,抽象语法树为代码的抽象语法结构的树状表现形式。具体地,首先扫描预设的标准代码,并基于标准代码生成第一抽象语法树,该标准代码是符合预设的编码风格的代码,用户可根据实际应用场景中的代码更新需求进行标准代码的选定。在生成第一抽象语法树时,可下载用于生成抽象语法树的自动化脚本,并将自动化脚本的执行对象设置为标准代码,执行自动化脚本,从而生成第一抽象语法树,当然也可通过其他方式实现第一抽象语法树的生成,对此不做限定。对于得到的第一抽象语法树,其包含标准代码中的所有编码信息,本发明实施例中的编码信息指的是函数名、类、变量名或包含在标准代码中的其他信息。
在S102中,对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则。
由于第一抽象语法树中携带有标准代码中的所有编码信息,故为了对标准代码对应的编码风格进行量化,便于进行自动更新,在本步骤中,对第一抽象语法树中的编码信息进行共性分析,得到共性编码规则。值得一提的是,在进行共性分析之前,首先确定共性分析对象,并根据共性分析对象确定出待进行共性分析的编码信息,其中,共性分析对象可为一类编码信息,比如说所有的变量名或所有的函数名,则得到的共性编码规则为该类编码信息的共有规则,共性分析对象也可为特定的编码信息,比如说预先指定的某个变量名或预先指定的某个函数名等,如仅对第一抽象语法树中的为add的函数名进行共性分析。
在S103中,获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则。
在得到共性编码规则后,便可获取待更新的当前代码,并基于当前代码生成第二抽象语法树,为了保证第一抽象语法树和第二抽象语法树之间不存在因生成途径不同产生的差异,本发明实施例限定第一抽象语法树与第二抽象语法树的生成方式一致,如在通过自动化脚本生成第一抽象语法树的基础上,限定同样通过该自动化脚本生成第二抽象语法树。对于生成的第二抽象语法树,根据步骤S102中的共性分析对象查找到对应的编码信息,并判断查找到的编码信息是否符合共性编码规则。
在S104中,若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息。
对于第二抽象语法树中符合共性编码规则的编码信息,则不对该编码信息进行操作;对于第二抽象语法树中不符合共性编码规则的编码信息,为了使该编码信息对应的代码符合预设的代码风格,按照共性编码规则更新编码信息。除了更新编码信息之外,还可将编码信息的更新记录保存在日志中,并输出日志,保证用户获知编码信息的更新过程,并在判断出更新错误时进行手动改正,其中,日志可以邮件、短信或即时通信消息的方式进行输出,本发明实施例对此不做限定。
在S105中,将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。
在对第二抽象语法树中所有不符合共性编码规则的编码信息更新完成后,将第二抽象语法树重新转化为代码字符串,即是将第二抽象语法树重新转化为代码,并输出转化出的代码,为了便于区分,将转化出的代码命名为更新代码,则该更新代码与标准代码均符合预设的编码风格。
通过图1所示实施例可知,在本发明实施例中,扫描预设的标准代码,基于标准代码生成第一抽象语法树,并对第一抽象语法树中的编码信息进行共性分析得到共性编码规则,然后获取当前代码,基于当前代码生成第二抽象语法树,并判断第二抽象语法树中的编码信息是否符合共性编码规则,若第二抽象语法树中的编码信息不符合共性编码规则,则按照共性编码规则更新编码信息,最后将包含更新后的编码信息的第二抽象语法树转化为更新代码,并输出更新代码,本发明实施例通过将代码转换为抽象语法树,并在抽象语法树中进行共性分析及代码更新,实现了自动更新,提升了代码更新的效率和准确性。
图2所示,是本发明实施例提供的对第一抽象语法树中的编码信息进行共性分析,得到共性编码规则的实现流程图,如图2所示,可以包括以下步骤:
在S201中,遍历所述第一抽象语法树中的所有节点,识别出包含变量名的节点。
第一抽象语法树为标准代码的抽象语法结构的树状表现形式,即第一抽象语法树中包含有多个节点,每个节点存储标准代码的一个编码信息,故在共性分析对象为变量名的情况下,遍历第一抽象语法树中的所有节点,在遍历过程中识别出包含变量名的节点,具体识别出包括变量声明(VariableDeclaration)并且在变量声明内包括标识符(Identifier)的节点,其中,变量声明在抽象语法树中用于声明该节点的内容为变量,标识符用于具体指示该节点包含的是变量名。值得一提的是,对第一抽象语法树进行的遍历操作优选为深度遍历。
在S202中,将所述包含变量名的节点中的变量名与预设的至少两个模拟规则进行匹配。
在确定出包含变量名的节点后,将节点中的变量名与预设的至少两个模拟规则进行匹配,模拟规则为变量名命名规则,为了便于说明,假设模拟规则Rule1为变量名中的字母均为小写,模拟规则Rule2为变量名中的字母均为大写,模拟规则Rule3为变量名中每个单词的首字母为大写,其余字母为小写,即Rule3为驼峰命名法。
在S203中,若存在与所述变量名匹配成功的所述模拟规则,则将所述模拟规则确定为所述共性编码规则。
在确定出的包含变量名的节点仅为一个的情况下,若存在与该变量名匹配成功的模拟规则,则将该模拟规则确定为共性编码规则;在确定出的包含变量名的节点的数量为至少两个的情况下,若存在与所有变量名匹配成功的模拟规则,则将该模拟规则确定为共性编码规则。举例来说,若第一抽象语法树中的所有变量名都应用驼峰命名法,则将模拟规则Rule3确定为共性编码规则。
可选地,遍历第二抽象语法树中的所有节点,识别出包含变量名的节点;若第二抽象语法树中存在与共性编码规则不符合的变量名所对应的节点,则将该节点确定为差异节点,按照共性编码规则重写差异节点内的变量名。在共性分析对象为变量名,且已确定出共性编码规则的情况下,对第二抽象语法树进行遍历操作,并识别出第二抽象语法树中包含变量名的节点,若其中存在与共性编码规则不符合的变量名所对应的节点,则将该节点确定为差异节点,按照共性编码规则重写该差异节点内的变量名,完成对变量名(编码信息)的更新。举例来说,第二抽象语法树中识别出的某个变量名为“sERVER lOG”,不符合“变量名中每个单词的首字母为大写,其余字母为小写”的共性编码规则,则根据共性编码规则对其进行更新后得到的结果为“Server Log”。通过上述方法对第二抽象语法树的变量名进行单独更新,提升了代码更新的针对性。
通过图2所示实施例可知,在本发明实施例中,遍历第一抽象语法树中的所有节点,识别出包含变量名的节点,将节点中的变量名与预设的至少两个模拟规则进行匹配,若存在与变量名匹配成功的模拟规则,则将模拟规则确定为共性编码规则,本发明实施例在共性分析对象为变量名的情况下,实现了针对性的代码更新,进一步提升了代码更新的效率。
图3所示,是本发明实施例提供的对第一抽象语法树中的编码信息进行共性分析,得到共性编码规则的实现流程图,如图3所示,可以包括以下步骤:
在S301中,遍历所述第一抽象语法树中的所有节点,并将包含函数名的节点确定为函数节点。
共性分析对象除了为变量名外,还可能为函数,针对该种情况,对第一抽象语法树中的所有节点执行遍历操作,并识别出包含函数名的节点作为函数节点,具体在第一抽象语法树中的所有节点中查找出包含函数调用表达式(CallExpression),将查找出的节点确定为函数节点,并获取该函数节点内包括的函数名,同样地,遍历操作优选为深度遍历。
在S302中,确定与所述函数节点相关的参数节点,将所述函数节点内的函数名与所述参数节点内的参数的数据类型建立映射规则,并将所述映射规则确定为所述共性编码规则,其中,所述函数节点与所述参数节点的父节点一致。
根据抽象语法树的特性,原为函数的代码在转换为抽象语法树后,会以一个节点的形式来代表该函数,并且,该节点还包括两类子节点,一类子节点包括该函数的函数名,另一类子节点包括该函数所调用的参数。故在本发明实施例中,在识别出函数节点后,进一步确定与该函数节点相关的参数节点,该参数节点与该函数节点的父节点一致,由于参数节点内包含的是函数所调用的参数,故将函数节点内的函数名与参数节点内的参数的数据类型建立映射规则,并将建立的映射规则确定为共性编码规则,其中,数据类型是指参数被定义时的存储类型,比如参数a在定义时是通过“inta”定义的,则参数a的数据类型为整型,比如参数b在定义时是通过“floatb”定义的,则参数b的数据类型为浮点型。与共性分析对象为变量名时的情况不同,在本步骤中生成的共性编码规则的数量与函数名的种类相同,即不同种类的函数名对应的共性编码规则也不同。
在已确定共性编码规则的基础上,若后续生成第二抽象语法树,则识别出第二抽象语法树中包含函数名的节点,获取该节点相关的参数节点中的参数的数据类型,并判断该数据类型是否与该函数名对应的共性编码规则中的数据类型相同,若相同,则判定该函数名符合共性编码规则;若不相同,则判定该函数名不符合共性编码规则。
通过图3所示实施例可知,在本发明实施例中,遍历第一抽象语法树中的所有节点,并将包含函数名的节点确定为函数节点,确定与函数节点相关的参数节点,将函数节点内的函数名与参数节点内的参数的数据类型建立映射规则,并将映射规则确定为共性编码规则,其中,函数节点与参数节点的父节点一致,本发明实施例在共性分析对象为函数的情况下,实现了针对性的代码更新,在另一层面上提升了代码更新的效率。
图4所示,是本发明实施例提供的扫描预设的标准代码,并基于标准代码生成第一抽象语法树的实现流程图,如图4所示,可以包括以下步骤:
在S401中,搭建集成开发工具。
除了手动将标准代码转换为第一抽象语法树,在本发明实施例中,还可搭建集成开发工具,使代码在集成开发工具上运行并编译。可选地,本发明实施例中的集成开发工具为Xcode。
在S402中,将所述底层虚拟机编译器的前端设置为Clang编译器,并将所述底层虚拟机编译器导入所述集成开发工具,其中,所述Clang编译器包括转换插件,所述转换插件用于生成基于代码的抽象语法树。
代码编译器主要包含三个部分,即前端、优化器以及后端,前端负责解析代码,检查语法错误,并将其翻译为抽象语法树;优化器对这一中间代码进行优化,使代码更高效;后端则负责将优化器优化后的中间代码转换为目标机器的代码。故为了实现对标准代码中的编码信息的分析及转换,将Clang编译器设置为底层虚拟机(Low Level VirtualMachine,LLVM)编译器的前端,并将LLVM编译器导入至集成开发工具(相当于将集成开发工具的默认编译器修改为LLVM编译器),其中,Clang编译器含有转换插件,该转换插件用于生成基于代码的抽象语法树,转换插件可为开源插件,在此不做赘述。
在S403中,将所述转换插件的路径保存在所述集成开发工具的配置参数中,并在所述集成开发工具中加载包括所述标准代码的代码文件。
仅将集成开发工具的编译器修改为LLVM编译器后,集成开发工具仍无法获知转换插件的调用途径,故在本步骤中将转换插件的路径保存在集成开发工具的配置参数中,并在集成开发工具中加载包括标准代码的代码文件,在代码文件中的标准代码被编译时,包含转换插件的Clang编译器同时对标准代码进行扫描,生成代码Token片,然后Clang编译器根据代码Token片生成第一抽象语法树,该第一抽象语法树上携带了标准代码中所有的编码信息。同样地,后续生成第二抽象语法树时,在集成开发工具中加载包括当前代码的代码文件即可。
通过图4所示实施例可知,在本发明实施例中,搭建集成开发工具,将底层虚拟机编译器的前端设置为Clang编译器,并将底层虚拟机编译器导入集成开发工具,将Clang编译器中的转换插件的路径保存在集成开发工具的配置参数中,并在集成开发工具中加载包括标准代码的代码文件,本发明实施例通过配置集成开发工具及对应的编译器,提升了在代码与抽象语法树之间进行转换的自动化程度,加快了代码更新的操作进程。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
对应于上文实施例所述的基于数据标准化的代码更新方法,图5示出了本发明实施例提供的基于数据标准化的代码更新装置的结构框图,参照图5,该代码更新装置包括:
扫描单元51,用于扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
共性分析单元52,用于对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;
判断单元53,用于获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
更新单元54,用于若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
转化单元55,用于将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。
可选地,共性分析单元52具体用于:
遍历所述第一抽象语法树中的所有节点,识别出包含变量名的节点;
将所述包含变量名的节点中的变量名与预设的至少两个模拟规则进行匹配;
若存在与所述变量名匹配成功的所述模拟规则,则将所述模拟规则确定为所述共性编码规则。
可选地,更新单元54具体用于:
遍历所述第二抽象语法树中的所有节点,识别出包含变量名的节点;
若所述第二抽象语法树中存在与所述共性编码规则不符合的变量名所对应的节点,则将所述节点确定为差异节点,按照所述共性编码规则重写所述差异节点内的变量名。
可选地,共性分析单元52具体用于:
遍历所述第一抽象语法树中的所有节点,并将包含函数名的节点确定为函数节点;
确定与所述函数节点相关的参数节点,将所述函数节点内的函数名与所述参数节点内的参数的数据类型建立映射规则,并将所述映射规则确定为所述共性编码规则,其中,所述函数节点与所述参数节点的父节点一致。
可选地,扫描单元51具体用于:
搭建集成开发工具;
将底层虚拟机编译器的前端设置为Clang编译器,并将所述底层虚拟机编译器导入所述集成开发工具,其中,所述Clang编译器包括转换插件,所述转换插件用于生成基于代码的抽象语法树;
将所述转换插件的路径保存在所述集成开发工具的配置参数中,并在所述集成开发工具中加载包括所述标准代码的代码文件。
因此,本发明实施例提供的基于数据标准化的代码更新装置基于抽象语法树实现了当前代码与标准代码的编码风格统一,提升了代码更新的效率和准确性。
图6是本发明实施例提供的终端设备的示意图。如图6所示,该实施例的终端设备6包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机程序62,例如基于数据标准化的代码更新程序。所述处理器60执行所述计算机程序62时实现上述各个基于数据标准化的代码更新方法实施例中的步骤,例如图1所示的步骤S101至S105。或者,所述处理器60执行所述计算机程序62时实现上述各基于数据标准化的代码更新装置实施例中各单元的功能,例如图5所示单元51至55的功能。
示例性的,所述计算机程序62可以被分割成一个或多个单元,所述一个或者多个单元被存储在所述存储器61中,并由所述处理器60执行,以完成本发明。所述一个或多个单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序62在所述终端设备6中的执行过程。例如,所述计算机程序62可以被分割成扫描单元、共性分析单元、判断单元、更新单元以及转化单元,各单元具体功能如下:
扫描单元,用于扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
共性分析单元,用于对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;
判断单元,用于获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
更新单元,用于若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
转化单元,用于将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码。
所述终端设备6可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图6仅仅是终端设备6的示例,并不构成对终端设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器60可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器61可以是所述终端设备6的内部存储单元,例如终端设备6的硬盘或内存。所述存储器61也可以是所述终端设备6的外部存储设备,例如所述终端设备6上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器61还可以既包括所述终端设备6的内部存储单元也包括外部存储设备。所述存储器61用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将所述终端设备的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的终端设备和方法,可以通过其它的方式实现。例如,以上所描述的终端设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于数据标准化的代码更新方法,其特征在于,包括:
扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;其中,在进行共性分析之前,还包括:确定共性分析对象,并根据所述共性分析对象确定出待进行共性分析的编码信息;
获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码;
其中,所述对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则,包括:
遍历所述第一抽象语法树中的所有节点,识别出包含变量名的节点并将包含函数名的节点确定为函数节点;
将所述包含变量名的节点中的变量名与预设的至少两个模拟规则进行匹配;若存在与所述变量名匹配成功的所述模拟规则,则将所述模拟规则确定为所述共性编码规则;
确定与所述函数节点相关的参数节点,将所述函数节点内的函数名与所述参数节点内的参数的数据类型建立映射规则,并将所述映射规则确定为所述共性编码规则,其中,所述函数节点与所述参数节点的父节点一致。
2.如权利要求1所述的代码更新方法,其特征在于,所述若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息,包括:
遍历所述第二抽象语法树中的所有节点,识别出包含变量名的节点;
若所述第二抽象语法树中存在与所述共性编码规则不符合的变量名所对应的节点,则将所述节点确定为差异节点,按照所述共性编码规则重写所述差异节点内的变量名。
3.如权利要求1所述的代码更新方法,其特征在于,所述扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,包括:
搭建集成开发工具;
将底层虚拟机编译器的前端设置为Clang编译器,并将所述底层虚拟机编译器导入所述集成开发工具,其中,所述Clang编译器包括转换插件,所述转换插件用于生成基于代码的抽象语法树;
将所述转换插件的路径保存在所述集成开发工具的配置参数中,并在所述集成开发工具中加载包括所述标准代码的代码文件。
4.一种基于数据标准化的代码更新装置,其特征在于,包括:
扫描单元,用于扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
共性分析单元,用于对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则,及在进行共性分析之前,确定共性分析对象,并根据所述共性分析对象确定出待进行共性分析的编码信息;
判断单元,用于获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
更新单元,用于若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
转化单元,用于将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码;
其中,所述共性分析单元,具体用于:
遍历所述第一抽象语法树中的所有节点,识别出包含变量名的节点并将包含函数名的节点确定为函数节点;
将所述包含变量名的节点中的变量名与预设的至少两个模拟规则进行匹配;若存在与所述变量名匹配成功的所述模拟规则,则将所述模拟规则确定为所述共性编码规则;
确定与所述函数节点相关的参数节点,将所述函数节点内的函数名与所述参数节点内的参数的数据类型建立映射规则,并将所述映射规则确定为所述共性编码规则,其中,所述函数节点与所述参数节点的父节点一致。
5.一种终端设备,其特征在于,所述终端设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如下步骤:
扫描预设的标准代码,并基于所述标准代码生成第一抽象语法树,所述第一抽象语法树包括所述标准代码中的所有编码信息;
对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则;其中,在进行共性分析之前,还包括:确定共性分析对象,并根据所述共性分析对象确定出待进行共性分析的编码信息;
获取当前代码,基于所述当前代码生成第二抽象语法树,并判断所述第二抽象语法树中的所述编码信息是否符合所述共性编码规则;
若所述第二抽象语法树中的所述编码信息不符合所述共性编码规则,则按照所述共性编码规则更新所述编码信息;
将包含更新后的所述编码信息的所述第二抽象语法树转化为更新代码,并输出所述更新代码;
其中,所述对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则,包括:
遍历所述第一抽象语法树中的所有节点,识别出包含变量名的节点并将包含函数名的节点确定为函数节点;
将所述包含变量名的节点中的变量名与预设的至少两个模拟规则进行匹配;若存在与所述变量名匹配成功的所述模拟规则,则将所述模拟规则确定为所述共性编码规则;
确定与所述函数节点相关的参数节点,将所述函数节点内的函数名与所述参数节点内的参数的数据类型建立映射规则,并将所述映射规则确定为所述共性编码规则,其中,所述函数节点与所述参数节点的父节点一致。
6.如权利要求5所述的终端设备,其特征在于,所述对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则,包括:
遍历所述第一抽象语法树中的所有节点,识别出包含变量名的节点;
将所述包含变量名的节点中的变量名与预设的至少两个模拟规则进行匹配;
若存在与所述变量名匹配成功的所述模拟规则,则将所述模拟规则确定为所述共性编码规则。
7.如权利要求5所述的终端设备,其特征在于,所述对所述第一抽象语法树中的所述编码信息进行共性分析,得到共性编码规则,包括:
遍历所述第一抽象语法树中的所有节点,并将包含函数名的节点确定为函数节点;
确定与所述函数节点相关的参数节点,将所述函数节点内的函数名与所述参数节点内的参数的数据类型建立映射规则,并将所述映射规则确定为所述共性编码规则,其中,所述函数节点与所述参数节点的父节点一致。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述代码更新方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910752136.0A CN110609693B (zh) | 2019-08-15 | 2019-08-15 | 基于数据标准化的代码更新方法、装置及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910752136.0A CN110609693B (zh) | 2019-08-15 | 2019-08-15 | 基于数据标准化的代码更新方法、装置及终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110609693A CN110609693A (zh) | 2019-12-24 |
CN110609693B true CN110609693B (zh) | 2023-05-26 |
Family
ID=68889821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910752136.0A Active CN110609693B (zh) | 2019-08-15 | 2019-08-15 | 基于数据标准化的代码更新方法、装置及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110609693B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111158665B (zh) * | 2019-12-27 | 2023-07-18 | 网易(杭州)网络有限公司 | 代码生成方法及装置、电子设备和存储介质 |
CN111258562B (zh) * | 2020-01-13 | 2024-09-13 | 中国平安财产保险股份有限公司 | Java代码质量检查方法、装置、设备和存储介质 |
CN111367527B (zh) * | 2020-02-18 | 2023-03-28 | 北京字节跳动网络技术有限公司 | 一种语言处理的方法、装置、介质和电子设备 |
CN111752571B (zh) * | 2020-06-29 | 2024-08-02 | 广州华多网络科技有限公司 | 程序升级方法、装置、设备及存储介质 |
CN112328257A (zh) * | 2020-11-24 | 2021-02-05 | 中国工商银行股份有限公司 | 代码转换方法及装置 |
CN112506489B (zh) * | 2020-11-30 | 2024-06-18 | 广州市智能软件产业研究院 | 一种安全协议建模端与验证端的跨平台方法、计算机及存储介质 |
CN112905153B (zh) * | 2020-12-07 | 2023-10-27 | 中国科学院软件研究所 | 一种面向软件定义卫星的软件并行构建方法以及装置 |
CN112579570B (zh) * | 2020-12-16 | 2023-06-23 | 中国辐射防护研究院 | 一种核环境数据存储方法和装置 |
CN112667240A (zh) * | 2020-12-23 | 2021-04-16 | 平安普惠企业管理有限公司 | 程序代码转换方法及相关设备 |
CN112699279B (zh) * | 2020-12-31 | 2024-06-18 | 百果园技术(新加坡)有限公司 | 组件自动化处理方法、装置、设备和存储介质 |
CN114816467B (zh) * | 2021-03-25 | 2023-04-28 | 北京百度网讯科技有限公司 | 升级文件的生成方法、装置和电子设备 |
CN113326048B (zh) * | 2021-06-24 | 2023-01-17 | 上海万向区块链股份公司 | 浮点数计算精度处理方法、系统、介质及设备 |
CN113641361B (zh) * | 2021-06-28 | 2024-01-26 | 武汉极意网络科技有限公司 | 一种基于Clang的代码隐藏方法及装置 |
CN113672227B (zh) * | 2021-08-30 | 2024-04-23 | 北京爱奇艺科技有限公司 | 用户界面代码生成方法、装置、电子设备及存储介质 |
CN115509514B (zh) * | 2022-11-23 | 2023-03-10 | 济南浪潮数据技术有限公司 | 一种前端数据模拟方法、装置、设备及介质 |
CN115904480B (zh) * | 2023-01-09 | 2023-07-14 | 成方金融科技有限公司 | 代码重构方法、装置、电子设备及存储介质 |
CN116483423B (zh) * | 2023-06-25 | 2023-09-05 | 杭州谐云科技有限公司 | 一种基于遗传算法的增量代码扫描方法和系统 |
CN118364475B (zh) * | 2024-05-21 | 2024-10-01 | 上海灵曼信息科技有限公司 | 基于机器学习的代码审核和优化系统及其使用方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106970819A (zh) * | 2017-03-28 | 2017-07-21 | 清华大学 | 一种基于prdl规则描述语言的c程序代码规范检查装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4144889B2 (ja) * | 2005-10-31 | 2008-09-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムの規約違反を判断する装置、およびその方法 |
CN103927473A (zh) * | 2013-01-16 | 2014-07-16 | 广东电网公司信息中心 | 检测移动智能终端的源代码安全的方法、装置及系统 |
US20140282373A1 (en) * | 2013-03-15 | 2014-09-18 | Trinity Millennium Group, Inc. | Automated business rule harvesting with abstract syntax tree transformation |
CN104657140B (zh) * | 2015-02-10 | 2018-01-09 | 广州华多网络科技有限公司 | 代码生成方法及装置 |
CN105912381B (zh) * | 2016-04-27 | 2019-08-30 | 华中科技大学 | 一种基于规则库的编译期代码安全检测方法 |
CN107015813A (zh) * | 2017-04-19 | 2017-08-04 | 网易(杭州)网络有限公司 | 代码修复的方法、装置及电子设备 |
-
2019
- 2019-08-15 CN CN201910752136.0A patent/CN110609693B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106970819A (zh) * | 2017-03-28 | 2017-07-21 | 清华大学 | 一种基于prdl规则描述语言的c程序代码规范检查装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110609693A (zh) | 2019-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110609693B (zh) | 基于数据标准化的代码更新方法、装置及终端设备 | |
CN108985073B (zh) | 一种高度自动化的智能合约形式化验证系统及方法 | |
CN110414261B (zh) | 一种数据脱敏方法、装置、设备及可读存储介质 | |
US7966609B2 (en) | Optimal floating-point expression translation method based on pattern matching | |
CN109656544B (zh) | 一种基于执行路径相似度的云服务api适配方法 | |
CN113238740B (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
CN112988163B (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN113504900A (zh) | 一种编程语言转换方法和装置 | |
CN110879776A (zh) | 一种测试用例的生成方法和装置 | |
CN117113347A (zh) | 一种大规模代码数据特征提取方法及系统 | |
CN112860265A (zh) | 一种源代码数据库操作异常检测方法及装置 | |
CN111857860A (zh) | 一种安全加载插件的实现方法及系统 | |
CN113901083A (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
CN114115884B (zh) | 一种编程服务的管理方法以及相关装置 | |
CN116305131B (zh) | 脚本静态去混淆方法及系统 | |
CN114153447B (zh) | 一种自动化生成ai训练代码的方法 | |
CN115292178A (zh) | 测试数据搜索方法、装置、存储介质以及终端 | |
CN108549531A (zh) | 复杂类型数据自动生成方法、装置、电子设备、存储介质 | |
US8954307B1 (en) | Chained programming language preprocessors for circuit simulation | |
CN113760291B (zh) | 日志输出的方法和装置 | |
CN118103815A (zh) | 编译方法以及用于编译的装置 | |
CN112596737A (zh) | 一种函数调用关系的扫描方法、系统、设备及存储介质 | |
CN109858169B (zh) | 一种基于Modelica的模型平坦化方法 | |
CN116775040B (zh) | 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法 | |
CN117435200B (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210128 Address after: 518000 Room 201, building A, No. 1, Qian Wan Road, Qianhai Shenzhen Hong Kong cooperation zone, Shenzhen, Guangdong (Shenzhen Qianhai business secretary Co., Ltd.) Applicant after: Shenzhen saiante Technology Service Co.,Ltd. Address before: 1-34 / F, Qianhai free trade building, 3048 Xinghai Avenue, Mawan, Qianhai Shenzhen Hong Kong cooperation zone, Shenzhen, Guangdong 518000 Applicant before: Ping An International Smart City Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |