CN114816421A - 代码转换方法及装置、电子设备、存储介质 - Google Patents
代码转换方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN114816421A CN114816421A CN202210439644.5A CN202210439644A CN114816421A CN 114816421 A CN114816421 A CN 114816421A CN 202210439644 A CN202210439644 A CN 202210439644A CN 114816421 A CN114816421 A CN 114816421A
- Authority
- CN
- China
- Prior art keywords
- code
- information
- variable
- source code
- line
- 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/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic 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)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种代码转换方法及装置、电子设备、存储介质,该方法包括:获取待转换的源代码,并确定源代码对应的常量信息、变量信息以及代码行信息。根据常量信息,从源代码中识别第一代码。根据变量信息,从源代码中识别第二代码。根据代码行信息,从源代码中识别满足封装条件的代码块。将代码块封装为目标对象,并获得代码块与目标对象的绑定信息。在对源代码进行转换的过程中,将第一代码转换为类静态变量,将第二代码转换为实体类,以及根据绑定信息调用目标对象,从而在降低代码重复率的同时,改善代码转换效率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种代码转换方法及装置、电子设备、存储介质。
背景技术
人为编写的代码中,通常会存在重复性代码,比如在一个方法中反复使用相同常量等,如果将这些重复性代码逐行直译成面对对象语言的程序代码,虽然可以保障语句准确性,却对后续开发维护带来较大不便。因此,现有方式中,开发人员会对初步转换后的代码进行人为优化,以降低代码重复率,但这种方式增加了人力成本,亦不利于提高整体的代码转换效率。
发明内容
本申请提供一种代码转换方法及装置、电子设备、存储介质,其主要目的在于降低代码重复率的同时,改善代码转换效率。
为实现上述目的,本申请实施例提供了一种代码转换方法,所述方法包括:
获取待转换的源代码,并确定所述源代码对应的常量信息、变量信息以及代码行信息;
根据所述常量信息,从所述源代码中识别第一代码;
根据所述变量信息,从所述源代码中识别第二代码;
根据所述代码行信息,从所述源代码中识别满足封装条件的代码块;
将所述代码块封装为目标对象,并获得所述代码块与所述目标对象的绑定信息;
在对所述源代码进行转换的过程中,将所述第一代码转换为类静态变量,将所述第二代码转换为实体类,以及根据所述绑定信息调用所述目标对象。
一些可选的实施方式中,所述确定所述源代码对应的常量信息、变量信息以及代码行信息,包括:
对所述源代码进行语法解析,得到所述源代码的语法树;
根据所述语法树进行遍历,生成常量信息、变量信息以及代码行信息。
一些可选的实施方式中,所述根据所述常量信息,从所述源代码中识别第一代码,包括:
根据所述常量信息,获取所述源代码中各个常量的出现次数;
根据出现次数超过预设次数的常量,确定第一代码。
一些可选的实施方式中,所述根据所述变量信息,从所述源代码中识别第二代码,包括:
根据所述变量信息,获取所述源代码中的被标记变量以及所述被标记变量对应的标签,所述被标记变量表示基于预设规则添加有标签的变量;
若所述被标记变量对应的标签中包括指定标签,将所述被标记变量确定为高频变量;
若所述高频变量的数量超过预设数量,则根据所述高频变量确定第二代码。
一些可选的实施方式中,所述指定标签包括第一标签和第二标签;所述确定所述源代码对应的变量信息,包括:
从所述源代码中识别出取值语句和赋值语句;
将所述取值语句中包括的变量确定为第一变量,并为所述第一变量添加第一标签;
将所述赋值语句中包括的变量确定为第二变量,并为所述第二变量添加第二标签;
将所述第一变量和所述第二变量加入所述源代码对应的变量信息。
一些可选的实施方式中,所述代码行信息包括所述源代码中每个代码行对应的元信息和排序信息,所述排序信息用于表示所述代码行的排列顺序;所述根据所述代码行信息,从所述源代码中识别满足封装条件的代码块,包括:
根据所述元信息,对所述源代码中所有代码行进行两两匹配,得到匹配结果;
根据所述排序信息和所述匹配结果,获取匹配成功的第一代码行和第二代码行,所述第一代码行和所述第二代码行满足:连续排列在所述第一代码行之前的代码行与连续排列在所述第二代码行之前的代码行未匹配成功;
若根据所述排序信息和所述匹配结果,判定连续排列在所述第一代码行之后的N个代码行与连续排列在所述第二代码行之后的N个代码行均匹配成功,则根据所述第一代码行以及连续排列在所述第一代码行之后的N个代码行,生成满足封装条件的代码块,N为正整数。
一些可选的实施方式中,所述将所述代码块封装为目标对象,包括:
若所述代码块中包括的代码行的数量超过指定行数,获取所述代码块中包括的变量和执行代码;
以所述代码块中包括的变量为入参,并结合所述执行代码,将所述代码块封装为目标对象。
为实现上述目的,本申请实施例还提出了一种代码转换装置,所述装置包括:
获取模块,用于获取待转换的源代码;
确定模块,用于确定所述源代码对应的常量信息、变量信息以及代码行信息;
第一识别模块,用于根据所述常量信息,从所述源代码中识别第一代码;
第二识别模块,用于根据所述变量信息,从所述源代码中识别第二代码;
第三识别模块,用于根据所述代码行信息,从所述源代码中识别满足封装条件的代码块;
封装模块,用于将所述代码块封装为目标对象,并获得所述代码块与所述目标对象的绑定信息;
转换模块,用于在对所述源代码进行转换的过程中,将所述第一代码转换为类静态变量,将所述第二代码转换为实体类,以及根据所述绑定信息调用所述目标对象。
为实现上述目的,本申请实施例还提出了一种电子设备,所述电子设备包括存储器和处理器,所述存储器上存储有程序,所述程序被所述处理器执行时实现前述方法的步骤。
为实现上述目的,本申请提供了一种存储介质,用于计算机可读存储,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述方法的步骤。
本申请提出的代码转换方法及装置、电子设备、存储介质,通过确定源代码的常量信息、变量信息以及代码行信息,可以根据常量信息识别出第一代码、根据变量信息识别出第二代码以及根据代码行信息识别满足封装条件的代码块,便于确定在代码转换中进行常量降重优化、变量内聚以及代码块封装的代码对象,还可以将根据代码块封装的目标对象与代码块绑定,便于直接调用相关对象。基于此,在对源代码进行转换的过程中,将第一代码转换为类静态变量、将第二代码转换为实体类,以及根据绑定信息调用目标对象,能够满足面对对象语言的编程风格,既提高了代码转换的可读性,降低代码重复率,有利于优化代码结构,又改善了代码转换后的可维护性。此外,还能够减少代码转换时的人为介入,避免了人为修改代码所引入的低级失误,既降低了人力成本,又改善了转化代码的质量,避免简单生硬的转化操作,进而改善代码转换效率。
附图说明
图1是本申请实施例所应用的一种电子设备的结构框图;
图2是本申请实施例提供的一种代码转换方法的流程示意图;
图3是本申请实施例中一种源代码的示意图;
图4是图2中步骤S230的一种具体流程示意图;
图5是图2中步骤S240的一种具体流程示意图;
图6是本申请实施例中一种代码块转换为目标对象的应用示意图;
图7是本申请实施例中一种高频变量转换为实体类的应用示意图;
图8是本申请实施例所应用的一种代码转换装置的结构框图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本申请的说明,其本身没有特有的意义。因此,“模块”、“部件”或“单元”可以混合地使用。
人为编写的代码中,通常会存在重复性代码,比如在一个方法中反复使用相同常量等,如果将这些重复性代码逐行直译成面对对象语言的程序代码,虽然可以保障语句准确性,却对后续开发维护带来较大不便。因此,现有方式中,开发人员会对初步转换后的代码进行人为优化,以降低代码重复率,但这种方式增加了人力成本,亦不利于提高整体的代码转换效率。
为了解决上述问题,本申请提供一种代码转换方法,应用于一种电子设备。参照图1所示,图1是本申请实施例所应用的一种电子设备的结构框图。
在本申请实施例中,电子设备可以是服务器、智能手机、平板电脑、便携计算机、桌上型计算机等具有运算功能的终端设备。
该电子设备包括:存储器11、处理器12、网络接口13及数据总线14。
存储器11包括至少一种类型的可读存储介质,至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器等的非易失性存储介质。在一些实施例中,可读存储介质可以是电子设备的内部存储单元,例如该电子设备的硬盘。在另一些实施例中,可读存储介质也可以是电子设备的外部存储器,例如电子设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
在本实施例中,存储器11的可读存储介质通常用于存储安装于电子设备的代码转换程序、多种样本集及预先训练好的模型等。存储器11还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行代码转换程序等。
网络接口13可选地可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该电子设备与其他电子设备之间建立通信连接。
数据总线14用于实现这些组件之间的连接通信。
图1仅示出了具有组件11-14的电子设备,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选的,该电子设备还可以包括用户接口,用户接口可以包括输入单元比如键盘(Keyboard)、语音输入装置比如麦克风(microphone)等具有语音识别功能的设备、语音输出装置比如音响、耳机等,可选地用户接口还可以包括标准的有线接口、无线接口。
可选的,该电子设备还可以包括显示器,显示器也可以称为显示屏或显示单元。在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。显示器用于显示在电子设备中处理的信息以及用于显示可视化的用户界面。
可选的,该电子设备还包括触摸传感器。触摸传感器所提供的供用户进行触摸操作的区域称为触控区域。此外,这里的触摸传感器可以为电阻式触摸传感器、电容式触摸传感器等。而且,触摸传感器不仅包括接触式的触摸传感器,也可包括接近式的触摸传感器等。此外,触摸传感器可以为单个传感器,也可以为例如阵列布置的多个传感器。
此外,该电子设备的显示器的面积可以与触摸传感器的面积相同,也可以不同。可选地,将显示器与触摸传感器层叠设置,以形成触摸显示屏。该装置基于触摸显示屏侦测用户触发的触控操作。
下面对本申请实施例公开的一种代码转换方法进行具体说明。
如图2所示,图2是本申请实施例提供的一种代码转换方法的流程示意图。基于图1所示的电子设备,处理器12执行存储器11中存储的程序时实现如下步骤S200至步骤S260。
步骤S200:获取待转换的源代码。
可以理解,源代码是按照一定的程序设计语言编写的计算机语言指令,用于编译出计算机程序。在本申请实施例中,上述程序设计语言可以是任意面对过程的编程语言,面对过程的编程语言包括C语言和PLSQL语言等,对此不做具体限定。
步骤S210:确定源代码对应的常量信息、变量信息以及代码行信息。
在本申请实施例中,源代码可以包括多个代码行,这些代码行中包括常量、变量以及执行代码等。常量表示不被程序修改的量,比如整型常量、实型常量和字符常量等,变量表示能储存计算结果或表示值的抽象概念。常量信息是按照预设的常量分析规则对源代码中的常量进行分析后得到,变量信息是按照预设的变量分析规则对源代码中的变量进行分析后得到,而代码行信息是按照设的代码行分析规则对源代码中的代码行进行分析后得到,常量分析规则、变量分析规则和代码行分析规则均可根据实际需要进行调整。其中,常量信息、变量信息以及代码行信息均可以采用列表、元组或键值对等存储格式,不做具体限定。
具体的,步骤S210中,通过对源代码进行逐行遍历,在遍历过程中确定源代码对应的常量信息、变量信息以及代码行信息。
一种可选的实施方式中,确定源代码对应的常量信息,具体包括以下步骤:当遍历到源代码中任一常量时,对该常量的出现次数累计加一,直至遍历完成时,获得每个常量最终对应的出现次数。可选的,可以构建常数变量器,在遍历不同源代码时,通过常数变量器统计源代码的常量信息,也便于在遍历完成之后进行清零处理。
一种可选的实施方式中,确定源代码对应的变量信息,具体包括以下步骤:当遍历到源代码中任一变量时,分析变量对应的执行语句,并根据执行语句的语句类型为变量添加相应标签,得到被标记变量,从而将被标记变量及其标签加入变量信息。其中,语句类型包括但不限于赋值语句、取值语句和查询语句等,比如,赋值语句是采用set函数的代码行,取值语句是采用get函数的代码行。
示例性的,请参阅图3,图3是本申请实施例中一种源代码的示意图。如图3所示,可以从源代码中识别出:常量“XX分行”和“1”(以圆框标记);变量“v_card_no”、“v_phone”、“v_valid_date”、“v_id_card”、“v_valid_date”以及“v_pol_no”(以实线方框标记)。基于图3,如下表1所示,常量信息记录了常量“XX分行”的出现次数为2,常量“1”的出现次数为1。如下表2所示,变量信息记录了上述变量及每个变量对应的标签。
表1常量信息示意表
常量 | 出现次数 |
XX分行 | 2 |
1 | 1 |
表2变量信息示意表
一种可选的实施方式中,确定源代码对应的代码行信息,具体包括以下步骤:当遍历到每一个代码行时,生成该代码行对应的元信息,并确定该代码行的排序信息,从而将元信息和排序信息加入代码行信息中。
其中,元信息包括但不限于根据代码行生成的识别码以及代码行对应的执行代码。执行代码可以包括常量或变量中至少一项。生成识别码的方式具体为:对代码行进行加密处理,得到识别码,加密处理的算法包括但不限于MD5信息摘要算法(MD5 Message-Digest Algorithm)。
其中,排序信息用于表示代码行在源代码中的排列顺序,比如第一行、第二行或第三行等。
可见,通过步骤S210,可以从源代码中提取出关键的常量、变量及代码行信息。
一些可选的实施方式中,步骤S210还可以包括以下步骤:
对源代码进行语法解析,得到源代码的语法树。根据语法树进行遍历,生成常量信息、变量信息以及代码行信息。其中,语法树,具体可以为抽象语法树(Abstract SyntaxCode,AST),是对源代码语法结构的图形表示。实际应用中,利用Antlr4技术、Bison语法分析器或其他多种语法分析器,可以将源代码解析成语法树。
相应的,还可以根据语法树进行转换,得到目标代码,从而保证代码转换的语义正确性,并在此基础上实现代码结构的优化。
步骤S220:根据常量信息,从源代码中识别第一代码。
一种可选的实施方式中,步骤S220具体可以包括:根据常量信息,获取源代码中各个常量的出现次数。根据出现次数超过预设次数的常量,确定第一代码。其中,预设次数可以是人为指定和调整,比如预设次数为5、10或15等,对此不做具体限定。可见,为了避免为同一常量分配不同内存空间,预先识别出现次数超过预设次数的常量,便于在后续转换中将该常量设置为静态常量,实现常量降重优化。
步骤S230:根据变量信息,从源代码中识别第二代码。
一种可选的实施方式中,请参阅图4,图4是图2中步骤S230的一种具体流程示意图。如图4所示,步骤S230具体可以包括以下步骤S231至S233。
步骤S231:根据变量信息,获取源代码中的被标记变量以及被标记变量对应的标签,被标记变量表示基于预设规则添加有标签的变量。
步骤S232:若被标记变量对应的标签中包括指定标签,将被标记变量确定为高频变量。
步骤S233:若高频变量的数量超过预设数量,则根据高频变量确定第二代码。
其中,指定标签和预设数量均可以由人为设定和调整,亦不做限定。可见,预先识别高频出现且符合指定类型的变量,能够确定公用的实例化对象。
进一步的,一些实现方式中,指定标签包括第一标签和第二标签,第一标签用于标识读场景下的变量,第二标签用于标识写场景下的变量。相应的,确定源代码对应的变量信息,具体为:
从源代码中识别出取值语句和变量语句,再将取值语句中包括的变量确定为第一变量,并为第一变量添加第一标签。以及,将赋值语句中包括的变量确定为第二变量,并为第二变量添加第二标签。最后,将第一变量和第二变量加入源代码对应的变量信息。
以表2和图3为例进行说明。如图3所示,在赋值语句“select card_no,phone,valid_date into v_card_no,v_phone,v_valid_date from bank_card_info”中,为变量“v_card_no”、“v_phone”和“v_valid_date”添加第二标签,并在取值语句“where id_card=v_id_card and band=‘XX分行’and rownum<=1”中,为变量“v_id_card”添加第一标签。在赋值语句“select valid_date,pol_no into v_valid_date,v_pol_no from pol_info”中,为变量“v_valid_date”和“v_pol_no”添加第二标签,并在取值语句“where id_card=v_id_card and bank=‘XX分行’and phone=v_phone and card_no=v_card_no”中,为变量“v_id_card”、“v_phone”和“v_card_no”添加第一标签。在取值语句“return v_pol_no”中,为变量“v_pol_no”添加第一标签,最终得到如表2所示的变量信息。
步骤S240:根据代码行信息,从源代码中识别满足封装条件的代码块。
一种可选的实施方式中,请参阅图5,图5是图2中步骤S240的一种具体流程示意图。如图5所示,若代码行信息包括源代码中每个代码行对应的元信息和排序信息,步骤S240具体包括以下步骤S241至步骤S243。
步骤S241:根据元信息,对源代码中所有代码行进行两两匹配,得到匹配结果。
在本申请实施例中,匹配结果可以包括所有进行匹配的代码行对应的匹配情况,匹配情况包括匹配成功或者匹配未成功。
一种实现方式中,可以根据识别码,对源代码中所有代码行进行两两匹配,若任意两个代码行的识别码相匹配,则判定这两个代码行匹配成功,否则,判定匹配失败。
另一种实现方式中,可以根据执行代码,对源代码中所有代码行进行两两匹配,若任意两个代码行的执行代码相匹配,则判定这两个代码行匹配成功,否则,判定匹配失败。
又一种实现方式中,还可以同时根据识别码和执行代码,对源代码中所有代码行进行两两匹配,若任意两个代码行的识别码和执行代码均相匹配,则判定这两个代码行匹配成功,否则,判定匹配失败。
具体的,上述代码行的匹配方式包括但不限于暴力匹配算法、Knuth-Morris-Pratt算法以及Boyer-Moore算法等字符匹配算法。
步骤S242:根据排序信息和匹配结果,获取匹配成功的第一代码行和第二代码行。
具体的,第一代码行和第二代码行满足:连续排列在第一代码行之前的代码行与连续排列在第二代码行之前的代码行未匹配成功。
步骤S243:若根据排序信息和匹配结果,判定连续排列在第一代码行之后的N个代码行与连续排列在第二代码行之后的N个代码行均匹配成功,则根据第一代码行以及连续排列在第一代码行之后的N个代码行,生成满足封装条件的代码块。
其中,N为正整数。示例性的,仍以图3为例进行说明,可知第11个代码行与第17个代码行均为“if v_valid_date<sysdate then”,两者匹配成功,故可以取第11个代码行作为第一代码行,并取第17个代码行作为第二代码行。将排列在第一代码行之后的第一个代码行(即12个代码行)与排列在第二代码行之后的第一个代码行(即第18个代码行)进行匹配,可知第12个代码行与第18个代码行匹配成功,再将排列在第一代码行之后的第二个代码行(即13个代码行)与排列在第二代码行之后的第二个代码行(即第19个代码行)进行匹配,以此类推,直至出现未匹配成功的代码行,最终生成如图3中虚线方框所示的代码块,便于代码封装,减少重复代码。
步骤S250:将代码块封装为目标对象,并获得代码块与目标对象的绑定信息。
在本申请实施例中,目标对象表示定义在类中的独立代码块,用于实现特定功能,提高代码的复用性,比如,目标对象为JAVA函数。
一种可选的实施方式中,将代码块封装为目标对象,具体包括以下步骤:
若代码块中包括的代码行的数量超过指定行数,获取代码块中包括的变量和执行代码。以代码块中包括的变量为入参,并结合执行代码,将代码块封装为目标对象。其中,指定行数可以由人为执行或调整,比如10行,不做限定。当代码块的代码行数超过指定行数时对代码块进行封装,能够进一步改善代码复用的有效性。
示例性的,以图3所示的代码块为例进行说明,该代码块中包括变量“v_valid_date”以及执行语句“if v_valid_date<sysdate raise_application_error(-20001L,"date is invalid")”,基于此,可以生成如图6所示的目标对象。可见,将变量“v_valid_date”转换为入参“vValidDate”,而将执行代码转换为符合预设代码结构的执行语句,比如,将比较语句“if v_valid_date<sysdate”转换为LT指令形式“vValidDate.lt(SqlFun.sysdate())”。
步骤S260:在对源代码进行转换的过程中,将第一代码转换为类静态变量,将第二代码转换为实体类,以及根据绑定信息调用目标对象。
在本申请实施例中,步骤S230之后,可以以第二代码为属性字段,并结合预设的操作信息,生成实体类,比如数据传输对象(Data Transfer Object,DTO)。其中,操作信息可以包括但不限于读方法(比如get方法)和写方法(比如set方法),读方法用于读取变量的取值,写方法用于修改变量的取值。示例性的,将图3所示的所有第二代码封装为图7所示的实体类,以第二代码“v_phone”为例,可以在实体类中为变量“v_phone”构建并定义属性字段“vPhone”,并为属性字段“vPhone”添加相应的get方法和set方法。
一些可选的实施方式中,可以通过遍历源代码中的代码行,对每个代码行依次进行代码转换。在此过程中:
当遍历到第一代码时,将第一代码转换为相应的类静态变量,比如,将图3所示的第一代码“深圳分行”转换为:private static final String BANK_CARD_INFO_CONSTANT="深圳分行"。
当遍历到第二代码时,直接根据实体类调用第二代码对应的操作信息,实现对第二代码的操作处理。比如,调用读方法对第二代码进行读处理,或者调用写方法对第二代码进行写处理。
当遍历到绑定信息对应的代码行时,则根据绑定信息调用目标对象,比如,当遍历到变量“v_valid_date”时,调用图6所示的目标对象。
可见,实施上述方法实施例,能够满足面对对象语言的编程风格,既提高了代码转换的可读性,降低代码重复率,有利于优化代码结构,又改善了代码转换后的可维护性。此外,还能够减少代码转换时的人为介入,避免了人为修改代码所引入的低级失误,既降低了人力成本,又改善了转化代码的质量,避免简单生硬的转化操作,进而改善代码转换效率。
本申请实施例还提供一种代码转换装置。请参阅图8,图8是本申请实施例所应用的一种代码转换装置的结构框图。如图8所示,该代码转换装置800包括获取模块810、确定模块820、第一识别模块830、第二识别模840、第三识别模块850、封装模块860以及转换模块870,其中:
获取模块810,用于获取待转换的源代码;
确定模块820,用于确定源代码对应的常量信息、变量信息以及代码行信息;
第一识别模块830,用于根据常量信息,从源代码中识别第一代码;
第二识别模块840,用于根据变量信息,从源代码中识别第二代码;
第三识别模块850,用于根据代码行信息,从源代码中识别满足封装条件的代码块;
封装模块860,用于将代码块封装为目标对象,并获得代码块与目标对象的绑定信息;
转换模块870,用于在对源代码进行转换的过程中,将第一代码转换为类静态变量,将第二代码转换为实体类,以及根据绑定信息调用目标对象。
一些可选的实施方式中,确定模块820,还用于对源代码进行语法解析,得到源代码的语法树;根据语法树进行遍历,生成常量信息、变量信息以及代码行信息。
一些可选的实施方式中,第一识别模块830,还用于根据常量信息,获取源代码中各个常量的出现次数;根据出现次数超过预设次数的常量,确定第一代码。
一些可选的实施方式中,第二识别模块840,还用于根据变量信息,获取源代码中的被标记变量以及被标记变量对应的标签,被标记变量表示基于预设规则添加有标签的变量;若被标记变量对应的标签中包括指定标签,将被标记变量确定为高频变量;若高频变量的数量超过预设数量,则根据高频变量确定第二代码。
一些可选的实施方式中,指定标签包括第一标签和第二标签。确定模块820,还用于从源代码中识别出取值语句和赋值语句;将取值语句中包括的变量确定为第一变量,并为第一变量添加第一标签;将赋值语句中包括的变量确定为第二变量,并为第二变量添加第二标签;将第一变量和第二变量加入源代码对应的变量信息。
一些可选的实施方式中,代码行信息包括源代码中每个代码行对应的元信息和排序信息,排序信息用于表示代码行的排列顺序。第三识别模块850具体包括匹配单元、获取单元和生成单元,其中:
匹配单元,用于根据元信息,对源代码中所有代码行进行两两匹配,得到匹配结果;
获取单元,用于根据排序信息和匹配结果,获取匹配成功的第一代码行和第二代码行,第一代码行和第二代码行满足:连续排列在第一代码行之前的代码行与连续排列在第二代码行之前的代码行未匹配成功;
生成单元,用于在根据排序信息和匹配结果,判定连续排列在第一代码行之后的N个代码行与连续排列在第二代码行之后的N个代码行均匹配成功时,则根据第一代码行以及连续排列在第一代码行之后的N个代码行,生成满足封装条件的代码块,N为正整数。
一些可选的实施方式中,封装模块870,具体用于在代码块中包括的代码行的数量超过指定行数时,获取代码块中包括的变量和执行代码;以代码块中包括的变量为入参,并结合执行代码,将代码块封装为目标对象。
需要说明的是,本实施例的具体实现过程可参见上述方法实施例的具体实现过程,亦不再赘述。
本申请实施例还提供了一种电子设备,该电子设备包括存储器和处理器,存储器上存储有程序,程序被处理器执行时实现上述代码转换方法。
本申请实施例还提供了一种存储介质,用于计算机可读存储,存储介质存储有一个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现上述代码转换方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上参照附图说明了本申请的优选实施例,并非因此局限本申请的权利范围。本领域技术人员不脱离本申请的范围和实质内所作的任何修改、等同替换和改进,均应在本申请的权利范围之内。
Claims (10)
1.一种代码转换方法,其特征在于,所述方法包括:
获取待转换的源代码,并确定所述源代码对应的常量信息、变量信息以及代码行信息;
根据所述常量信息,从所述源代码中识别第一代码;
根据所述变量信息,从所述源代码中识别第二代码;
根据所述代码行信息,从所述源代码中识别满足封装条件的代码块;
将所述代码块封装为目标对象,并获得所述代码块与所述目标对象的绑定信息;
在对所述源代码进行转换的过程中,将所述第一代码转换为类静态变量,将所述第二代码转换为实体类,以及根据所述绑定信息调用所述目标对象。
2.根据权利要求1所述的方法,其特征于,所述确定所述源代码对应的常量信息、变量信息以及代码行信息,包括:
对所述源代码进行语法解析,得到所述源代码的语法树;
根据所述语法树进行遍历,生成常量信息、变量信息以及代码行信息。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述常量信息,从所述源代码中识别第一代码,包括:
根据所述常量信息,获取所述源代码中各个常量的出现次数;
根据出现次数超过预设次数的常量,确定第一代码。
4.根据权利要求1或2所述的方法,其特征在于,所述根据所述变量信息,从所述源代码中识别第二代码,包括:
根据所述变量信息,获取所述源代码中的被标记变量以及所述被标记变量对应的标签,所述被标记变量表示基于预设规则添加有标签的变量;
若所述被标记变量对应的标签中包括指定标签,将所述被标记变量确定为高频变量;
若所述高频变量的数量超过预设数量,则根据所述高频变量确定第二代码。
5.根据权利要求4所述的方法,其特征在于,所述指定标签包括第一标签和第二标签;所述确定所述源代码对应的变量信息,包括:
从所述源代码中识别出取值语句和赋值语句;
将所述取值语句中包括的变量确定为第一变量,并为所述第一变量添加第一标签;
将所述赋值语句中包括的变量确定为第二变量,并为所述第二变量添加第二标签;
将所述第一变量和所述第二变量加入所述源代码对应的变量信息。
6.根据权利要求1或2所述的方法,其特征在于,所述代码行信息包括所述源代码中每个代码行对应的元信息和排序信息,所述排序信息用于表示所述代码行的排列顺序;所述根据所述代码行信息,从所述源代码中识别满足封装条件的代码块,包括:
根据所述元信息,对所述源代码中所有代码行进行两两匹配,得到匹配结果;
根据所述排序信息和所述匹配结果,获取匹配成功的第一代码行和第二代码行,所述第一代码行和所述第二代码行满足:连续排列在所述第一代码行之前的代码行与连续排列在所述第二代码行之前的代码行未匹配成功;
若根据所述排序信息和所述匹配结果,判定连续排列在所述第一代码行之后的N个代码行与连续排列在所述第二代码行之后的N个代码行均匹配成功,则根据所述第一代码行以及连续排列在所述第一代码行之后的N个代码行,生成满足封装条件的代码块,N为正整数。
7.根据权利要求1或2所述的方法,其特征在于,所述将所述代码块封装为目标对象,包括:
若所述代码块中包括的代码行的数量超过指定行数,获取所述代码块中包括的变量和执行代码;
以所述代码块中包括的变量为入参,并结合所述执行代码,将所述代码块封装为目标对象。
8.一种代码转换装置,其特征在于,所述装置包括:
获取模块,用于获取待转换的源代码;
确定模块,用于确定所述源代码对应的常量信息、变量信息以及代码行信息;
第一识别模块,用于根据所述常量信息,从所述源代码中识别第一代码;
第二识别模块,用于根据所述变量信息,从所述源代码中识别第二代码;
第三识别模块,用于根据所述代码行信息,从所述源代码中识别满足封装条件的代码块;
封装模块,用于将所述代码块封装为目标对象,并获得所述代码块与所述目标对象的绑定信息;
转换模块,用于在对所述源代码进行转换的过程中,将所述第一代码转换为类静态变量,将所述第二代码转换为实体类,以及根据所述绑定信息调用所述目标对象。
9.一种电子设备,其特征在于,所述电子设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的程序以及用于实现所述处理器和所述存储器之间的连接通信的数据总线,所述程序被所述处理器执行时实现如权利要求1至7任一项所述的代码转换方法。
10.一种存储介质,用于计算机可读存储,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1至7任一项所述的代码转换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210439644.5A CN114816421A (zh) | 2022-04-25 | 2022-04-25 | 代码转换方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210439644.5A CN114816421A (zh) | 2022-04-25 | 2022-04-25 | 代码转换方法及装置、电子设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114816421A true CN114816421A (zh) | 2022-07-29 |
Family
ID=82508405
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210439644.5A Pending CN114816421A (zh) | 2022-04-25 | 2022-04-25 | 代码转换方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114816421A (zh) |
-
2022
- 2022-04-25 CN CN202210439644.5A patent/CN114816421A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11544623B2 (en) | Consistent filtering of machine learning data | |
US12073298B2 (en) | Machine learning service | |
US11100420B2 (en) | Input processing for machine learning | |
US10339465B2 (en) | Optimized decision tree based models | |
US10318882B2 (en) | Optimized training of linear machine learning models | |
US11048715B1 (en) | Automated file acquisition, identification, extraction and transformation | |
US20150379423A1 (en) | Feature processing recipes for machine learning | |
AU2021346779B2 (en) | Systems and methods for triaging software vulnerabilities | |
CN110597814B (zh) | 结构化数据的序列化、反序列化方法以及装置 | |
US10956659B1 (en) | System for generating templates from webpages | |
CN111694613A (zh) | 应用程序模块间的解耦方法、电子装置及存储介质 | |
CN111240772B (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
CN117874002A (zh) | 一种用于异构数据迁移的方法及系统 | |
CN113902574A (zh) | 协议数据处理方法、装置、计算机设备及存储介质 | |
US20240095218A1 (en) | Customizable deliminated text compression framework | |
CN113434734A (zh) | 一种生成文件、读取文件的方法、装置、设备及存储介质 | |
CN111324645B (zh) | 区块链的数据处理方法及装置 | |
CN114816421A (zh) | 代码转换方法及装置、电子设备、存储介质 | |
CN111580799A (zh) | 领域特定语言脚本拼装方法及系统 | |
CN114003317B (zh) | 内联实现方法及装置、电子设备、存储介质及程序产品 | |
US11909858B1 (en) | System and method for generating and performing a smart contract | |
CN112035890B (zh) | 一种数据完整性验证方法及装置 | |
CN116401676A (zh) | 数据漏洞的自动检测方法、装置、电子设备及存储介质 | |
CN114998038A (zh) | 异常保单处理方法及系统 | |
CN114625755A (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 |