CN113010183B - 一种代码转换方法及装置 - Google Patents

一种代码转换方法及装置 Download PDF

Info

Publication number
CN113010183B
CN113010183B CN202110485986.6A CN202110485986A CN113010183B CN 113010183 B CN113010183 B CN 113010183B CN 202110485986 A CN202110485986 A CN 202110485986A CN 113010183 B CN113010183 B CN 113010183B
Authority
CN
China
Prior art keywords
code
converted
git
codes
file
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
Application number
CN202110485986.6A
Other languages
English (en)
Other versions
CN113010183A (zh
Inventor
胡文涛
金纯亮
黄剑文
黄俊辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202110485986.6A priority Critical patent/CN113010183B/zh
Publication of CN113010183A publication Critical patent/CN113010183A/zh
Application granted granted Critical
Publication of CN113010183B publication Critical patent/CN113010183B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明可用于大数据技术领域,本发明提供了一种代码转换方法及装置,对预先接收的待转换代码进行过滤;解析过滤后的待转换代码,得到所述待转换代码对应的AST抽象语法结构树;根据所述AST抽象语法结构树生成目标代码。本发明可以自动拉取、修改、提交各应用的对应代码。在修改效率、修改结果的正确性和规范性上均比纯人工大大提高。

Description

一种代码转换方法及装置
技术领域
本发明属于大数据技术领域,具体涉及一种代码转换方法及装置。
背景技术
当前存量信息系统升级改造逐渐成为各大企业的工作重点之一,而从传统程序语言向现代语言转换是目前众多企业对存量信息系统升级改造的重点,与此对应技术改造的需求也对于存量代码库有频繁的修改要求。另外企业的技术规范和技术框架的升级也时常对于各应用代码库有调查和修改的要求。对于一个大型企业动辄数百万级别数量的代码文件,逐层发起规培和各自修改,一个是时间成本较大,另代码因理解问题和人工因素,导致质量层次不齐,代码风格差异较大。其中对于java文件的修改要求是最多的,如果自动处理,则如果用一般的四则匹配,则不能根据复杂的实际逻辑进行针对性修改。
发明内容
本发明属于大数据技术领域,本发明所提供的代码转换方法及装置,可以自动拉取、修改、提交各应用的对应代码。如此,在修改效率、修改结果的正确性和规范性上均比纯人工大大提高。
为解决上述技术问题,本发明提供以下技术方案:
第一方面,本发明提供一种代码转换方法,包括:
对预先接收的待转换代码进行过滤;
解析过滤后的待转换代码,得到所述待转换代码对应的AST抽象语法结构树;
根据所述AST抽象语法结构树生成目标代码。
一实施例中,接收用户的待转换代码包括:
将所述待转换代码存入git代码库中;
基于分布式批量框架从所述git代码库中抽取所述待转换代码。
一实施例中,代码转换方法还包括:
根据所述分布式批量框架将所述目标代码发送至各git代码库中。
一实施例中,所述对预先接收的待转换代码进行过滤包括:
将布隆过滤器设置在键值数据库中;
利用所述布隆过滤器过滤所述待转换代码。
一实施例中,所述根据所述AST抽象语法结构树生成目标代码包括:
利用正则表达式根据所述AST抽象语法结构树生成AST文件;
根据所述AST文件生成所述目标代码。
第二方面,本发明提供一种代码转换装置,包括:
代码接收模块,用于接收用户的待转换代码;
代码过滤模块,用于根据布隆过滤器过滤所述待转换代码;
代码解析模块,用于解析过滤后的待转换代码,以生成所述待转换代码对应的AST抽象语法结构树;
代码转换模块,用于根据所述AST抽象语法结构树生成目标代码。
一实施例中,所述代码接收模块包括:
代码转存模块,用于将所述待转换代码存入git代码库中;
代码抽取模块,用于基于分布式批量框架从所述git代码库中抽取所述待转换代码。
一实施例中,代码转换装置还包括:
代码分发模块,用于根据所述分布式批量框架将所述目标代码发送至各git代码库中;
所述代码过滤模块包括:
过滤器设置单元,用于将布隆过滤器设置在键值数据库中;
代码过滤单元,用于利用所述布隆过滤器过滤所述待转换代码;
所述代码转换模块包括:
AST文件生成单元,用于利用正则表达式根据所述AST抽象语法结构树生成AST文件;
目标代码生成单元,用于根据所述AST文件生成所述目标代码。
第三方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现代码转换方法的步骤。
第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现代码转换方法的步骤。
从上述描述可知,本发明实施例提供的代码转换方法及装置,首先对预先接收的待转换代码进行过滤;接着,解析过滤后的待转换代码,得到待转换代码对应的AST抽象语法结构树;最后根据AST抽象语法结构树生成目标代码。本发明基于各应用配置好对应修改配置参数表,牵头方编写好基于AST抽象语法树和代码修改配置表、正则表达式的统一程序处理,则会自动拉取、修改、提交各应用的对应代码。如此,在修改效率、修改结果的正确性和规范性上均比纯人工大大提高。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的实施例中代码转换方法流程示意图一;
图2为本发明的实施例中代码转换方法流程示意图二;
图3为本发明的实施例中代码转换方法中步骤400的流程示意图;
图4为本发明的实施例中代码转换方法流程示意图三;
图5为本发明的实施例中代码转换方法中步骤100的流程示意图;
图6为本发明的实施例中代码转换方法中步骤300的流程示意图;
图7为本发明的具体应用实例中代码转换方法流程示意图;
图8为本发明的具体应用实例中代码转换方法的架构图;
图9为本发明的具体应用实例中基于AST抽象语法树和代码修改配置表的修改流程图;
图10为本发明的具体应用实例中步骤S5的流程示意图;
图11为本发明的具体应用实例中PBG001对应的AST树主要节点结构示意图;
图12为本发明的具体应用实例中PBG001中调用平台服务为pi20069对应的MethodDeclaration节点示意图;
图13为本发明的具体应用实例中代码转换装置的结构示意图一;
图14为本发明的具体应用实例中代码转换装置的结构示意图二;
图15为本发明的实施例中代码接收模块40的结构框图;
图16为本发明的具体应用实例中代码转换装置的结构示意图三;
图17为本发明的实施例中代码过滤模块20的结构框图;
图18为本发明的实施例中代码转换模块30的结构框图;
图19为本发明的实施例中的电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本发明的实施例提供一种代码转换方法的具体实施方式,参见图1,该方法具体包括如下内容:
步骤100:对预先接收的待转换代码进行过滤。
优选地,可通过git代码库接受用户的待转换代码,GIT是一个分布式版本控制软件,另外,这里的版本控制(Revision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一代码文件案都得到同步。
由于大型企业的代码数量动辄百万级别,谷歌甚至达千万级别;对于修改对象分类相对固定,技术改造需求频繁的,抽取白名单(或黑名单)程序特征(一般以程序名称抽取),计算其hash值之后,通过布隆过滤器对其进行过滤,以此节约数据库空间并增强搜索效率。
布隆过滤器(Bloom Filter)是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多。Bloom Filter算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。具体地,首先需要k个hash函数,每个函数可以把key散列成为1个整数;初始化时,需要一个长度为n比特的数组,每个比特位初始化为0。某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1。判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。
步骤200:解析过滤后的待转换代码,得到所述待转换代码对应的AST抽象语法结构树;
可以理解的是,抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文文法,因为在写文法时,经常会对文法进行等价的转换(消除左递归,回溯,二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱。因些,很多编译器经常要独立地构造语法分析树,为前端,后端建立一个清晰的接口。
步骤300:根据所述AST抽象语法结构树生成目标代码。
具体地,根据参数模板通过正则表达式匹配等方式修改结构树或者生成新的AST文件,再根据AST文件生成对应的目标代码文件。
从上述描述可知,本发明实施例提供的代码转换方法,首先接收用户的待转换代码;根据布隆过滤器过滤待转换代码;接着,解析过滤后的待转换代码,以生成待转换代码对应的AST抽象语法结构树;最后根据AST抽象语法结构树生成目标代码。本发明基于各应用配置好对应修改配置参数表,牵头方编写好基于AST抽象语法树和代码修改配置表、正则表达式的统一程序处理,则会自动拉取、修改、提交各应用的对应代码。如此,在修改效率、修改结果的正确性和规范性上均比纯人工大大提高。
一实施例中,参见图2,代码转换方法还包括:步骤400:接收用户的待转换代码,参见图3,步骤400进一步包括:
步骤401:将所述待转换代码存入git代码库中;
步骤402:基于分布式批量框架从所述git代码库中抽取所述待转换代码。
具体地,在步骤401至步骤402中,配置好各git代码库的对应密钥用户,并各应用用户配置好需本次需要扫描的git代码库,日终时由DBF分布式批量框架自动根据配置从各应用代码库拉取到文件服务器。各应用用户配置好各文件(类型)的修改参数及模板,包括无需处理的文件(类型),或者需要修改的文件(类型)两大类,下面根据不同类型改造需求分成小类,以对应不同的后台配置表。
一实施例中,参见图4,代码转换方法还包括:
步骤500:根据所述分布式批量框架将所述目标代码发送至各git代码库中。
具体地,由DBF分布式批量框架调度,文件服务器推送到各git服务器,并发送消息通知对应应用代码审核人。
具体地,选择一个节点作为master节点(一般集群通过前端请求会路由到一台机器上,它就是Master节点),它负责不断从数据源捞数据,并发送mq消息(同一批数据用一条消息发送出去);其它的节点监听消息,有消息过来就进行处理。
一实施例中,参见图5,步骤100进一步包括:
步骤101:将布隆过滤器设置在键值数据库中;
步骤102:利用所述布隆过滤器过滤所述待转换代码。
在步骤101以及步骤102中,该键值数据库可以为一redis数据库,在此情况下,设计若干个布隆过滤器在redis-group上,节约redis空间并增强搜索概率,也可防止对于后台配置表的过量访问。每一个布隆过滤器可对应改造需求小类。在配置表产生的时候生成并部署。
一实施例中,参见图6,步骤300进一步包括:
步骤301:利用正则表达式根据所述AST抽象语法结构树生成AST文件;
步骤302:根据所述AST文件生成所述目标代码。
为进一步地说明本方案,本发明还以java代码为例,提供一种代码转换方法的具体应用实例,参见图7,该方法具体包括以下步骤:
本发明修改对象编写较为规范,修改规则无应用特殊性,修改方案易于抽取模板、设计相关配置参数表的技术规范类改造。
Sa:接收用户的待转换代码。
参见图8,步骤Sa具体包括以下步骤:
1.由GIT文件处理服务集群将本地公钥注册到各应用GIT代码库上。各应用用户在数据库中配置本次需要处理的git代码库名称、路径等信息,日终由服务集群的DBF分布式批量框架自动根据配置拉取对应git源码。
2.生成一个批次的(批次粒度根据实际情况来,本示例按应用粒度)的文件后,传输到UDS统一数据交换平台(Uds:统一管理各应用间数据的分发和传输统一数据交换起到企业数据总线作用,对全行各应用系统之间以文件格式交换的数据进行管理)对应端口。文件服务器为HBASE数据库,从对应端口获取对应文件,以本次事件编号、批次等为索引存储到本地。
3.代码修改处理服务集群定时比较事先的配置和文件服务器的事件编号、批次,如果文件服务器已经完成下载,则发起对文件服务器的逐条扫描处理请求。
Sb:根据布隆过滤器过滤待转换代码。
需要说明的是,如果技术改造升级是统一的覆盖面极广,并且用户配置的参数及模板也很多,设计若干个布隆过滤器在redis-group上,节约redis空间并增强搜索概率,也可防止对于后台配置表的过量访问。每一个布隆过滤器可对应改造需求小类。在配置表产生的时候生成并部署。
4.由于大型企业的代码数量动辄百万级别,谷歌甚至达千万级别;对于修改对象分类相对固定,技术改造需求频繁的,抽取白名单(或黑名单)程序特征(一般以程序名称抽取),hash计算后放在布隆过滤器。总体上设计若干个布隆过滤器在redis-group上,节约redis空间并极大增强搜索效率,也可防止对于后台配置表的过量访问。若本次修改对象较难归纳到既定规则或者后续很难归类,则无需抽取计算到过滤器上。在布隆精确性上,由于会有小概率的“假阳性”,即“黑名单”可能误伤需要修改的程序,所以尽量设计白名单的场景。
Sc:解析过滤后的待转换代码,以生成待转换代码对应的AST抽象语法结构树;
Sd:根据AST抽象语法结构树生成目标代码。
5.经过布隆过滤器的程序,代码修改服务集群才进行处理。各应用用户配置好各代码程序(或者抽取出的特征)的修改参数及模板。根据不同类型改造需求,修改参数可以分成大小类多张关联表,放在“配置2”数据库。代码修改服务读取对应的修改参数及模板,将对应java文件解析成AST抽象语法树的格式,然后根据参数模板修改结构树,再生成回java文件。
6.以批次为粒度修改完毕后,传输到UDS统一数据交换平台对应端口,并推送到GIT文件处理服务集群
7.GIT文件处理服务集群,执行git本地命令,将修改的文件推送到对应应用的GIT代码库,视需求发送消息通知对应应用代码审核人。
本具体应用实例,以传统语言向支持分布式补偿事务框架的服务分层调用程序转换为例,删除基于AST抽象语法树和代码修改配置表的自动修改流程,具体地:
背景设定在从其他类型语言平移转换成java代码后需要进行服务识别和分层、分布式改造。其中使用的大部分技巧和方案也适用于其他基于AST语法树和代码修改配置表、正则表达式的场景,支持分布式补偿事务框架服务调用框架生成举例如下,参见图9。
S1:扫描配置表(或参数表),按树状数据结构放入代码修改处理服务集群的高速缓存中。配置表主要分成三大类:模板表(用以生成ASTNode或者新的AST文件的主要内容,参见表3以及表4)、程序类型表(用以生成布隆过滤规则以及定义程序级修改规则,参见表1)、程序内部关系表(用以定义程序内部修改规则,参见表2)。
表1程序类型表(默认带应用索引字段,以下各表描述简略)
表2:程序内部调用接口表
表3:程序类型模板表
表4:事务类型模板表
事务类型 事务模板id
1.tcc
2.saga
S2:经过“总体结构说明”的3、4步的逐条扫描处理、布隆过滤后的程序,才进入循环的实际处理。
S3:匹配处理的程序名称和程序类型表的ClassName,根据匹配结果进行程序级修改处理(程序级处理跟第5步的程序内部修改的区别在于:不涉及程序内部逻辑的修改,只根据指定的程序本身名称、类型等相关配置,修改程序本身之外的其他代码,具体原理类似第5步,不再做赘述)。
S4:循环扫描源代码,通过org.eclipse.jdt.core的ASTParser将转换为CompilationUnit,CompilationUnit为ASTNode的子类,指的就是整个Java文件,也是AST的根节点,下面是部分代码片段,“/*...*/”代表参数英文意义。
ASTParser astParser=ASTParser.newParser(/*API level*/);
astParser.setSource(/*Source Code*/);
CompilationUnit result=(CompilationUnit)(astParser.creatAST(null));
S5:采用复杂对象结构的访问者模式。即:程序代码就是对象结构,ASTNode充当抽象元素角色,不同类型的节点是待访问的具体元素,ASTVisit充当抽象访问者,而我们重写ASTVisit的子类充当具体访问者。实例化这个访问者类调用ASTNode的accept()方法,将ASTVisit作为参数传入,则可以执行访问。访问时,匹配语法树的CompilationUnit和程序类型表的ClassName,匹配上,则进行程序内部修改处理,进一步地,参见图10,步骤S5还包括以下步骤:
S51:查找Compilation Unit对应参数表数据。
S52:正则式匹配特定类型的节点ASTNode与参数表对应字段。
S53:根据参数自动修改、新增、删除对应节点。
S54:使用参数表中对应的模板生成对应节点或者新的AST文件。
S55:根据参数使用正则表达式替换约定节点中的内容。
以上各步涉及修改AST节点结构的动作通过org.eclipse.jdt.core的ASTRewriter回写ASTNode;对文件的操作类似,由模板生成CompilationUnit之后,再去做具体匹配和修改。
S6:根据重构后的CompilationUnit ASTNode生成回去新的JAVA源代码,结束转换,并转向S2,处理下一个循环。
图11是支持分布式补偿事务框架服务调用框架生成流程示意图,背景是基于从主机代码使用tava工具自动转成java代码之后,需要做服务分层、分布式改造,具有涉及面极广(涉及所有主机应用),修改对象编写较为规范,修改规则无应用特殊性,修改方案易于抽取模板、设计相关配置参数表等等特点。
参见图12,在步骤S51至步骤S55中,核心的代码修改处理步骤如下(步骤编号对照图10和图11的标号,ASTNODE节点功能说明如下所述:
1.匹配处理的程序名称和程序类型表的ClassName(比如PBG001.java),转换后程序类型为“1、平台功能部件”,则无需进行程序级修改处理。如果为“2、平台服务”,则根据另行配置的模板(本部分略过,结构类似表4)生成对应的壳文件(服务分层的上层程序),并解析成AST树,根据正则表达式修改结构树为调用PBG001的处理,同时需根据事务类型模板表对应补偿事务类型和事务模板id增加对应结构树的AnnotationTypeDeclaration;
2.由第一步在程序类型表找到PBG001.java之后,则继续从根据程序内部调用接口表找对应的记录,逐条进行处理。比如接口名称为pi20069的那条记录,接口类型为“2、平台服务”,正则表达式定位pi20069到对应VariableDeclarationFragment以及之后的ExpressionStatement;
3.将原通讯区赋值功能的变量节点VariableDeclarationFragment以及方法执行语句ExpressionStatement等部分放到程序类型模板表对应输入@BeanName1初始化执行代码块之中,将QualifiedName部分替代为bean对应的ASTNode部分;
4.生成对应的bean文件,并将第3步生成的执行代码块整体放入BeanName1对应PBGW001的拼装两者名字的初始函数中,作为ExpressionStatement插入到第2步找到的MethodDeclaration之前。
5.将程序内部调用接口表的“接口转换后服务(方法)名称”分别替换程序类型模板表的“平台服务”对应调用函数模板的"#ServiceName.#FunctionName,生成新的平台调用函数。
6.删掉原来MethodDeclaration节点,拼装第5步生成的平台服务调用函数名字为新的MethodDeclarationi节点,并紧接该节点后加入Identifier节点,声明对应bean的传入。
7.第6步生成新的MethodDeclaration节点之后,将原第2步找到的ExpressionStatement之后的语句统一放到程序类型模板表对应输出@BeanName2的转换函数中。输出bean的处理类似输入bean,不再赘述。以上1-7步均由ASTVistor执行,并在查找、替换关键字时均使用正则表达式进行模糊匹配。
8.以上各个AST抽象语法树处理过程中,均由ASTRewriter对语法树进行修改,重构后,再覆盖生成回新的JAVA代码(结果主要是PBG001.java,和根据不同场景生成的壳文件,bean文件等等)。
从上述描述可知,本发明实施例提供的代码转换方法,首先接收用户的待转换代码;根据布隆过滤器过滤待转换代码;接着,解析过滤后的待转换代码,以生成待转换代码对应的AST抽象语法结构树;最后根据AST抽象语法结构树生成目标代码。本发明基于各应用配置好对应修改配置参数表,牵头方编写好基于AST抽象语法树和代码修改配置表、正则表达式的统一程序处理,则会自动拉取、修改、提交各应用的对应代码。如此,在修改效率、修改结果的正确性和规范性上均比纯人工大大提高。
基于同一发明构思,本申请实施例还提供了一种代码转换装置,可以用于实现上述实施例所描述的方法,如下面的实施例。由于代码转换装置解决问题的原理与代码转换方法相似,因此代码转换装置的实施可以参见代码转换方法实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本发明的实施例提供一种能够实现代码转换方法的代码转换装置的具体实施方式,参见图13,代码转换装置具体包括如下内容:
代码过滤模块10,用于对预先接收的待转换代码进行过滤;
代码解析模块20,用于解析过滤后的待转换代码,得到所述待转换代码对应的AST抽象语法结构树;
代码转换模块30,用于根据所述AST抽象语法结构树生成目标代码。
一实施例中,参见图14,代码转换装置还包括,代码接收模块40,用于接收用户的待转换代码,参见图15,所述代码接收模块40包括:
代码转存模块401,用于将所述待转换代码存入git代码库中;
代码抽取模块402,用于基于分布式批量框架从所述git代码库中抽取所述待转换代码。
一实施例中,参见图16,代码转换装置还包括:
代码分发模块50,用于根据所述分布式批量框架将所述目标代码发送至各git代码库中;
一实施例中,参见图17,所述代码过滤模块10包括:
过滤器设置单元101,用于将布隆过滤器设置在键值数据库中;
代码过滤单元102,用于利用所述布隆过滤器过滤所述待转换代码;
一实施例中,参见图18,所述代码转换模块30包括:
AST文件生成单元301,用于利用正则表达式根据所述AST抽象语法结构树生成AST文件;
目标代码生成单元302,用于根据所述AST文件生成所述目标代码。
从上述描述可知,本发明实施例提供的代码转换装置,首先响应于用户的造数请求,解析所述造数请求,以确定字段名称、字段类型、字段注释以及字段标签;接着,根据所述字段名称、字段类型、字段注释以及字段标签触发对应的python函数,以生成待造数据;最后根据所述造数请求在所述待造数据中插入对应SQL语句以及value值。本发明通过自定义Python函数和模板配置的方式,以解决现有技术中造数方法难满足特殊场景下的需求的问题。具体地,本发明具有以下有益效果:
下面参考图19,其示出了适于用来实现本申请实施例的电子设备600的结构示意图。
如图19所示,电子设备600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM))603中的程序而执行各种适当的工作和处理。在RAM603中,还存储有系统600操作所需的各种程序和数据。CPU601、ROM602、以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡,调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装如存储部分608。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述基于数据机房场景下的人员距离确定方法的步骤,该步骤包括:
步骤100:对预先接收的待转换代码进行过滤;
步骤200:解析过滤后的待转换代码,得到所述待转换代码对应的AST抽象语法结构树;
步骤300:根据所述AST抽象语法结构树生成目标代码。
在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上该仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (7)

1.一种代码转换方法,其特征在于,包括:
对预先接收的待转换代码进行过滤;
解析过滤后的待转换代码,得到所述待转换代码对应的AST抽象语法结构树;
根据所述AST抽象语法结构树生成目标代码;
接收用户的待转换代码包括:
将所述待转换代码存入git代码库中;
基于分布式批量框架从所述git代码库中抽取所述待转换代码;
将所述待转换代码存入git代码库中,包括:
配置好各git代码库的对应密钥用户,各应用用户配置好本次需要扫描的git代码库,日终时由DBF分布式批量框架自动根据配置从各应用代码库拉取到文件服务器;各应用用户配置好各文件以及类型的修改参数及模板,包括无需处理的文件以及类型,或者需要修改的文件以及类型两大类,并根据不同类型改造需求分成小类,以对应不同的后台配置表;
接收所述待转换代码的步骤包括:
首先,由GIT文件处理服务集群将本地公钥注册到各应用GIT代码库上;各应用用户在数据库中配置本次需要处理的git代码库名称、路径信息,日终由服务集群的DBF分布式批量框架自动根据配置拉取对应git源码;
接着,生成一个批次的的文件后,传输到UDS统一数据交换平台对应端口;文件服务器为HBASE数据库,从对应端口获取对应文件,以本次事件编号、批次为索引存储到本地;
最后,代码修改处理服务集群定时比较事先的配置和文件服务器的事件编号、批次,如果文件服务器已经完成下载,则发起对文件服务器的逐条扫描处理请求;
所述对预先接收的待转换代码进行过滤包括:
将布隆过滤器设置在键值数据库中;
利用所述布隆过滤器过滤所述待转换代码;
所述利用所述布隆过滤器过滤所述待转换代码,包括:
抽取白名单或黑名单的程序特征,hash计算后放在布隆过滤器,设计若干个布隆过滤器在redis-group上。
2.根据权利要求1所述的代码转换方法,其特征在于,还包括:
根据所述分布式批量框架将所述目标代码发送至各git代码库中。
3.根据权利要求1所述的代码转换方法,其特征在于,所述根据所述AST抽象语法结构树生成目标代码包括:
利用正则表达式根据所述AST抽象语法结构树生成AST文件;
根据所述AST文件生成所述目标代码。
4.一种代码转换装置,其特征在于,包括:
代码过滤模块,用于对预先接收的待转换代码进行过滤;
代码解析模块,用于解析过滤后的待转换代码,得到所述待转换代码对应的AST抽象语法结构树;
代码转换模块,用于根据所述AST抽象语法结构树生成目标代码;
代码接收模块,用于接收用户的待转换代码,所述代码接收模块包括:
代码转存模块,用于将所述待转换代码存入git代码库中;
代码抽取模块,用于基于分布式批量框架从所述git代码库中抽取所述待转换代码;
所述代码转存模块具体用于配置好各git代码库的对应密钥用户,各应用用户配置好本次需要扫描的git代码库,日终时由DBF分布式批量框架自动根据配置从各应用代码库拉取到文件服务器;各应用用户配置好各文件以及类型的修改参数及模板,包括无需处理的文件以及类型,或者需要修改的文件以及类型两大类,并根据不同类型改造需求分成小类,以对应不同的后台配置表;
所述代码过滤模块包括:
过滤器设置单元,用于将布隆过滤器设置在键值数据库中;
代码过滤单元,用于利用所述布隆过滤器过滤所述待转换代码;
接收所述待转换代码的步骤包括:
首先,由GIT文件处理服务集群将本地公钥注册到各应用GIT代码库上;各应用用户在数据库中配置本次需要处理的git代码库名称、路径信息,日终由服务集群的DBF分布式批量框架自动根据配置拉取对应git源码;
接着,生成一个批次的的文件后,传输到UDS统一数据交换平台对应端口;文件服务器为HBASE数据库,从对应端口获取对应文件,以本次事件编号、批次为索引存储到本地;
最后,代码修改处理服务集群定时比较事先的配置和文件服务器的事件编号、批次,如果文件服务器已经完成下载,则发起对文件服务器的逐条扫描处理请求;
所述对预先接收的待转换代码进行过滤包括:
将布隆过滤器设置在键值数据库中;
利用所述布隆过滤器过滤所述待转换代码;
所述利用所述布隆过滤器过滤所述待转换代码,包括:
抽取白名单或黑名单的程序特征,hash计算后放在布隆过滤器,设计若干个布隆过滤器在redis-group上。
5.根据权利要求4所述的代码转换装置,其特征在于,还包括:
代码分发模块,用于根据所述分布式批量框架将所述目标代码发送至各git代码库中;
所述代码转换模块包括:
AST文件生成单元,用于利用正则表达式根据所述AST抽象语法结构树生成AST文件;
目标代码生成单元,用于根据所述AST文件生成所述目标代码。
6.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至3任一项所述代码转换方法的步骤。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至3任一项所述代码转换方法的步骤。
CN202110485986.6A 2021-04-30 2021-04-30 一种代码转换方法及装置 Active CN113010183B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110485986.6A CN113010183B (zh) 2021-04-30 2021-04-30 一种代码转换方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110485986.6A CN113010183B (zh) 2021-04-30 2021-04-30 一种代码转换方法及装置

Publications (2)

Publication Number Publication Date
CN113010183A CN113010183A (zh) 2021-06-22
CN113010183B true CN113010183B (zh) 2024-08-09

Family

ID=76380980

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110485986.6A Active CN113010183B (zh) 2021-04-30 2021-04-30 一种代码转换方法及装置

Country Status (1)

Country Link
CN (1) CN113010183B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113626038A (zh) * 2021-07-06 2021-11-09 曙光信息产业(北京)有限公司 代码转换方法、装置、设备以及存储介质
CN114780100B (zh) * 2022-04-08 2023-04-07 芯华章科技股份有限公司 编译方法、电子设备及存储介质
WO2023207103A1 (zh) * 2022-04-28 2023-11-02 华为云计算技术有限公司 代码转换方法和装置
CN117555925B (zh) * 2024-01-12 2024-05-10 恒生电子股份有限公司 数据库访问代码转换方法、装置及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112363727A (zh) * 2020-11-10 2021-02-12 中国平安人寿保险股份有限公司 Sql代码的java转换方法、装置、计算机设备及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148581A (zh) * 2019-06-26 2020-12-29 北京京东尚科信息技术有限公司 代码规范检查方法、装置、系统及存储介质
CN111880785A (zh) * 2020-06-23 2020-11-03 北京三快在线科技有限公司 程序代码转换方法、装置,电子设备
CN111767076A (zh) * 2020-06-23 2020-10-13 中国工商银行股份有限公司 代码重构方法及装置
CN112015430B (zh) * 2020-09-07 2024-08-16 平安国际智慧城市科技股份有限公司 JavaScript代码翻译方法、装置、计算机设备及存储介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112363727A (zh) * 2020-11-10 2021-02-12 中国平安人寿保险股份有限公司 Sql代码的java转换方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN113010183A (zh) 2021-06-22

Similar Documents

Publication Publication Date Title
CN113010183B (zh) 一种代码转换方法及装置
US8719299B2 (en) Systems and methods for extraction of concepts for reuse-based schema matching
CN103294475B (zh) 基于图形化业务场景和领域模板的业务自动生成系统和方法
CN107515887B (zh) 一种适用于多种大数据管理系统的交互式查询方法
US10901804B2 (en) Apparatus and method to select services for executing a user program based on a code pattern included therein
CN111427561A (zh) 业务代码的生成方法、装置、计算机设备和存储介质
US20040205615A1 (en) Enhanced mechanism for automatically generating a transformation document
CN110866029B (zh) sql语句构建方法、装置、服务器及可读存储介质
US20060106856A1 (en) Method and system for dynamic transform and load of data from a data source defined by metadata into a data store defined by metadata
JP2023545625A (ja) ソフトウェアの脆弱性のトリアージのためのシステムおよび方法
CN109116828B (zh) 一种控制器中模型代码配置方法和装置
CN113238740B (zh) 代码生成方法、代码生成装置、存储介质及电子设备
CN111324619A (zh) 微服务系统中的对象更新方法、装置、设备和存储介质
CN113342325A (zh) 可视化建模方法、系统、电子设备及存储介质
CN117033418A (zh) 语句重写方法、系统及装置
US20190347341A1 (en) Method and system for schema transformation
CN115202626A (zh) 一种支持多技术栈组件的低代码前端开发方法
CN110879710A (zh) 一种rpg程序自动转成java程序的方法
CN110928535B (zh) 衍生变量部署方法、装置、设备及可读存储介质
US12038940B2 (en) Architecture for data map converters
CN115795046A (zh) 数据加工方法、装置、系统、电子设备和存储介质
CN113885970B (zh) 一种基于脚本生成报表数据的方法、系统及介质
CN115794858A (zh) 查询语句处理方法、装置、设备及存储介质
CN114519071A (zh) 规则匹配模型的生成方法、匹配方法、系统、设备和介质
CN113934748A (zh) 混合型sql脚本文件生成方法、执行方法及装置

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