CN106970820A - 代码存储方法及代码存储装置 - Google Patents
代码存储方法及代码存储装置 Download PDFInfo
- Publication number
- CN106970820A CN106970820A CN201710282808.7A CN201710282808A CN106970820A CN 106970820 A CN106970820 A CN 106970820A CN 201710282808 A CN201710282808 A CN 201710282808A CN 106970820 A CN106970820 A CN 106970820A
- Authority
- CN
- China
- Prior art keywords
- information
- code
- function
- call function
- kinematic
- 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.)
- Granted
Links
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
- G06F8/427—Parsing
-
- 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
Abstract
本发明提供一种代码存储方法,其包括获取文件代码,并对文件代码进行语法解析,以获取文件代码的抽象语法树;获取抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;使用第一预设规则将动态函数信息转化为动态函数标识码,并使用第二预设规则将调用函数信息转化为调用函数标识码;将动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;对文件代码以及对应的抽象语法树的节点标识信息进行存储操作。本发明还提供一种代码存储装置,本发明通过将文件代码与对应的抽象语法树的节点标识信息同时进行存储操作,避免了文件代码解析调整中,函数调用关系链断裂的现象,从而提高了代码解析效率。
Description
技术领域
本发明涉及互联网领域,特别是涉及一种代码存储方法及代码存储装置。
背景技术
随着科技的发展,人们对各种互联网应用的要求越来越高,因此开发工程师需要对文件代码经常进行解析调整。开发工程师对现有的文件代码进行解析调整时,会先将文件代码进行存储,然后对文件代码进行解析。
在代码解析过程中,当对代码中的动态函数进行调用时,往往需要调用该动态函数中的调用函数。由于现有的代码存储方法并不会对动态函数的调用函数进行任何调用信息说明。因此开发工程师对代码进行解析时,可能会出现实际调用关系缺失的情况。
具体如图1所示,图1为现有代码中的动态函数对应的调用函数的语法特性图。其中动态函数中可包括调用函数a和调用函数b,而调用函数a包括子函数a1、子函数a2以及子函数a3。当动态函数使用调用函数a的接口时,可能实际是调用该调用函数a的某个子函数的接口来实现的。
而工程师对该代码进行解析时,由于存储代码中不会对调用函数进行任何调用信息说明,工程师只知道该动态函数使用了该调用函数的接口,并不清楚使用了该调用函数的哪个子函数的接口,如该调用函数包括多个子函数,如工程师仅根据调用函数的当前子函数的功能对该调用函数进行变更,可能会导致该调用函数的其他子函数的调用关系缺失,从而造成函数调用关系链的断裂。
如工程师使用调用函数a的子函数a3的接口时,对调用函数进行变更,使用调用函数c代替了调用函数a,由于工程师此时并不知道调用函数a还具有子函数a1和子函数a2的功能,因此在使用调用函数c代替了调用函数a的过程中,可能会导致子函数a1和子函数a2的调用关系缺失。
发明内容
本发明实施例提供一种可以提高代码解析效率、避免函数调用关系链断裂的代码存储方法及代码存储装置;以解决现有的代码存储方法及代码存储装置中由于调用函数的其他子函数的调用关系缺失,造成函数调用关系链断裂,进而使得代码解析效率较低的技术问题。
本发明实施例提供一种代码存储方法,其包括:
获取文件代码,并对所述文件代码进行语法解析,以获取所述文件代码的抽象语法树;
获取所述抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;其中所述动态函数信息包括包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息;所述调用函数信息包括调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息;
使用第一预设规则将所述动态函数信息转化为动态函数标识码,并使用第二预设规则将所述调用函数信息转化为调用函数标识码;
将所述动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;以及
对所述文件代码以及对应的抽象语法树的节点标识信息进行存储操作。
本发明还提供一种代码存储装置,其包括:
代码解析模块,用于获取文件代码,并对所述文件代码进行语法解析,以获取所述文件代码的抽象语法树;
函数信息获取模块,用于获取所述抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;其中所述动态函数信息包括包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息;所述调用函数信息包括调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息;
标识码转化模块,用于使用第一预设规则将所述动态函数信息转化为动态函数标识码,并使用第二预设规则将所述调用函数信息转化为调用函数标识码;
封装模块,用于将所述动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;以及
存储模块,用于对所述文件代码以及对应的抽象语法树的节点标识信息进行存储操作。
相较于现有技术,本发明的代码存储方法及代码存储装置通过将文件代码与对应的抽象语法树的节点标识信息同时进行存储操作,避免了文件代码解析调整中,函数调用关系链断裂的现象,从而提高了代码解析效率;解决了现有的代码存储方法及代码存储装置中由于调用函数的其他子函数的调用关系缺失,造成函数调用关系链断裂,进而使得代码解析效率较低的技术问题。
附图说明
图1为本发明的代码存储方法的第一优选实施例的流程图;
图2为本发明的代码存储方法的第二优选实施例的流程图;
图3为本发明的代码存储方法的第二优选实施例的步骤S201的流程图;
图4为本发明的代码存储装置的第一优选实施例的结构示意图;
图5为本发明的代码存储装置的第二优选实施例的结构示意图;
图6为本发明的代码存储装置的第二优选实施例的代码解析模块的结构示意图;
图7为本发明的代码存储装置的第二优选实施例的标识码转化模块的结构示意图;
图8为本发明的代码存储装置的第二优选实施例的标识码转化模块的调用函数标识码转化单元的结构示意图;
图9为本发明的代码存储方法及代码存储装置的具体实施例的流程图;
图10为本发明的代码存储装置所在的电子设备的工作环境结构示意图。
具体实施方式
请参照图式,其中相同的组件符号代表相同的组件,本发明的原理是以实施在一适当的运算环境中来举例说明。以下的说明是基于所例示的本发明具体实施例,其不应被视为限制本发明未在此详述的其它具体实施例。
在以下的说明中,本发明的具体实施例将参考由一部或多部计算机所执行之作业的步骤及符号来说明,除非另有述明。因此,其将可了解到这些步骤及操作,其中有数次提到为由计算机执行,包括了由代表了以一结构化型式中的数据之电子信号的计算机处理单元所操纵。此操纵转换该数据或将其维持在该计算机之内存系统中的位置处,其可重新配置或另外以本领域技术人员所熟知的方式来改变该计算机之运作。该数据所维持的数据结构为该内存之实体位置,其具有由该数据格式所定义的特定特性。但是,本发明原理以上述文字来说明,其并不代表为一种限制,本领域技术人员将可了解到以下所述的多种步骤及操作亦可实施在硬件当中。
本发明的代码存储方法及代码存储装置可设置在各种进行文件代码预处理操作的电子设备中,用于对文件代码进行转化、存储等预处理操作。该电子设备包括但不限于可穿戴设备、头戴设备、医疗健康平台、个人计算机、服务器计算机、手持式或膝上型设备、移动设备(比如移动电话、个人数字助理(PDA)、媒体播放器等等)、多处理器系统、消费型电子设备、小型计算机、大型计算机、包括上述任意系统或设备的分布式计算环境,等等。该电子设备优选为对文件代码进行转化及存储操作的代码处理终端。本发明的代码存储方法及装置通过将文件代码与对应的抽象语法树的节点标识信息同时进行存储操作,避免了文件代码解析调整中,函数调用关系链断裂的现象,从而提高了代码解析效率;有效的解决了现有的代码存储方法及代码存储装置中由于调用函数的其他子函数的调用关系缺失,造成函数调用关系链断裂,进而使得代码解析效率较低的技术问题。
请参照图1,图1为本发明的代码存储方法的第一优选实施例的流程图。本优选实施例的代码存储方法可使用上述的电子设备进行实施,用于对文件代码进行转化、存储等预处理操作。本优选实施例的代码存储方法包括:
步骤S101,获取文件代码,并对文件代码进行语法解析,以获取文件代码的抽象语法树;
步骤S102,获取抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;
步骤S103,使用第一预设规则将动态函数信息转化为动态函数标识码,并使用第二预设规则将调用函数信息转化为调用函数标识码;
步骤S104,将动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;
步骤S105,对文件代码以及对应的抽象语法树的节点标识信息进行存储操作。
下面详细说明本优选实施例的代码存储方法的各步骤的具体流程。
在步骤S101中,代码存储装置可通过遍历文件代码项目路径等方法来获取文件代码。
随后代码存储装置对获取的文件代码进行语法解析,这里可使用开源工具javacc、antrl、astparser以及eclipse开源框架jdt等编译解析工具对文件代码进行语法解析,从而获取文件代码的抽象语法树(AST,abstract syntax tree)。
这里的抽象语法树由机器可读的树形节点构成的数据结构树。其中抽象语法树的每个树形节点均为符合语法规则的动态函数。随后转到步骤S102。
在步骤S102中,代码存储装置可通过访问者模式对步骤S101获取的抽象语法树的每个节点的动态函数进行数据提取,从而提取动态函数的动态函数信息以及动态函数的调用函数信息。在java的访问者设计模式下,用户可以在不改变各元素类的前提下定义作用于这些元素类的新操作。
这里的动态函数信息包括动态函数的包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息。当然这里动态函数信息还可包括动态函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。
这里的调用函数信息包括动态函数中的调用函数的调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息。当然这里的调用函数信息还可包括调用函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及调用函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。
如动态函数A在执行代码中可包括执行调用函数B和调用函数C的代码。同时调用函数B同时为子函数B1和子函数B2的父函数,动态函数A可通过执行子函数B1或子函数B2实现对调用函数B的调用操作。随后转到步骤S103。
在步骤S103中,代码存储装置使用第一预设规则,将步骤S102获取的动态函数信息转化为具有唯一性的动态函数标识码。如使用第一非可逆加密算法(如哈希(hash)算法等)将不定长明文的动态函数信息转化为定长的具有唯一性的动态函数标识码。
同时代码存储装置使用第二预设规则,将步骤S102获取的调用函数信息转化为具有唯一性的调用函数标识码。如使用第二非可逆加密算法(如哈希(hash)算法等)将不定长明文的调用函数信息转化为定长的具有唯一性的调用函数标识码。随后转到步骤S104。
在步骤S104中,代码存储装置将步骤S103获取的动态函数标识码、动态函数对应的所有调用函数的调用函数标识码;以及步骤S102获取的动态函数信息封装为一节点标识信息。该节点标识信息可通过指针指向调用该节点标识信息的抽象语法树的节点。由于将节点对应的动态函数信息、动态函数标识码以及调用函数标识码封装为节点标识信息,用户可方便的对节点标识信息对应的节点上的动态函数进行增加、删除、修改以及查询操作。随后转到步骤S105。
在步骤S105中,代码存储装置对步骤S101获取的文件代码以及步骤S104获取的文件代码对应的抽象语法树的节点标识信息进行存储操作,以便用户对上述文件代码进行高效的解析以及变更操作。
这样即完成了本优选实施例的代码存储方法的文件代码的存储操作。
用户对上述存储的文件代码进行解析以及变更操作时,用户可通过抽象语法树的每个节点的节点标识信息获取对应动态函数的调用关系以及动态函数下调用函数的继承关系,从而可有效的对动态函数的功能进行判断,进而对文件代码进行高效的解析以及变更操作。
本优选实施例的代码存储方法通过将文件代码与对应的抽象语法树的节点标识信息同时进行存储操作,避免了文件代码解析调整中,函数调用关系链断裂的现象,从而提高了代码解析效率。
请参照图2,图2为本发明的代码存储方法的第二优选实施例的流程图。本优选实施例的代码存储方法可使用上述的电子设备进行实施,用于对文件代码进行转化、存储等预处理操作。本优选实施例的代码存储方法包括:
步骤S201,获取文件代码,并对文件代码进行语法解析,以获取文件代码的抽象语法树;
步骤S202,获取抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;
步骤S203,使用第一预设规则将动态函数信息转化为动态函数标识码,并使用第二预设规则将调用函数信息转化为调用函数标识码;
步骤S204,将动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;
步骤S205,对文件代码以及对应的抽象语法树的节点标识信息进行存储操作;
步骤S206,接收节点解析指令,并根据节点解析指令获取文件代码的抽象语法树的对应节点的节点标识信息;
步骤S207,使用第一预设规则,获取节点标识信息对应的动态函数信息;使用第二预设规则,获取节点标识信息对应的调用函数信息;
步骤S208,使用动态函数信息和调用函数信息,对所述节点对应的动态函数进行展示,以便对动态函数进行解析操作。
下面详细说明本优选实施例的代码存储方法的各步骤的具体流程。
在步骤S201中,代码存储装置可通过遍历文件代码项目路径等方法来获取文件代码。
随后代码存储装置对获取的文件代码进行语法解析,这里可使用开源工具javacc、antrl、astparser以及eclipse开源框架jdt等编译解析工具对文件代码进行语法解析,从而获取文件代码的抽象语法树(AST,abstract syntax tree)。
这里的抽象语法树由机器可读的树形节点构成的数据结构树。其中抽象语法树的每个树形节点均为符合语法规则的动态函数。
具体请参照图3,图3为本发明的代码存储方法的第二优选实施例的步骤S201的流程图。该步骤S201包括:
步骤S301,代码存储装置对文件代码进行扫描,生成所述文件代码的单词符号串。由于文件代码为纯文本文件,因此代码存储装置可从左至右对文件代码进行扫描,把作为字符串的文件代码转化为单词符号串。
步骤S302,代码存储装置判断步骤S301生成的单词字符串是否符合预设语法规则,从而将文件代码的单词符号串组成文件代码的语法单位,如表达式、赋值或循环等。
步骤S303,代码存储装置基于文件代码的语法单元,按语法规则分析检查由语法单元构成每条语句是否有正确的逻辑结构,并按上述逻辑结构生成文件代码的抽象语法树。随后转到步骤S202。
在步骤S202中,代码存储装置可通过访问者模式对步骤S201获取的抽象语法树的每个节点的动态函数进行数据提取,从而提取动态函数的动态函数信息以及动态函数的调用函数信息。
这里的动态函数信息包括动态函数的包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息。当然这里动态函数信息还可包括动态函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。
这里的调用函数信息包括动态函数中的调用函数的调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息。当然这里的调用函数信息还可包括调用函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及调用函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。随后转到步骤S203。
在步骤S203中,代码存储装置使用第一预设规则,将步骤S102获取的动态函数信息转化为具有唯一性的动态函数标识码。如使用第一非可逆加密算法(如哈希(hash)算法等)将不定长明文的动态函数信息转化为定长的具有唯一性的动态函数标识码。
如动态函数信息中的包名信息为com.tencent.sng包,编译单元信息为A.java,类名信息为子类B,则上述动态函数信息的拼接后的字符串可为“com\tencent\sng\A$B”,使用哈希算法可将上述字符串转化为一16位的唯一性编码。同理动态函数信息中的动态函数名信息以及动态函数参数类型信息也可使用哈希算法转化为一16为的唯一性编码,这样即可形成唯一性的动态函数标识码。
同时代码存储装置使用第二预设规则,将步骤S102获取的调用函数信息转化为具有唯一性的调用函数标识码。如使用第二非可逆加密算法(如哈希(hash)算法等)将不定长明文的调用函数信息转化为定长的具有唯一性的调用函数标识码。
具体的,由于调用函数的可直接获取信息较少,因此在本步骤中,代码存储装置会首先通过编译工具JDT.ASTParser,获取调用函数信息的详细信息,然后再使用第二非可逆加密算法,将调用函数信息的详细信息转化为具有唯一性的调用函数标识码。随后转到步骤S204。
在步骤S204中,代码存储装置将步骤S203获取的动态函数标识码、动态函数对应的所有调用函数的调用函数标识码;以及步骤S102获取的动态函数信息封装为一节点标识信息。该节点标识信息可通过指针指向调用该节点标识信息的抽象语法树的节点。由于将节点对应的动态函数信息、动态函数标识码以及调用函数标识码封装为节点标识信息,用户可方便的对节点标识信息对应的节点上的动态函数进行增加、删除、修改以及查询操作。随后转到步骤S205。
在步骤S205中,代码存储装置对步骤S201获取的文件代码以及步骤S204获取的文件代码对应的抽象语法树的节点标识信息进行存储操作。
在步骤S206中,当用户需要对文件代码进行解析变更操作时,代码存储装置接收到用户的节点解析指令,这里节点解析指令为用户需要对文件代码对应的抽象语法树中的某个节点进行解析变更的指令。
这时代码存储装置会根据节点解析指令获取文件代码的抽象语法树的对应节点的节点标识信息,以便对节点标识信息对应的文件代码进行解析变更。随后转到步骤S207。
在步骤S207中,代码存储装置使用第一非可逆加密算法(如哈希(hash)算法等),获取节点标识信息对应的动态函数信息;同时代码存储装置使用第二非可逆加密算法(如哈希(hash)算法等),获取节点标识信息对应的调用函数信息。
其中调用函数信息的调用函数名信息和调用函数参数类型信息用于表示动态函数与调用函数的调用关系,调用函数信息的调用函数的子函数信息用于表示调用函数和调用函数的子函数的继承关系。随后转到步骤S208。
在步骤S208中,代码存储装置使用动态函数信息和调用函数信息,对节点对应的动态函数进行展示,即同时对动态函数与调用函数的调用关系以及调用函数和调用函数的子函数的继承关系进行展示,这样用户可根据上述的调用关系以及继承关系,对动态函数进行准确的解析操作。
这样即完成了本优选实施例的代码存储方法的代码存储以及解析过程。
在第一优选实施例的基础上,本优选实施例的代码存储方法还提供对存储的文件代码进行节点标识信息解析的过程,从而可进一步提高文件代码解析的准确性以及解析效率。
本发明还提供一种代码存储装置,请参照图4,图4为本发明的代码存储装置的第一优选实施例的结构示意图。本优选实施例的代码存储装置可使用上述的代码存储方法的第一优选实施例进行实施,本优选实施例的代码存储装置40包括代码解析模块41、函数信息获取模块42、标识码转化模块43、封装模块44以及存储模块45。
代码解析模块41用于获取文件代码,并对文件代码进行语法解析,以获取文件代码的抽象语法树;函数信息获取模块42用于获取抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;标识码转化模块43用于使用第一预设规则将动态函数信息转化为动态函数标识码,并使用第二预设规则将调用函数信息转化为调用函数标识码;封装模块44用于将动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;存储模块45用于对文件代码以及对应的抽象语法树的节点标识信息进行存储操作。
本优选实施例的代码存储装置40使用时,首先代码解析模块41可通过遍历文件代码项目路径等方法来获取文件代码。
随后代码解析模块41对获取的文件代码进行语法解析,这里可使用开源工具javacc、antrl、astparser以及eclipse开源框架jdt等编译解析工具对文件代码进行语法解析,从而获取文件代码的抽象语法树(AST,abstract syntax tree)。
这里的抽象语法树由机器可读的树形节点构成的数据结构树。其中抽象语法树的每个树形节点均为符合语法规则的动态函数。
随后函数信息获取模块42可通过访问者模式对代码解析模块41获取的抽象语法树的每个节点的动态函数进行数据提取,从而提取动态函数的动态函数信息以及动态函数的调用函数信息。在java的访问者设计模式下,用户可以在不改变各元素类的前提下定义作用于这些元素类的新操作。
这里的动态函数信息包括动态函数的包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息。当然这里动态函数信息还可包括动态函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。
这里的调用函数信息包括动态函数中的调用函数的调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息。当然这里的调用函数信息还可包括调用函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及调用函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。
如动态函数A在执行代码中可包括执行调用函数B和调用函数C的代码。同时调用函数B同时为子函数B1和子函数B2的父函数,动态函数A可通过执行子函数B1或子函数B2实现对调用函数B的调用操作。
然后标识码转化模块43使用第一预设规则,将函数信息获取模块42获取的动态函数信息转化为具有唯一性的动态函数标识码。如使用第一非可逆加密算法(如哈希(hash)算法等)将不定长明文的动态函数信息转化为定长的具有唯一性的动态函数标识码。
同时标识码转化模块43使用第二预设规则,将函数信息获取模块42获取的调用函数信息转化为具有唯一性的调用函数标识码。如使用第二非可逆加密算法(如哈希(hash)算法等)将不定长明文的调用函数信息转化为定长的具有唯一性的调用函数标识码。
随后封装模块44将标识码转化模块43获取的动态函数标识码、动态函数对应的所有调用函数的调用函数标识码;以及函数信息获取模块42获取的动态函数信息封装为一节点标识信息。该节点标识信息可通过指针指向调用该节点标识信息的抽象语法树的节点。由于将节点对应的动态函数信息、动态函数标识码以及调用函数标识码封装为节点标识信息,用户可方便的对节点标识信息对应的节点上的动态函数进行增加、删除、修改以及查询操作。
最后存储模块45对代码解析模块41获取的文件代码以及封装模块44获取的文件代码对应的抽象语法树的节点标识信息进行存储操作,以便用户对上述文件代码进行高效的解析以及变更操作。
这样即完成了本优选实施例的代码存储装置40的文件代码的存储操作。
用户对上述存储的文件代码进行解析以及变更操作时,用户可通过抽象语法树的每个节点的节点标识信息获取对应动态函数的调用关系以及动态函数下调用函数的继承关系,从而可有效的对动态函数的功能进行判断,进而对文件代码进行高效的解析以及变更操作。
本优选实施例的代码存储装置通过将文件代码与对应的抽象语法树的节点标识信息同时进行存储操作,避免了文件代码解析调整中,函数调用关系链断裂的现象,从而提高了代码解析效率。
请参照图5,图5为本发明的代码存储装置的第二优选实施例的结构示意图。本优选实施例的代码存储装置可使用上述的代码存储方法的第二优选实施例进行实施,本优选实施例的代码存储装置50包括代码解析模块51、函数信息获取模块52、标识码转化模块53、封装模块54、存储模块55、节点标识信息获取模块56、函数信息读取模块57以及展示解析模块58。
代码解析模块51用于获取文件代码,并对文件代码进行语法解析,以获取文件代码的抽象语法树;函数信息获取模块52用于获取抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;标识码转化模块53用于使用第一预设规则将动态函数信息转化为动态函数标识码,并使用第二预设规则将调用函数信息转化为调用函数标识码;封装模块54用于将动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;存储模块55用于对文件代码以及对应的抽象语法树的节点标识信息进行存储操作;节点标识信息获取模块56用于接收节点解析指令,并根据节点解析指令获取文件代码的抽象语法树的对应节点的节点标识信息;函数信息读取模块57用于使用第一预设规则,获取节点标识信息对应的动态函数信息;使用第二预设规则,获取节点标识信息对应的调用函数信息;展示解析模块58用于使用动态函数信息和调用函数信息,对节点对应的动态函数进行展示,以便对动态函数进行解析操作。
请参照图6,图6为本发明的代码存储装置的第二优选实施例的代码解析模块的结构示意图。该代码解析模块51包括扫描单元61、语法单元生成单元62以及抽象语法树生成单元63。
扫描单元61用于对文件代码进行扫描,生成文件代码的单词符号串;语法单元生成单元62用于根据预设语法规则,将文件代码的单词符号串组成文件代码的语法单位;抽象语法树生成单元63用于基于文件代码的语法单元,生成文件代码的抽象语法树。
请参照图7,图7为本发明的代码存储装置的第二优选实施例的标识码转化模块的结构示意图。该标识码转化模块53包括动态函数标识码转化单元71以及调用函数标识码转化单元72。
动态函数标识码转化单元71用于使用第一非可逆加密算法,将动态函数信息转化为具有唯一性的动态函数标识码;调用函数标识码转化单元72用于使用第二非可逆加密算法,将调用函数信息转化为具有唯一性的调用函数标识码。
请参照图8,图8为本发明的代码存储装置的第二优选实施例的标识码转化模块的调用函数标识码转化单元的结构示意图。该调用函数标识码转化单元72包括函数详细信息获取子单元81以及调用函数标识码转化子单元82。
函数详细信息获取子单元用于通过编译工具JDT.ASTParser,获取调用函数信息的详细信息;调用函数标识码转化子单元用于使用第二非可逆加密算法,将调用函数信息的详细信息转化为具有唯一性的调用函数标识码。
本优选实施例的代码存储装置50使用时,首先代码解析模块51可通过遍历文件代码项目路径等方法来获取文件代码。
随后代码解析模块51对获取的文件代码进行语法解析,这里可使用开源工具javacc、antrl、astparser以及eclipse开源框架jdt等编译解析工具对文件代码进行语法解析,从而获取文件代码的抽象语法树(AST,abstract syntax tree)。
这里的抽象语法树由机器可读的树形节点构成的数据结构树。其中抽象语法树的每个树形节点均为符合语法规则的动态函数。
具体包括:
代码解析模块51的扫描单元61对文件代码进行扫描,生成所述文件代码的单词符号串。由于文件代码为纯文本文件,因此代码存储装置可从左至右对文件代码进行扫描,把作为字符串的文件代码转化为单词符号串。
代码解析模块51的语法单元生成单62元判断扫描单元61生成的单词字符串是否符合预设语法规则,从而将文件代码的单词符号串组成文件代码的语法单位,如表达式、赋值或循环等。
代码解析模块51的抽象语法树生成单元63基于文件代码的语法单元,按语法规则分析检查由语法单元构成每条语句是否有正确的逻辑结构,并按上述逻辑结构生成文件代码的抽象语法树。
然后函数信息获取模块52可通过访问者模式对代码解析模块51获取的抽象语法树的每个节点的动态函数进行数据提取,从而提取动态函数的动态函数信息以及动态函数的调用函数信息。
这里的动态函数信息包括动态函数的包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息。当然这里动态函数信息还可包括动态函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。
这里的调用函数信息包括动态函数中的调用函数的调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息。当然这里的调用函数信息还可包括调用函数的代码文件路径信息、类属性信息(如父类名信息、接口类名信息、修饰符名信息以及行号范围信息等)以及调用函数属性信息(如函数返回类型信息以及函数修饰符名信息等)。
随后标识码转化模块53的动态函数标识码转化单元71使用第一预设规则,将函数信息获取模块获取的动态函数信息转化为具有唯一性的动态函数标识码。如使用第一非可逆加密算法(如哈希(hash)算法等)将不定长明文的动态函数信息转化为定长的具有唯一性的动态函数标识码。
如动态函数信息中的包名信息为com.tencent.sng包,编译单元信息为A.java,类名信息为子类B,则上述动态函数信息的拼接后的字符串可为“com\tencent\sng\A$B”,动态函数标识码转化单元使用哈希算法可将上述字符串转化为一16位的唯一性编码。同理动态函数信息中的动态函数名信息以及动态函数参数类型信息也可使用哈希算法转化为一16为的唯一性编码,这样即可形成唯一性的动态函数标识码。
同时标识码转化模块53的调用函数标识码转化单元72使用第二预设规则,将函数信息获取模块获取的调用函数信息转化为具有唯一性的调用函数标识码。如使用第二非可逆加密算法(如哈希(hash)算法等)将不定长明文的调用函数信息转化为定长的具有唯一性的调用函数标识码。
具体的,由于调用函数的可直接获取信息较少,因此在本步骤中,调用函数标识码转化单元72的函数详细信息获取子单元81会首先通过编译工具JDT.ASTParser,获取调用函数信息的详细信息,然后调用函数标识码转化单元72的调用函数标识码转化子单元82再使用第二非可逆加密算法,将调用函数信息的详细信息转化为具有唯一性的调用函数标识码。
然后封装模块54将标识码转化模块53获取的动态函数标识码、动态函数对应的所有调用函数的调用函数标识码;以及函数信息获取模块52获取的动态函数信息封装为一节点标识信息。该节点标识信息可通过指针指向调用该节点标识信息的抽象语法树的节点。由于将节点对应的动态函数信息、动态函数标识码以及调用函数标识码封装为节点标识信息,用户可方便的对节点标识信息对应的节点上的动态函数进行增加、删除、修改以及查询操作。
随后存储模块55对代码解析模块51获取的文件代码以及封装模块54获取的文件代码对应的抽象语法树的节点标识信息进行存储操作。
当用户需要对文件代码进行解析变更操作时,节点标识信息获取模块56接收到用户的节点解析指令,这里节点解析指令为用户需要对文件代码对应的抽象语法树中的某个节点进行解析变更的指令。
这时节点标识信息获取模块56会根据节点解析指令获取文件代码的抽象语法树的对应节点的节点标识信息,以便对节点标识信息对应的文件代码进行解析变更。
然后函数信息读取模块57使用第一非可逆加密算法(如哈希(hash)算法等),获取节点标识信息对应的动态函数信息;同时函数信息读取模块使用第二非可逆加密算法(如哈希(hash)算法等),获取节点标识信息对应的调用函数信息。
其中调用函数信息的调用函数名信息和调用函数参数类型信息用于表示动态函数与调用函数的调用关系,调用函数信息的调用函数的子函数信息用于表示调用函数和调用函数的子函数的继承关系。
最后展示解析模块58使用动态函数信息和调用函数信息,对节点对应的动态函数进行展示,即同时对动态函数与调用函数的调用关系以及调用函数和调用函数的子函数的继承关系进行展示,这样用户可根据上述的调用关系以及继承关系,对动态函数进行准确的解析操作。
这样即完成了本优选实施例的代码存储装置的代码存储以及解析过程。
在第一优选实施例的基础上,本优选实施例的代码存储装置还提供对存储的文件代码进行节点标识信息解析的过程,从而可进一步提高文件代码解析的准确性以及解析效率。
下面通过一具体实施例说明本发明的代码存储方法及代码存储装置的具体工作原理。请参照图9,图9为本发明的代码存储方法及代码存储装置的具体实施例的流程图,本具体实施例的代码存储装置设置在代码处理终端中,该代码处理终端对文件代码进行存储以及解析操作的流程包括:
步骤S901,代码处理终端通过遍历文件路径获取文件代码;
步骤S902,代码处理终端使用开源工具javacc、antrl、astparser以及eclipse开源框架jdt等编译解析工具对文件代码进行语法解析,从而获取文件代码的抽象语法树。其中抽象语法树的每个树形节点均为符合语法规则的动态函数。
步骤S903,代码处理终端通过访问者模式对提取抽象语法树中每个节点的动态函数信息以及调用函数信息。
步骤S904,代码处理终端使用哈希算法对动态函数信息进行编码,生成唯一性的动态函数标识码;代码处理终端使用哈希算法对调用函数信息进行编码,生成唯一性的调用函数标识码。
步骤S905,代码处理终端将节点对应的动态函数信息、动态函数标识码以及调用函数标识码封装为节点标识信息。
步骤S906,代码处理终端对文件代码以及文件代码对应的抽象语法树的节点标识信息进行存储操作。
用户对上述存储的文件代码进行解析以及变更操作时,用户可通过抽象语法树的每个节点的节点标识信息获取对应动态函数的调用关系以及动态函数下调用函数的继承关系,从而可有效的对动态函数的功能进行判断,进而对文件代码进行高效的解析以及变更操作。
这样即完成了本具体实施例的代码存储方法及代码存储装置的代码存储以及解析过程。
本发明的代码存储方法及代码存储装置通过将文件代码与对应的抽象语法树的节点标识信息同时进行存储操作,避免了文件代码解析调整中,函数调用关系链断裂的现象,从而提高了代码解析效率;解决了现有的代码存储方法及代码存储装置中由于调用函数的其他子函数的调用关系缺失,造成函数调用关系链断裂,进而使得代码解析效率较低的技术问题。
如本申请所使用的术语“组件”、“模块”、“系统”、“接口”、“进程”等等一般地旨在指计算机相关实体:硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是但不限于是运行在处理器上的进程、处理器、对象、可执行应用、执行的线程、程序和/或计算机。通过图示,运行在控制器上的应用和该控制器二者都可以是组件。一个或多个组件可以有在于执行的进程和/或线程内,并且组件可以位于一个计算机上和/或分布在两个或更多计算机之间。
图10和随后的讨论提供了对实现本发明所述的代码存储装置所在的电子设备的工作环境的简短、概括的描述。图10的工作环境仅仅是适当的工作环境的一个实例并且不旨在建议关于工作环境的用途或功能的范围的任何限制。实例电子设备1012包括但不限于可穿戴设备、头戴设备、医疗健康平台、个人计算机、服务器计算机、手持式或膝上型设备、移动设备(比如移动电话、个人数字助理(PDA)、媒体播放器等等)、多处理器系统、消费型电子设备、小型计算机、大型计算机、包括上述任意系统或设备的分布式计算环境,等等。
尽管没有要求,但是在“计算机可读指令”被一个或多个电子设备执行的通用背景下描述实施例。计算机可读指令可以经由计算机可读介质来分布(下文讨论)。计算机可读指令可以实现为程序模块,比如执行特定任务或实现特定抽象数据类型的功能、对象、应用编程接口(API)、数据结构等等。典型地,该计算机可读指令的功能可以在各种环境中随意组合或分布。
图10图示了包括本发明的代码存储装置中的一个或多个实施例的电子设备1012的实例。在一种配置中,电子设备1012包括至少一个处理单元1016和存储器1018。根据电子设备的确切配置和类型,存储器1018可以是易失性的(比如RAM)、非易失性的(比如ROM、闪存等)或二者的某种组合。该配置在图10中由虚线1014图示。
在其他实施例中,电子设备1012可以包括附加特征和/或功能。例如,设备1012还可以包括附加的存储装置(例如可移除和/或不可移除的),其包括但不限于磁存储装置、光存储装置等等。这种附加存储装置在图10中由存储装置1020图示。在一个实施例中,用于实现本文所提供的一个或多个实施例的计算机可读指令可以在存储装置1020中。存储装置1020还可以存储用于实现操作系统、应用程序等的其他计算机可读指令。计算机可读指令可以载入存储器1018中由例如处理单元1016执行。
本文所使用的术语“计算机可读介质”包括计算机存储介质。计算机存储介质包括以用于存储诸如计算机可读指令或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。存储器1018和存储装置1020是计算机存储介质的实例。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光存储装置、盒式磁带、磁带、磁盘存储装置或其他磁存储设备、或可以用于存储期望信息并可以被电子设备1012访问的任何其他介质。任意这样的计算机存储介质可以是电子设备1012的一部分。
电子设备1012还可以包括允许电子设备1012与其他设备通信的通信连接1026。通信连接1026可以包括但不限于调制解调器、网络接口卡(NIC)、集成网络接口、射频发射器/接收器、红外端口、USB连接或用于将电子设备1012连接到其他电子设备的其他接口。通信连接1026可以包括有线连接或无线连接。通信连接1026可以发射和/或接收通信媒体。
术语“计算机可读介质”可以包括通信介质。通信介质典型地包含计算机可读指令或诸如载波或其他传输机构之类的“己调制数据信号”中的其他数据,并且包括任何信息递送介质。术语“己调制数据信号”可以包括这样的信号:该信号特性中的一个或多个按照将信息编码到信号中的方式来设置或改变。
电子设备1012可以包括输入设备1024,比如键盘、鼠标、笔、语音输入设备、触摸输入设备、红外相机、视频输入设备和/或任何其他输入设备。设备1012中也可以包括输出设备1022,比如一个或多个显示器、扬声器、打印机和/或任意其他输出设备。输入设备1024和输出设备1022可以经由有线连接、无线连接或其任意组合连接到电子设备1012。在一个实施例中,来自另一个电子设备的输入设备或输出设备可以被用作电子设备1012的输入设备1024或输出设备1022。
电子设备1012的组件可以通过各种互连(比如总线)连接。这样的互连可以包括外围组件互连(PCI)(比如快速PCI)、通用串行总线(USB)、火线(IEEE1394)、光学总线结构等等。在另一个实施例中,电子设备1012的组件可以通过网络互连。例如,存储器1018可以由位于不同物理位置中的、通过网络互连的多个物理存储器单元构成。
本领域技术人员将认识到,用于存储计算机可读指令的存储设备可以跨越网络分布。例如,可经由网络1028访问的电子设备1030可以存储用于实现本发明所提供的一个或多个实施例的计算机可读指令。电子设备1012可以访问电子设备1030并且下载计算机可读指令的一部分或所有以供执行。可替代地,电子设备1012可以按需要下载多条计算机可读指令,或者一些指令可以在电子设备1012处执行并且一些指令可以在电子设备1030处执行。
本文提供了实施例的各种操作。在一个实施例中,所述的一个或多个操作可以构成一个或多个计算机可读介质上存储的计算机可读指令,其在被电子设备执行时将使得计算设备执行所述操作。描述一些或所有操作的顺序不应当被解释为暗示这些操作必需是顺序相关的。本领域技术人员将理解具有本说明书的益处的可替代的排序。而且,应当理解,不是所有操作必需在本文所提供的每个实施例中存在。
而且,尽管已经相对于一个或多个实现方式示出并描述了本公开,但是本领域技术人员基于对本说明书和附图的阅读和理解将会想到等价变型和修改。本公开包括所有这样的修改和变型,并且仅由所附权利要求的范围限制。特别地关于由上述组件(例如元件、资源等)执行的各种功能,用于描述这样的组件的术语旨在对应于执行所述组件的指定功能(例如其在功能上是等价的)的任意组件(除非另外指示),即使在结构上与执行本文所示的本公开的示范性实现方式中的功能的公开结构不等同。此外,尽管本公开的特定特征已经相对于若干实现方式中的仅一个被公开,但是这种特征可以与如可以对给定或特定应用而言是期望和有利的其他实现方式的一个或多个其他特征组合。而且,就术语“包括”、“具有”、“含有”或其变形被用在具体实施方式或权利要求中而言,这样的术语旨在以与术语“包含”相似的方式包括。
本发明实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。上述的各装置或系统,可以执行相应方法实施例中的方法。
综上所述,虽然本发明已以实施例揭露如上,实施例前的序号仅为描述方便而使用,对本发明各实施例的顺序不造成限制。并且,上述实施例并非用以限制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内,均可作各种更动与润饰,因此本发明的保护范围以权利要求界定的范围为准。
Claims (10)
1.一种代码存储方法,其特征在于,包括:
获取文件代码,并对所述文件代码进行语法解析,以获取所述文件代码的抽象语法树;
获取所述抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;其中所述动态函数信息包括包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息;所述调用函数信息包括调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息;
使用第一预设规则将所述动态函数信息转化为动态函数标识码,并使用第二预设规则将所述调用函数信息转化为调用函数标识码;
将所述动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;以及
对所述文件代码以及对应的抽象语法树的节点标识信息进行存储操作。
2.根据权利要求1所述的代码存储方法,其特征在于,所述代码存储方法还包括:
接收节点解析指令,并根据所述节点解析指令获取所述文件代码的抽象语法树的对应节点的节点标识信息;
使用所述第一预设规则,获取所述节点标识信息对应的动态函数信息;使用所述第二预设规则,获取所述节点标识信息对应的调用函数信息;以及
使用所述动态函数信息和所述调用函数信息,对所述节点对应的动态函数进行展示,以便对所述动态函数进行解析操作;
其中所述调用函数信息的调用函数名信息和调用函数参数类型信息用于表示所述动态函数与所述调用函数的调用关系,所述调用函数信息的调用函数的子函数信息用于表示所述调用函数和所述调用函数的子函数的继承关系。
3.根据权利要求1所述的代码存储方法,其特征在于,所述对所述文件代码进行语法解析,以获取所述文件代码的抽象语法树的步骤包括:
对所述文件代码进行扫描,生成所述文件代码的单词符号串;
根据预设语法规则,将所述文件代码的单词符号串组成所述文件代码的语法单位;以及
基于所述文件代码的语法单元,生成所述文件代码的抽象语法树。
4.根据权利要求1所述的代码存储方法,其特征在于,所述使用第一预设规则将所述动态函数信息转化为动态函数标识码的步骤包括:
使用第一非可逆加密算法,将所述动态函数信息转化为具有唯一性的动态函数标识码;
所述使用第二预设规则将所述调用函数信息转化为调用函数标识码的步骤包括:
使用第二非可逆加密算法,将所述调用函数信息转化为具有唯一性的调用函数标识码。
5.根据权利要求4所述的代码存储方法,其特征在于,所述使用第二非可逆加密算法,将所述调用函数信息转化为具有唯一性的调用函数标识码的步骤包括:
通过编译工具JDT.ASTParser,获取所述调用函数信息的详细信息;以及
使用第二非可逆加密算法,将所述调用函数信息的详细信息转化为具有唯一性的调用函数标识码。
6.一种代码存储装置,其特征在于,包括:
代码解析模块,用于获取文件代码,并对所述文件代码进行语法解析,以获取所述文件代码的抽象语法树;
函数信息获取模块,用于获取所述抽象语法树的每个节点的动态函数信息以及动态函数的至少一个调用函数信息;其中所述动态函数信息包括包名信息、编译单元信息、类名信息、动态函数名信息以及动态函数参数类型信息;所述调用函数信息包括调用函数名信息、调用函数参数类型信息以及调用函数的子函数信息;
标识码转化模块,用于使用第一预设规则将所述动态函数信息转化为动态函数标识码,并使用第二预设规则将所述调用函数信息转化为调用函数标识码;
封装模块,用于将所述动态函数标识码、动态函数信息以及对应的至少一个调用函数标识码封装为节点标识信息;以及
存储模块,用于对所述文件代码以及对应的抽象语法树的节点标识信息进行存储操作。
7.根据权利要求6所述的代码存储装置,其特征在于,所述代码存储装置还包括:
节点标识信息获取模块,用于接收节点解析指令,并根据所述节点解析指令获取所述文件代码的抽象语法树的对应节点的节点标识信息;
函数信息读取模块,用于使用所述第一预设规则,获取所述节点标识信息对应的动态函数信息;使用所述第二预设规则,获取所述节点标识信息对应的调用函数信息;以及
展示解析模块,用于使用所述动态函数信息和所述调用函数信息,对所述节点对应的动态函数进行展示,以便对所述动态函数进行解析操作;
其中所述调用函数信息的调用函数名信息和调用函数参数类型信息用于表示所述动态函数与所述调用函数的调用关系,所述调用函数信息的调用函数的子函数信息用于表示所述调用函数和所述调用函数的子函数的继承关系。
8.根据权利要求6所述的代码存储装置,其特征在于,所述代码解析模块包括:
扫描单元,用于对所述文件代码进行扫描,生成所述文件代码的单词符号串;
语法单元生成单元,用于根据预设语法规则,将所述文件代码的单词符号串组成所述文件代码的语法单位;以及
抽象语法树生成单元,用于基于所述文件代码的语法单元,生成所述文件代码的抽象语法树。
9.根据权利要求6所述的代码存储装置,其特征在于,所述标识码转化模块包括:
动态函数标识码转化单元,用于使用第一非可逆加密算法,将所述动态函数信息转化为具有唯一性的动态函数标识码;以及
调用函数标识码转化单元,用于使用第二非可逆加密算法,将所述调用函数信息转化为具有唯一性的调用函数标识码。
10.根据权利要求9所述的代码存储装置,其特征在于,所述调用函数标识码转化单元包括:
函数详细信息获取子单元,用于通过编译工具JDT.ASTParser,获取所述调用函数信息的详细信息;以及
调用函数标识码转化子单元,用于使用第二非可逆加密算法,将所述调用函数信息的详细信息转化为具有唯一性的调用函数标识码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710282808.7A CN106970820B (zh) | 2017-04-26 | 2017-04-26 | 代码存储方法及代码存储装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710282808.7A CN106970820B (zh) | 2017-04-26 | 2017-04-26 | 代码存储方法及代码存储装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106970820A true CN106970820A (zh) | 2017-07-21 |
CN106970820B CN106970820B (zh) | 2020-09-04 |
Family
ID=59332706
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710282808.7A Active CN106970820B (zh) | 2017-04-26 | 2017-04-26 | 代码存储方法及代码存储装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106970820B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729015A (zh) * | 2017-09-12 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 一种确定工程代码中的无用函数的方法和装置 |
CN108549535A (zh) * | 2018-03-16 | 2018-09-18 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN109710305A (zh) * | 2018-11-27 | 2019-05-03 | 平安科技(深圳)有限公司 | 一种开发信息的获取方法、装置、存储介质及终端设备 |
CN109753286A (zh) * | 2018-12-28 | 2019-05-14 | 四川新网银行股份有限公司 | 一种基于功能标签的代码方法统计其调用次数的方法 |
CN110109681A (zh) * | 2019-05-08 | 2019-08-09 | 上海携程商务有限公司 | 不同平台间代码的转换方法及系统 |
CN110134435A (zh) * | 2019-05-29 | 2019-08-16 | 北京百度网讯科技有限公司 | 一种代码修复案例获取方法、装置、设备及存储介质 |
CN110321138A (zh) * | 2018-03-28 | 2019-10-11 | 阿里巴巴集团控股有限公司 | 一种程序更新、迁移方法和装置 |
CN111625275A (zh) * | 2020-04-29 | 2020-09-04 | 贝壳技术有限公司 | 代码重构规划方法、装置、存储介质及电子设备 |
CN111666206A (zh) * | 2020-04-30 | 2020-09-15 | 北京百度网讯科技有限公司 | 变更代码的影响范围的获取方法、装置、设备及存储介质 |
CN111694570A (zh) * | 2019-03-13 | 2020-09-22 | 南京大学 | 一种基于静态程序分析的JavaScript函数参数不匹配检测方法 |
CN112148392A (zh) * | 2019-06-27 | 2020-12-29 | 腾讯科技(深圳)有限公司 | 一种函数调用链获取方法、装置及存储介质 |
CN113282293A (zh) * | 2021-05-14 | 2021-08-20 | 北京京东振世信息技术有限公司 | 一种代码识别方法、装置、设备及存储介质 |
CN113297199A (zh) * | 2020-06-24 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 时空数据引擎的使用方法、装置及Cassandra数据库系统 |
CN115080011A (zh) * | 2022-06-23 | 2022-09-20 | 北京志凌海纳科技有限公司 | 基于抽象语法树的代码生成方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101377806A (zh) * | 2008-07-24 | 2009-03-04 | 江苏大学 | 一种基于系统源代码搜索隐通道的信息流分析方法 |
CN102541544A (zh) * | 2011-12-20 | 2012-07-04 | 北京数码大方科技有限公司 | 树形控件的处理方法、装置及系统 |
CN103902255A (zh) * | 2012-12-24 | 2014-07-02 | 腾讯科技(深圳)有限公司 | 一种函数关系调用树的生成方法及系统 |
CN103927473A (zh) * | 2013-01-16 | 2014-07-16 | 广东电网公司信息中心 | 检测移动智能终端的源代码安全的方法、装置及系统 |
US20150007140A1 (en) * | 2013-06-28 | 2015-01-01 | Coverity, Inc. | Prioritization of tests of computer program code |
CN104620236A (zh) * | 2012-03-15 | 2015-05-13 | 美国高通技术公司 | 用于神经网络的基于标记的装置和方法 |
CN106095886A (zh) * | 2016-06-03 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及其装置 |
CN106547520A (zh) * | 2015-09-16 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 一种代码路径分析方法及装置 |
-
2017
- 2017-04-26 CN CN201710282808.7A patent/CN106970820B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101377806A (zh) * | 2008-07-24 | 2009-03-04 | 江苏大学 | 一种基于系统源代码搜索隐通道的信息流分析方法 |
CN102541544A (zh) * | 2011-12-20 | 2012-07-04 | 北京数码大方科技有限公司 | 树形控件的处理方法、装置及系统 |
CN104620236A (zh) * | 2012-03-15 | 2015-05-13 | 美国高通技术公司 | 用于神经网络的基于标记的装置和方法 |
CN103902255A (zh) * | 2012-12-24 | 2014-07-02 | 腾讯科技(深圳)有限公司 | 一种函数关系调用树的生成方法及系统 |
CN103927473A (zh) * | 2013-01-16 | 2014-07-16 | 广东电网公司信息中心 | 检测移动智能终端的源代码安全的方法、装置及系统 |
US20150007140A1 (en) * | 2013-06-28 | 2015-01-01 | Coverity, Inc. | Prioritization of tests of computer program code |
CN106547520A (zh) * | 2015-09-16 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 一种代码路径分析方法及装置 |
CN106095886A (zh) * | 2016-06-03 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及其装置 |
Non-Patent Citations (4)
Title |
---|
向勇等: "基于内核跟踪的动态函数调用图生成方法", 《计算机应用研究》 * |
周秀芝等: "基于交叉点的树遍历二值图像边界跟踪算法", 《计算机应用与软件》 * |
王忠林: "基于多尺度句子信息的语义距离计算", 《计算机科学》 * |
黄双玲: "面向C/C++程序函数调用关系的静态分析方法研究", 《中国科学技术大学硕士学位论文》 * |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729015B (zh) * | 2017-09-12 | 2020-12-11 | 创新先进技术有限公司 | 一种确定工程代码中的无用函数的方法和装置 |
CN107729015A (zh) * | 2017-09-12 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 一种确定工程代码中的无用函数的方法和装置 |
CN108549535A (zh) * | 2018-03-16 | 2018-09-18 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN108549535B (zh) * | 2018-03-16 | 2021-02-05 | 北京大学 | 一种基于文件依赖关系的高效程序解析方法和系统 |
CN110321138A (zh) * | 2018-03-28 | 2019-10-11 | 阿里巴巴集团控股有限公司 | 一种程序更新、迁移方法和装置 |
CN110321138B (zh) * | 2018-03-28 | 2023-08-01 | 阿里巴巴集团控股有限公司 | 一种程序更新、迁移方法和装置 |
CN109710305A (zh) * | 2018-11-27 | 2019-05-03 | 平安科技(深圳)有限公司 | 一种开发信息的获取方法、装置、存储介质及终端设备 |
CN109753286A (zh) * | 2018-12-28 | 2019-05-14 | 四川新网银行股份有限公司 | 一种基于功能标签的代码方法统计其调用次数的方法 |
CN111694570A (zh) * | 2019-03-13 | 2020-09-22 | 南京大学 | 一种基于静态程序分析的JavaScript函数参数不匹配检测方法 |
CN110109681A (zh) * | 2019-05-08 | 2019-08-09 | 上海携程商务有限公司 | 不同平台间代码的转换方法及系统 |
CN110134435A (zh) * | 2019-05-29 | 2019-08-16 | 北京百度网讯科技有限公司 | 一种代码修复案例获取方法、装置、设备及存储介质 |
CN112148392A (zh) * | 2019-06-27 | 2020-12-29 | 腾讯科技(深圳)有限公司 | 一种函数调用链获取方法、装置及存储介质 |
CN111625275A (zh) * | 2020-04-29 | 2020-09-04 | 贝壳技术有限公司 | 代码重构规划方法、装置、存储介质及电子设备 |
CN111625275B (zh) * | 2020-04-29 | 2023-10-20 | 贝壳技术有限公司 | 代码重构规划方法、装置、存储介质及电子设备 |
CN111666206A (zh) * | 2020-04-30 | 2020-09-15 | 北京百度网讯科技有限公司 | 变更代码的影响范围的获取方法、装置、设备及存储介质 |
CN111666206B (zh) * | 2020-04-30 | 2023-12-22 | 北京百度网讯科技有限公司 | 变更代码的影响范围的获取方法、装置、设备及存储介质 |
CN113297199A (zh) * | 2020-06-24 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 时空数据引擎的使用方法、装置及Cassandra数据库系统 |
CN113297199B (zh) * | 2020-06-24 | 2024-03-08 | 阿里巴巴集团控股有限公司 | 时空数据引擎的使用方法、装置及Cassandra数据库系统 |
CN113282293A (zh) * | 2021-05-14 | 2021-08-20 | 北京京东振世信息技术有限公司 | 一种代码识别方法、装置、设备及存储介质 |
CN113282293B (zh) * | 2021-05-14 | 2023-09-05 | 北京京东振世信息技术有限公司 | 一种代码识别方法、装置、设备及存储介质 |
CN115080011A (zh) * | 2022-06-23 | 2022-09-20 | 北京志凌海纳科技有限公司 | 基于抽象语法树的代码生成方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106970820B (zh) | 2020-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106970820A (zh) | 代码存储方法及代码存储装置 | |
US10915664B2 (en) | Data masking systems and methods | |
CN106575166B (zh) | 手写输入字符的处理、数据拆分和合并及编解码处理方法 | |
CN111209004B (zh) | 代码转换方法及装置 | |
CN107341399B (zh) | 评估代码文件安全性的方法及装置 | |
CN103853650A (zh) | 一种模糊测试的测试用例生成方法及装置 | |
CN110597814B (zh) | 结构化数据的序列化、反序列化方法以及装置 | |
CN110532176A (zh) | 一种智能合约的形式化验证方法、电子装置及存储介质 | |
CN110007906B (zh) | 脚本文件的处理方法、装置和服务器 | |
CN104102701B (zh) | 一种基于hive的历史数据存档与查询方法 | |
CN105446704B (zh) | 一种着色器的解析方法和装置 | |
CN109460220A (zh) | 报文预定义代码生成方法、装置、电子设备和存储介质 | |
CN106326099B (zh) | 一种用于程序跟踪的方法、装置及电子设备 | |
WO2013137864A1 (en) | Submatch extraction | |
CN105718463A (zh) | 关键字模糊匹配方法及装置 | |
CN112486490B (zh) | 前端代码打包方法、装置、电子设备及存储介质 | |
CN106780280B (zh) | 数字水印加密方法及装置 | |
CN108153745B (zh) | 一种应用数据调用方法及应用开发系统 | |
CN101794240A (zh) | 一种聚合数据内容的方法和系统 | |
CN106484728B (zh) | 日志数据的生成方法、解析方法、生成装置及解析装置 | |
CN106293862B (zh) | 一种可扩展标记语言xml数据的解析方法和装置 | |
CN106776285A (zh) | 网页前端调试方法及装置 | |
CN105793842B (zh) | 序列化消息之间的转换方法和装置 | |
CN110162309A (zh) | 参数校验方法及装置 | |
CN103246671A (zh) | 抽象语法标记文件的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |