CN102681830B - 一种比较程序文本的方法和设备 - Google Patents
一种比较程序文本的方法和设备 Download PDFInfo
- Publication number
- CN102681830B CN102681830B CN201110064354.9A CN201110064354A CN102681830B CN 102681830 B CN102681830 B CN 102681830B CN 201110064354 A CN201110064354 A CN 201110064354A CN 102681830 B CN102681830 B CN 102681830B
- Authority
- CN
- China
- Prior art keywords
- descriptor
- program structure
- program
- class
- structure descriptor
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种比较程序文本的方法和设备。该方法包括:对第一程序文本和第二程序文本分别进行程序结构分析得到第一程序结构描述信息和第二程序结构描述信息;对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较;如果所述第一程序结构描述信息和所述第二程序结构描述信息比较的结果为相同,则判断所述第一程序文本和所述第二程序文本相同;如果比较的结果为不同,则判断所述第一程序文本和所述第二程序文本不同。通过应用本申请实施例的技术方案,能够对在文本内容存在差异但程序结构上相同的程序文本进行判断,提高了程序文本比较的智能性和准确性,提高了程序开发和管理的效率。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种比较程序文本的方法和设备。
背景技术
版本管理系统是用来管理文档、程序文本以及其他计算机文件的信息的变化记录的系统,适用于多人修改同一文件的软件开发场合。被管理的文件的每个变化被称之为一个版本,每个版本有一个时间戳和一个提交者与之相对应,文件的变化可以用于进行比较、还原,甚至合并。
在管理源代码时,相应的版本管理系统为源代码管理系统。目前的源代码管理系统,如svn(subversion),通常采用文本对比的方法对程序文本进行比较。具体地,采用字符匹配的方法对两个程序文本进行文本对比,根据其中一个程序文本的内容来确定子串,通过一定的匹配算法在另一个程序文本中确定这些子串的位置,从而确定两个文本相同的部分。
用户在对两个程序文本对比时,比较关心两个程序文本的程序结构是否相同。程序结构是编写程序文本所需遵循的语言约束,是为了方便编译而存在的,类似于人类语言中的语法。
发明人在实现本申请时,发现现有技术至少存在以下缺陷:
文本比较的方法只能严格反映字符的差异,对于遵循程序结构的程序文本的比较,某些文本内容上的改变,例如,某些语句的顺序改变,不会导致程序结构的差异,在这种情况下,如果采用文本比较的方法,会将文本内容改变前后的程序文本判定为不同。
例如,″int i=0;int j=0″和“int j=0;int i=0”的程序语意都是声明类型为整型的i和j的变量,用文本比较的方法比较上述两个程序文本,会判断这两个程序文本不同。因此,现有的源代码管理系统采用文本比较的方法,无法将程序结构相同的两个程序文本判断为相同,降低了源代码管理的准确率和软件开发工作的效率。
发明内容
本申请实施例提供一种比较程序文本的方法和设备,解决在现有技术中存在的通过文本比较的方法无法结合程序文件所使用编程语言语法特点,准确的判断两个在程序结构上相同的程序文件为相同的问题。
为达到上述目的,本申请实施例一方面提供了一种比较程序文本的方法,包括:
对第一程序文本和第二程序文本分别进行程序结构分析得到第一程序结构描述信息和第二程序结构描述信息;
对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较;
如果所述第一程序结构描述信息和所述第二程序结构描述信息比较的结果为相同,则判断所述第一程序文本和所述第二程序文本相同;如果比较的结果为不同,则判断所述第一程序文本和所述第二程序文本不同。
另一方面,本申请实施例还提供了一种比较程序文本的设备,包括:
程序结构分析模块,用于对第一程序文本和第二程序文本分别进行程序结构分析得到第一程序结构描述信息和第二程序结构描述信息;
比较模块,对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较;
判断模块,用于根据比较模块的比较结果,如果所述第一程序结构描述信息和所述第二程序结构描述信息比较的结果为相同,则判断所述第一程序文本和所述第二程序文本相同;如果比较的结果为不同,则判断所述第一程序文本和所述第二程序文本不同。
与现有技术相比,本申请实施例具有以下优点:
将程序文本进行基于程序结构的分析生成程序结构描述信息,根据程序结构描述信息进行程序结构的比较,如果程序结构描述信息判断为相同,则判定程序文本的程序结构相同,通过本申请实施例提供的程序结构的比较方法,能够将文本内容存在差异但程序结构相同的程序文本判断为相同,提高了程序文本比较的智能性和准确性,提高了程序开发和管理的效率。
附图说明
图1为本申请实施例提出的一种比较程序文本的方法的流程示意图;
图2为本申请实施例提出的一种比较程序文本的设备的结构示意图。
具体实施方式
如背景技术所述,现有技术中的程序文本的比较是通过文本比对的方法判断两个程序文本是否相同,无法准确地判断两个在文本内容上存在差异但在程序结构上相同的程序文本为相同。为了解决现有技术的缺陷,本申请提出了一种比较程序文本的方法,该方法包括:对两个程序文本进行基于程序结构的分析和比较;如果比较的结果为相同,则判定两个程序文本相同;如果比较的结果不同,则判定两个程序文本不同。
本申请实施例提供了一种比较程序文本的方法,该方法如图1所示,包括以下步骤:
步骤S101,对两个程序文本进行基于程序结构的分析,得到对应的程序结构描述信息;
其中,程序结构可以包括面向对象语言的程序结构,其基本组成单元为类(class)。类可以由类全名、存储在类实例中的字段和操作字段的方法组成。
其中,类全名由修饰符和类名组成,例如,类全名为public java.lang.String时,public为修饰符,java.lang.String为类名。字段由修饰符、数据类型和字段名称组成,例如,字段为private int i时,private为修饰符,int为数据类型,i为字段名称。方法由方法修饰符、方法返回结果数据类型、方法名称、参数列表和方法体组成,例如,方法为private int void add(int i,int j){return i+j;}时,private为修饰符,int void为方法返回结果类型,add为方法名称,int i和int j为参数列表,return i+j为方法体。
程序结构还可以包括面向过程语言的程序结构,其结构组成为变量(variable)和函数(function)。变量可以由修饰符、变量类型和变量名称组成。例如,变量为extern int c时,extern为修饰符,int为类型,c为名称。函数由修饰符、函数返回类型、名称、参数列表和函数体组成。例如,函数为extern int atoi(const char*str){return 0;}时,extern为修饰符,int为函数返回类型,atoi为函数名称,const char*str为参数列表,return 0为函数体。
基于上述程序结构,可以通过编译的方式分析程序文本,得到程序文本对应的程序结构描述信息,即,将便于程序员理解的源代码翻译成一种计算机所能理解的二进制语言,从而使得计算机执行编写程序者的意图;也可以利用编译的中间过程得到程序文本对应的程序结构描述信息。在生成程序结构描述信息的实际过程时,可以通过不同的信息获取方式、以不同的形式组织程序结构描述信息的内容,只要能保证程序结构描述信息中包含对程序文本进行程序结构的比较所必需的信息即可。
具体地,对于面向对象语言的程序结构,对应的程序结构描述信息为程序文本中所有程序结构的描述,可以包括类描述信息,也可以进一步包括类与程序文本之间的从属关系;其中,类描述信息可以包括类全名和字段描述信息;或,类描述信息可以包括类全名、字段描述信息,以及类与字段之间的从属关系;或,类描述信息可以包括类全名和方法描述信息;或,类描述信息可以包括类全名、方法描述信息,以及类与方法之间的从属关系。一个程序文本中包括多个类,则对应的程序结构描述信息中包括多个对应的类描述信息。由于类中的方法和字段可能缺省,当方法或者字段缺省时,类描述信息中可以不包括对应的方法描述信息或者字段描述信息。
其中,字段描述信息包括字段名称、字段修饰符和字段数据类型。方法描述信息包括方法名称和方法返回结果数据类型;方法描述信息还可以包括参数列表、方法修饰符和方法体中的一项或多项。
对于面向过程语言程序结构,根据程序文本得到的对应的程序结构描述信息中,包括程序文本中所有程序结构的描述。程序结构描述信息可以包括变量描述信息;或,程序结构描述信息可以包括变量描述信息和变量与程序文本之间的从属关系;或,程序结构描述信息可以包括函数描述信息;或,程序结构描述信息可以包括函数描述信息和函数与程序文本之间的从属关系;或,程序结构描述信息可以包括变量描述信息和函数描述信息,和/或变量与程序文本之间的从属关系,和/或函数与程序文本之间的从属关系。
其中,变量描述信息包括变量名称、变量修饰符和变量类型。函数描述信息包括函数名称和函数返回结果数据类型;函数描述信息还可以包括参数列表、函数修饰符和函数体中的一项或多项。
步骤S102,对两个程序结构描述信息进行比较,如果相同,执行步骤S103,如果不同,执行步骤S104。
具体的,对于两个面向对象的程序结构,对两个程序结构描述信息进行比较可以为,对两个程序结构描述信息中的类描述信息进行比较,如果相同,则认为两个程序结构描述信息相同;
其中,对两个程序结构描述信息中的类描述信息进行比较具体包括:对两个程序结构描述信息中类全名相同的类描述信息进行比较;其中,对类全名相同的类描述信息进行比较包括对类描述信息中的字段描述信息和方法描述信息进行比较,如果两个类描述信息所具有的字段描述信息相同并且所具有的方法描述信息相同,则判断两个类描述信息相同;
其中,对两个类描述信息中的字段描述信息进行比较包括,对字段名称相同的字段描述信息进行比较;其中,对字段名称相同的字段描述信息进行比较包括:对字段描述信息中的字段修饰符和字段数据类型进行比较,如果分别对应相同,则判断两个字段描述信息相同,否则判断两个字段描述信息不同;
其中,对两个类描述信息中的方法描述信息的比较包括,对具有相同方法名称的方法描述信息进行比较,其中,对具有相同方法名称的方法描述信息进行比较包括:对两个方法描述信息中的参数列表,方法修饰符,方法返回结果数据类型和方法体分别进行比较,如果比较结果为相同,则判断两个方法描述信息相同,否则,判断两个方法描述信息不同。
步骤S103,判断两个程序文本为相同。
步骤S104,判断两个程序文本为不同。
可选的,还包括步骤S105,根据两个程序结构描述信息的比较,输出两个程序文本的差异结果。
其中,对于面向对象程序结构的程序,两个程序文本的差异结果包含只在一个程序文本中的存在的类和/或具有相同类全名的类之间的差异;其中,所述具有相同类全名的类之间的差异包括:只在一个类中存在的字段,具有相同字段名称的字段之间的差异,只在一个类中存在的方法和具有相同方法名称的方法之间的差异中的一项或多项;其中,所述具有相同字段名称的字段之间的差异包括:字段中的修饰符差异和变量类型差异;其中,所述具有相同方法名称的方法之间的差异包括,方法中的返回结果数据类型差异;或,方法中的返回结果数据类型差异,以及方法中的修饰符差异,参数列表差异和方法体差异中的一项或多项。
对于面向过程程序结构的程序,两个程序文本程序结构差异结果具体包括:只在一个程序文本中存在的变量,具有相同变量名称的变量之间的差异,只在一个程序文本中存在的函数,和具有相同函数名称的函数之间的差异中一项或多项的组合;其中,所述具有相同变量名称的变量之间的差异包括:变量中的修饰符差异和变量类型差异;其中,所述具有相同函数名称的函数之间的差异包括:函数中的函数返回类型差异;或函数中的函数返回类型差异,以及函数中的函数修饰符差异,参数列表差异,函数体差异中的一项或多项。
除了以列表的方式指出两个程序文本的差异,还可以根据两个程序文本对应的程序结构描述信息之间的差异,定位程序文本中产生差异的语句的具体位置,从而方便程序开发人员进行程序之间对比差异的查看。
与现有技术相比,本申请实施例具有以下优点:
在本申请实施例中,将程序文本进行基于程序结构的分析生成程序结构描述信息,根据程序结构描述信息进行程序结构的比较,如果程序结构描述信息判断为相同,则判定程序文本的程序结构相同,通过本申请实施例提供的程序结构的比较方法,能够对在文本内容存在差异但程序结构上相同的程序文本进行判断,提高了程序文本比较的智能性和准确性,提高了程序开发和管理的效率。
下面结合具体的例子对本申请中的比较程序文本的方法进行详细的说明。
程序文本A1和程序文本B1均通过面向对象语言编写得到,对程序文本A1和程序文本B1分别进行程序结构分析,可以得到程序结构描述信息C1和程序结构描述信息D1,其中:
程序文本A1:
程序文本B1:
程序文本A1对应的程序结构描述信息C1
程序文本B1对应的程序结构描述信息D1:
上述程序文本A1和程序文本B1均只包括一个类,对应的程序结构描述信息C1和D1中,第一个name用于标记上述类的类全名所包括的类名,第一个modiffer用于标记上述类全名所包括的修饰符。
fields用于标记类所包括的字段对应的字段描述信息,在字段描述信息中,name用于标记字段名称,modifier用于标记字段修饰符,type用于标记字段数据类型。
methods用于标记类所包括的方法对应的方法描述信息,在方法描述信息中,name用于标记方法名称,args为用于标记参数列表,modifier用于标记方法修饰符,returntype用于标记方法返回结果数据类型,body用于标记方法体。
对程序结构描述信息C1和程序结构描述信息D1进行比较时,两个程序结构描述信息中分别只有一个类描述信息,并且具有相同的类全名,对这两个类描述信息进行比较,具体的,对C1和D1中两个类描述信息的字段描述信息和方法描述信息分别进行比较,比较结果为都相同,因此判断C1中和D1中类描述信息对应相同,并且程序结构描述信息C1和程序结构描述信息D1相同。
比较两个程序结构描述信息时,可以首先对两个程序结构描述信息中的所有类全名进行比较,将仅在其中一个程序结构描述信息中存在的类全名对应的类描述信息作为两个程序结构的差异,再对两个具有相同类全名的类描述信息进行比较,并将类全名相同但其他内容不完全相同的类描述信息的差异作为两个程序结构的差异。例如,程序结构描述信息C2中包含3个类class A,class B和class C的类描述信息,程序结构描述信息D2中包含4个类class A,classB,class D和class E的类描述信息,对C2和D2进行比较时,首先对C2的所有类全名{A,B,C}和D2的所有类全名{A,B,D,E}进行比较,比较结果为不同,其中C2中的C和D2中的D、E为两个程序结构描述信息的差异,然后继续对C2中和D2中具有相同类全名的类进行比较,即对C2和D2中的A和B对应的类描述信息分别进行比较。
对于包含多个类的两个程序结构描述信息,还可以直接对其中的类描述信息进行比较,具体为:在其中一个程序结构描述信息中选取与一个类对应的类描述信息,在另一个程序结构描述信息中查找与上述选取的类描述信息具有相同类全名的类描述信息,如果查找到,则对两个相同类全名的类描述信息进行比较,将比较得到的两个类描述信息之间的差异作为上述两个程序结构描述信息之间的差异;如果没有查找到,则将上述选取的类描述信息作为两个程序结构描述信息之间的差异。
仍以C2和D2为例,在C2中取一个类全名为A对应的类描述信息,查找在D2中是否包括类全名为A的类描述信息,查找结果为是,则进一步对两个类描述信息进行比较;对C2中的类全名为B的类描述信息进行同样的处理;当在C2中取一个类全名为C的类描述信息,查找在D2中是否具有相同类全名的的类描述信息,查找结果为没有,则C2中的类全名为C的类描述信息是和C1和D2之间的差异;同样,D2中的类全名为D和E对应的类描述信息也是C1和C2之间的差异。
比较两个类描述信息中的字段描述信息时,可以首先对两个类结构描述信息中的所有字段名称进行比较,将仅在其中一个类描述信息中存在的字段名称对应的字段描述信息作为上述两个类描述信息之间的差异,再对两个具有相同字段名称的字段描述信息进行比较,并且可以将比较得到的两个字段描述信息之间的差异作为上述两个类描述信息之间的差异。
此外,也可以直接对两个类描述信息中的字段描述信息进行比较,具体地,可以在其中一个类描述信息中选取与一个字段对应的字段描述信息,在另一个类描述信息中查找与上述选取的字段描述信息具有相同字段名称的字段描述信息,如果没有查找到,则将上述选取的字段描述信息作为上述两个类描述信息之间的差异;如果查找到,则对两个具有相同字段名称的字段描述信息进行比较,并且可以将比较得到的两个字段描述信息之间的差异作为两个类描述信息之间的差异。
对于两个类描述信息中的方法描述信息,也可以采用类似的方法进行比较。
对于面向过程程序语言编写的程序文本,同样可以采用程序结构的分析得到程序文本的程序结构描述信息。如下,程序文本A3和程序文本B3基于程序结构的分析分别得到程序结构描述信息C3和程序结构描述信息D3,程序文本A3和程序文本B3是用面向过程程序语言编写的源程序,其中:
程序文本A3:
程序文本B3:
程序文本A3对应的程序结构描述信息C3:
程序文本B3对应的程序结构描述信息D3:
在这个例子中,variables为变量描述信息,functions为函数描述信息。variables中包括了2个变量的变量描述信息,其中,name为变量名称;modifier为变量修饰符;type为变量类型;value为变量赋值;functions中包括了1个函数描述信息,其中,name为函数名称;modifier为修饰符;type为函数返回类型;parameterlist为参数列表;body为函数体。通过程序结构描述信息,给出了程序文本中所有程序结构的描述。
同样的,对于面向过程的程序结构,对两个程序结构描述信息中的变量描述信息的集合和函数描述信息的集合分别进行比较,如果变量描述信息的集合相同并且函数描述信息的集合相同,则判断两个程序结构描述信息相同,否则,判断两个程序结构描述信息不同。对程序结构描述信息C3和D3进行比较时,C3和D3中的变量描述信息variables和函数描述信息functions分别对应相同,因此,判断C3和D3相同。其中,变量描述信息的比较方法可以参照面向对象语言中对字段描述信息的比较方法,同样,函数描述信息的比较方法可以参照面向对象语言中对方法描述信息的比较方法。
本申请实施例中所给出程序结构描述信息仅为一种示例,也可以通过其它的形式或组织结构来对程序文本对应的程序结构进行描述。例如,当面向对象的程序文本中包括多个类时,可以在程序结构描述信息还包括类和字段的从属关系,用来描述类描述信息和字段描述信息的对应关系,具体的,可以通过描述字段描述信息和类全名的对应关系来实现。
下面结合上述方法,给出一个具体的示例:在本实施例中,程序文本A4和程序文本B4通过基于程序结构的分析分别得到程序结构描述信息C4和程序结构描述信息D4,其中:
程序文本A4:
程序文本B4:
程序文本A4对应的程序结构描述信息C4:
程序文本B4对应的程序结构描述信息D4:
根据程序文本A4和程序文本B4对应的程序结构描述信息C4和程序结构描述信息D4之间进行的比较。C4和D4中分别只包括一个类对应的类描述信息,并且具有相同的类全名,因此对C4中类描述信息中的字段描述信息fields和D4中类描述信息中的字段描述信息fields进行比较,对C4中类描述信息中的方法描述信息methods和D4中类描述信息中的方法描述信息methods进行比较。在C4中fields中取一个name为j1字段,在D4中查找具有相同字段名称j1的字段描述信息,结果为查找不到,因此,C4中比D4多一个name为j1的字段描述信息,对应的,可以得出程序文本A4比程序文本B4多了一个名称为j1字段;在比较C4中的fields和D4中的fields时,如果能查找到具有相同字段名称的字段描述信息,还包括对字段名称相同的字段描述信息进行比较,例如,对C4中的fields中的name为k的字段描述信息和D4中的fields中的name为k的字段描述信息进行比较,可以得出两个字段名称相同的字段描述信息中的字段修饰符不同。经过比较,可以得出C4和D4差异如下:
1.程序文本A4比程序文本B4多了一个名称为j1字段。
2.程序文本B4比程序文本A4多了一个名称为j2字段。
3.程序文本B4和程序文本A4的名称为k的字段类型不同,程序文本A4为char,程序文本B4为long.
4.程序文本B4和程序文本A4名称为p的字段修饰符不同,程序文本A4为private,程序文本B4为public.
5.程序文本A4比程序文本B4多了一个exclusiveMethod1的方法。
6.程序文本B4多了一个程序文本A4多了一个exclusiveMethod2的方法。
7.程序文本B4和程序文本A4的名称为diffModifierMethod方法的修饰符不同,其中程序文本A4为public,程序文本B4为protected;
8.程序文本B4和程序文本A4的名称为diffArgsMethod的方法的参数列表不同,程序文本A4为int i,程序文本B4为int i,int j。
其中,1为只在程序文本B4的类中存在的字段的差异,3为程序文本A4和B4相同类全名的类中字段名称相同的字段之间的差异。
在本申请实施例中,程序文本是用源语言编写的程序文件,对程序文本进行程序结构分析得到的程序结构描述信息可以输出为一个或者多个文件。本申请实施例以一个程序文本为例进行说明,在实际应用中,本申请提供的方法也可以用于源程序的对比,源程序可能由一个或多个程序文本组成,可以基于相同的构思对整个源程序进行程序结构分析得到源程序的程序结构描述信息,对于包含多个文件的源程序,可以对相同文件名的程序文本分别进行对比,或者将所有源程序的所有文件的程序结构描述信息生成在一个文件中,利用程序文本与程序结构描述信息的对应关系,类与程序文本的对应关系等信息,进行包含多个程序文本的源程序的对比。
为了实现本申请实施例的技术方案,本申请实施例还提供了一种比较程序文本的设备,其结构示意图如图2所示,具体包括:
程序结构分析模块11,用于对第一程序文本和第二程序文本分别进行程序结构分析得到第一程序结构描述信息和第二程序结构描述信息;
比较模块12,用于对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较;
判断模块13,用于根据比较模块12的比较结果,如果所述第一程序结构描述信息和所述第二程序结构描述信息比较的结果为相同,则判断所述第一程序文本和所述第二程序文本相同;如果比较的结果为不同,则判断所述第一程序文本和所述第二程序文本不同。
其中,对于面向对象程序结构,程序结构描述信息可以包括类描述信息;相应地,上述比较模块12,具体用于对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
其中,对于面向对象程序结构,程序结构描述信息还可以进一步包括类描述信息和类与程序文本之间的从属关系;相应地,上述比较模块12,具体用于根据类与程序文本之间的从属关系,确定所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息,并对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较。
其中,上述类描述信息包括类全名和字段描述信息;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,对所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息进行比较。
上述类描述信息还可以包括类全名、字段描述信息,以及类与字段之间的从属关系;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,根据类与字段之间的从属关系确定所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息,并对所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息进行比较。
上述类描述信息还可以包括类全名和方法描述信息;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,对所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息进行比较。
上述类描述信息还可以包括类全名、方法描述信息,以及类与方法之间的从属关系;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,根据类与方法之间的从属关系确定所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息,并对所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息进行比较。
其中,字段描述信息可以包括字段名称、字段修饰符和字段数据类型;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的字段描述信息包括的字段名称和所述第二程序结构描述信息中的字段描述信息包括的字段名称相同时,对所述第一程序结构描述信息中的字段描述信息包括的字段修饰符和所述第二程序结构描述信息中的字段描述信息包括的字段修饰符进行比较,对所述第一程序结构描述信息中的字段描述信息包括的字段数据类型和所述第二程序结构描述信息中的字段描述信息包括的字段数据类型进行比较。
其中,方法描述信息可以包括方法名称和方法返回结果数据类型;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的方法描述信息包括的方法名称和所述第二程序结构描述信息中的方法描述信息包括的方法名称相同时,对所述第一程序结构描述信息中的方法描述信息包括的方法返回结果数据类型和所述第二程序结构描述信息中的方法描述信息包括的方法返回结果数据类型进行比较。
其中,方法描述信息还可以包括参数列表、方法修饰符和方法体中的一项或多项;相应地,上述比较模块12还用于,当所述第一程序结构描述信息中的方法描述信息包括的方法名称和所述第二程序结构描述信息中的方法描述信息包括的方法名称相同时,对所述第一程序结构描述信息中的方法描述信息中包括的参数列表和所述第二程序结构描述信息中的方法描述信息中包括的参数列表进行比较;和/或对所述第一程序结构描述信息中的方法描述信息中包括的方法修饰符和所述第二程序结构描述信息中方法描述信息中包括的方法修饰符进行比较;和/或对所述第一程序结构描述信息中的方法描述信息中包括的方法体和所述第二程序结构描述信息中的方法描述信息中包括的方法体进行比较。
其中,对于面向过程程序结构,程序结构描述信息可以包括变量描述信息;相应地,上述比较模块12,具体用于对所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
其中,对于面向过程程序结构,程序结构描述信息还可以包括变量描述信息和变量与程序文本之间的从属关系;相应地,上述比较模块12,具体用于根据变量与程序文本之间的从属关系,确定所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息,并对所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息进行比较。
其中,变量描述信息可以包括变量名称、变量修饰符和变量类型;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的变量描述信息包括的变量名称和所述第二程序结构描述信息中的变量描述信息包括的变量名称相同时,对所述第一程序结构描述信息中的变量描述信息包括的变量修饰符和所述第二程序结构描述信息中的变量描述信息包括的变量修饰符进行比较,对所述第一程序结构描述信息中的变量描述信息包括的变量类型和所述第二程序结构描述信息中的变量描述信息包括的变量类型进行比较。
其中,对于面向过程程序结构,程序结构描述信息可以包括函数描述信息;相应地,上述比较模块12,具体用于对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
其中,对于面向过程程序结构,程序结构描述信息可以包括函数描述信息和函数与程序文本之间的从属关系;相应地,上述比较模块12,具体用于根据函数与程序文本之间的从属关系,确定所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息,并对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较。
其中,函数描述信息可以包括函数名称和函数返回结果数据类型;相应地,上述比较模块12具体用于,当所述第一程序结构描述信息中的函数描述信息包括的函数名称和所述第二程序结构描述信息中的函数描述信息包括的函数名称相同时,对所述第一程序结构描述信息中的函数描述信息包括的函数返回结果数据类型和所述第二程序结构描述信息中的函数描述信息包括的函数返回结果数据类型进行比较。
其中,函数描述信息还可以进一步包括参数列表、函数修饰符和函数体中的一项或多项;相应地,上述比较模块12还用于,当所述第一程序结构描述信息中的函数描述信息包括的函数名称和所述第二程序结构描述信息中的函数描述信息包括的函数名称相同时,对所述第一程序结构描述信息中的函数描述信息中包括的参数列表和所述第二程序结构描述信息中的函数描述信息中包括的参数列表进行比较;和/或对所述第一程序结构描述信息中的函数描述信息中包括的函数修饰符和所述第二程序结构描述信息中的函数描述信息中包括的函数修饰符进行比较;和/或对所述第一程序结构描述信息中的函数描述信息中包括的函数体和所述第二程序结构描述信息中的函数描述信息中包括的函数体进行比较。
当比较模块12比较的结果为不同时,上述设备还可以进一步包括:
结果输出模块14,用于根据比较模块12和/或判断模块13的判断结果,输出第一程序文本和第二程序文本的程序结构差异结果。
与现有技术相比,本申请实施例具有以下优点:
在本申请实施例中,将程序文本进行基于程序结构的分析生成程序结构描述信息,根据程序结构描述信息进行程序结构的比较,如果程序结构描述信息判断为相同,则判定程序文本的程序结构相同,通过本申请实施例提供的程序结构的比较方法,能够对在文本内容存在差异但程序结构上相同的程序文本进行判断,提高了程序文本比较的智能性和准确性,提高了程序开发和管理的效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请实施例可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本申请实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或网络设备等)执行本申请实施例各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请实施例所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请实施例序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本申请实施例的几个具体实施场景,但是,本申请实施例并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请实施例的业务限制范围。
Claims (36)
1.一种比较程序文本的方法,其特征在于,包括:
对第一程序文本和第二程序文本分别进行程序结构分析,得到第一程序结构描述信息和第二程序结构描述信息;
对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较;
如果比较结果为相同,则确定所述第一程序文本和所述第二程序文本相同;如果比较结果为不同,则确定所述第一程序文本和所述第二程序文本不同;
其中,当所述第一程序文本和所述第二程序文本均通过面向对象语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括类描述信息,以及类与程序文本之间的从属关系;
所述对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较,具体为:
根据类与程序文本之间的从属关系,确定所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息,并对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较。
2.如权利要求1所述的方法,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向对象语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括类描述信息;
所述对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较,具体为:
对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
3.如权利要求2所述的方法,其特征在于,所述类描述信息包括类全名和字段描述信息;
所述对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较,具体为:
当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,对所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息进行比较。
4.如权利要求2所述的方法,其特征在于,所述类描述信息包括类全名、字段描述信息,以及类与字段之间的从属关系;
所述对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较,具体为:
当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,根据类与字段之间的从属关系确定所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息,并对所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息进行比较。
5.如权利要求2所述的方法,其特征在于,所述类描述信息包括类全名和方法描述信息;
所述对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较,具体为:
当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,对所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息进行比较。
6.如权利要求2所述的方法,其特征在于,所述类描述信息包括类全名、方法描述信息,以及类与方法之间的从属关系;
所述对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较,具体为:
当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,根据类与方法之间的从属关系确定所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息,并对所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息进行比较。
7.如权利要求3所述的方法,其特征在于,所述字段描述信息包括字段名称、字段修饰符和字段数据类型;
对所述第一程序结构描述信息中的字段描述信息和所述第二程序结构描述信息中的字段描述信息进行比较,具体为:
当所述第一程序结构描述信息中的字段描述信息包括的字段名称和所述第二程序结构描述信息中的字段描述信息包括的字段名称相同时,对所述第一程序结构描述信息中的字段描述信息包括的字段修饰符和所述第二程序结构描述信息中的字段描述信息包括的字段修饰符进行比较,对所述第一程序结构描述信息中的字段描述信息包括的字段数据类型和所述第二程序结构描述信息中的字段描述信息包括的字段数据类型进行比较。
8.如权利要求5所述的方法,其特征在于,所述方法描述信息包括方法名称和方法返回结果数据类型;
对所述第一程序结构描述信息中的方法描述信息和所述第二程序结构描述信息中的方法描述信息进行比较,具体为:
当所述第一程序结构描述信息中的方法描述信息包括的方法名称和所述第二程序结构描述信息中的方法描述信息包括的方法名称相同时,对所述第一程序结构描述信息中的方法描述信息包括的方法返回结果数据类型和所述第二程序结构描述信息中的方法描述信息包括的方法返回结果数据类型进行比较。
9.如权利要求8所述的方法,其特征在于,所述方法描述信息还包括参数列表、方法修饰符和方法体中的一项或多项;
所述对所述第一程序结构描述信息中的方法描述信息和所述第二程序结构描述信息中的方法描述信息进行比较,还包括:
当所述第一程序结构描述信息中的方法描述信息包括的方法名称和所述第二程序结构描述信息中的方法描述信息包括的方法名称相同时,对所述第一程序结构描述信息中的方法描述信息中包括的参数列表和所述第二程序结构描述信息中的方法描述信息中包括的参数列表进行比较;
和/或,对所述第一程序结构描述信息中的方法描述信息中包括的方法修饰符和所述第二程序结构描述信息中方法描述信息中包括的方法修饰符进行比较;
和/或,对所述第一程序结构描述信息中的方法描述信息中包括的方法体和所述第二程序结构描述信息中的方法描述信息中包括的方法体进行比较。
10.如权利要求1所述的方法,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括变量描述信息;
所述对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较,具体为:
对所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
11.如权利要求1所述的方法,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括变量描述信息和变量与程序文本之间的从属关系;
所述对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较,具体为:
根据变量与程序文本之间的从属关系,确定所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息,并对所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息进行比较。
12.如权利要求10或11所述的方法,其特征在于,所述变量描述信息包括变量名称、变量修饰符和变量类型;
所述对所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息进行比较,具体为:
当所述第一程序结构描述信息中的变量描述信息包括的变量名称和所述第二程序结构描述信息中的变量描述信息包括的变量名称相同时,对所述第一程序结构描述信息中的变量描述信息包括的变量修饰符和所述第二程序结构描述信息中的变量描述信息包括的变量修饰符进行比较,对所述第一程序结构描述信息中的变量描述信息包括的变量类型和所述第二程序结构描述信息中的变量描述信息包括的变量类型进行比较。
13.如权利要求1所述的方法,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括函数描述信息;
所述对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较,具体为:
对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
14.如权利要求1所述的方法,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括函数描述信息和函数与程序文本之间的从属关系;
所述对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较,具体为:
根据函数与程序文本之间的从属关系,确定所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息,并对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较。
15.如权利要求13或14所述的方法,其特征在于,所述函数描述信息包括函数名称和函数返回结果数据类型;
对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较,具体为:
当所述第一程序结构描述信息中的函数描述信息包括的函数名称和所述第二程序结构描述信息中的函数描述信息包括的函数名称相同时,对所述第一程序结构描述信息中的函数描述信息包括的函数返回结果数据类型和所述第二程序结构描述信息中的函数描述信息包括的函数返回结果数据类型进行比较。
16.如权利要求15所述的方法,其特征在于,所述函数描述信息还包括参数列表、函数修饰符和函数体中的一项或多项;
对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较,还包括:
当所述第一程序结构描述信息中的函数描述信息包括的函数名称和所述第二程序结构描述信息中的函数描述信息包括的函数名称相同时,对所述第一程序结构描述信息中的函数描述信息中包括的参数列表和所述第二程序结构描述信息中的函数描述信息中包括的参数列表进行比较;
和/或,对所述第一程序结构描述信息中的函数描述信息中包括的函数修饰符和所述第二程序结构描述信息中的函数描述信息中包括的函数修饰符进行比较;
和/或,对所述第一程序结构描述信息中的函数描述信息中包括的函数体和所述第二程序结构描述信息中的函数描述信息中包括的函数体进行比较。
17.如权利要求1所述的方法,其特征在于,当所述第一程序结构描述信息和所述第二程序结构描述信息比较的结果为不同时,还包括:
根据所述第一程序结构描述信息和所述第二程序结构描述信息的差异,输出所述第一程序文本和所述第二程序文本的程序结构差异结果。
18.如权利要求17所述的方法,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向对象语言编写时,所述程序结构差异结果具体包括:只在一个程序文本中存在的类和/或两个程序文本中具有相同类全名的类之间的差异;
其中,所述具有相同类全名的类之间的差异包括:只在一个类中存在的字段、两个程序文本中具有相同字段名称的字段之间的差异、只在一个类中存在的方法和两个程序文本中具有相同方法名称的方法之间的差异中的一项或多项;
其中,所述具有相同字段名称的字段之间的差异包括:字段中的修饰符差异和变量类型差异;
其中,所述具有相同方法名称的方法之间的差异包括:方法中的返回结果数据类型差异;
或,方法中的返回结果数据类型差异、修饰符差异、参数列表差异和方法体差异中的一项或多项。
19.如权利要求17所述的方法,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述程序结构差异结果具体包括:只在一个程序文本中存在的变量、两个程序文本中具有相同变量名称的变量之间的差异、只在一个程序文本中存在的函数和两个程序文本中具有相同函数名称的函数之间的差异中一项或多项;
其中,所述具有相同变量名称的变量之间的差异包括:变量中的修饰符差异和变量类型差异;
其中,所述具有相同函数名称的函数之间的差异包括:函数中的函数返回类型差异;
或,函数中的函数返回类型差异、函数修饰符差异、参数列表差异和函数体差异中的一项或多项。
20.一种比较程序文本的设备,其特征在于,包括:
程序结构分析模块,用于对第一程序文本和第二程序文本分别进行程序结构分析得到第一程序结构描述信息和第二程序结构描述信息;
比较模块,用于对所述第一程序结构描述信息和所述第二程序结构描述信息进行比较;
判断模块,用于根据比较模块的比较结果,如果所述第一程序结构描述信息和所述第二程序结构描述信息比较的结果为相同,则判断所述第一程序文本和所述第二程序文本相同;如果比较的结果为不同,则判断所述第一程序文本和所述第二程序文本不同;
其中,当所述第一程序文本和所述第二程序文本均通过面向对象语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括类描述信息,以及类与程序文本之间的从属关系;
所述比较模块,具体用于根据类与程序文本之间的从属关系,确定所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息,并对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较。
21.如权利要求20所述的设备,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向对象语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括类描述信息;
所述比较模块,具体用于对所述第一程序结构描述信息中的类描述信息和所述第二程序结构描述信息中的类描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
22.如权利要求21所述的设备,其特征在于,所述类描述信息包括类全名和字段描述信息;
所述比较模块具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,对所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息进行比较。
23.如权利要求21所述的设备,其特征在于,所述类描述信息包括类全名、字段描述信息,以及类与字段之间的从属关系;
所述比较模块具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,根据类与字段之间的从属关系确定所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息,并对所述第一程序结构描述信息中的类描述信息包括的字段描述信息和所述第二程序结构描述信息中的类描述信息包括的字段描述信息进行比较。
24.如权利要求21所述的设备,其特征在于,所述类描述信息包括类全名和方法描述信息;
所述比较模块具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,对所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息进行比较。
25.如权利要求21所述的设备,其特征在于,所述类描述信息包括类全名、方法描述信息,以及类与方法之间的从属关系;
所述比较模块具体用于,当所述第一程序结构描述信息中的类描述信息包括的类全名与所述第二程序结构描述信息中的类描述信息包括的类全名相同时,根据类与方法之间的从属关系确定所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息,并对所述第一程序结构描述信息中的类描述信息包括的方法描述信息和所述第二程序结构描述信息中的类描述信息包括的方法描述信息进行比较。
26.如权利要求22所述的设备,其特征在于,所述字段描述信息包括字段名称、字段修饰符和字段数据类型;
所述比较模块具体用于,当所述第一程序结构描述信息中的字段描述信息包括的字段名称和所述第二程序结构描述信息中的字段描述信息包括的字段名称相同时,对所述第一程序结构描述信息中的字段描述信息包括的字段修饰符和所述第二程序结构描述信息中的字段描述信息包括的字段修饰符进行比较,对所述第一程序结构描述信息中的字段描述信息包括的字段数据类型和所述第二程序结构描述信息中的字段描述信息包括的字段数据类型进行比较。
27.如权利要求24所述的设备,其特征在于,所述方法描述信息包括方法名称和方法返回结果数据类型;
所述比较模块具体用于,当所述第一程序结构描述信息中的方法描述信息包括的方法名称和所述第二程序结构描述信息中的方法描述信息包括的方法名称相同时,对所述第一程序结构描述信息中的方法描述信息包括的方法返回结果数据类型和所述第二程序结构描述信息中的方法描述信息包括的方法返回结果数据类型进行比较。
28.如权利要求27所述的设备,其特征在于,所述方法描述信息还包括参数列表、方法修饰符和方法体中的一项或多项;
所述比较模块还用于,当所述第一程序结构描述信息中的方法描述信息包括的方法名称和所述第二程序结构描述信息中的方法描述信息包括的方法名称相同时,对所述第一程序结构描述信息中的方法描述信息中包括的参数列表和所述第二程序结构描述信息中的方法描述信息中包括的参数列表进行比较;
和/或,对所述第一程序结构描述信息中的方法描述信息中包括的方法修饰符和所述第二程序结构描述信息中方法描述信息中包括的方法修饰符进行比较;
和/或,对所述第一程序结构描述信息中的方法描述信息中包括的方法体和所述第二程序结构描述信息中的方法描述信息中包括的方法体进行比较。
29.如权利要求20所述的设备,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括变量描述信息;
所述比较模块,具体用于对所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
30.如权利要求20所述的设备,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括变量描述信息和变量与程序文本之间的从属关系;
所述比较模块,具体用于根据变量与程序文本之间的从属关系,确定所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息,并对所述第一程序结构描述信息中的变量描述信息和所述第二程序结构描述信息中的变量描述信息进行比较。
31.如权利要求29或30所述的设备,其特征在于,所述变量描述信息包括变量名称、变量修饰符和变量类型;
所述比较模块具体用于,当所述第一程序结构描述信息中的变量描述信息包括的变量名称和所述第二程序结构描述信息中的变量描述信息包括的变量名称相同时,对所述第一程序结构描述信息中的变量描述信息包括的变量修饰符和所述第二程序结构描述信息中的变量描述信息包括的变量修饰符进行比较,对所述第一程序结构描述信息中的变量描述信息包括的变量类型和所述第二程序结构描述信息中的变量描述信息包括的变量类型进行比较。
32.如权利要求20所述的设备,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括函数描述信息;
所述比较模块,具体用于对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较,如果比较结果为相同,则确定两个程序结构描述信息相同;否则,确定所述两个程序结构描述信息不同。
33.如权利要求20所述的设备,其特征在于,当所述第一程序文本和所述第二程序文本均通过面向过程语言编写得到时,所述第一程序结构描述信息和所述第二程序结构描述信息均包括函数描述信息和函数与程序文本之间的从属关系;
所述比较模块,具体用于根据函数与程序文本之间的从属关系,确定所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息,并对所述第一程序结构描述信息中的函数描述信息和所述第二程序结构描述信息中的函数描述信息进行比较。
34.如权利要求32或33所述的设备,其特征在于,所述函数描述信息包括函数名称和函数返回结果数据类型;
所述比较模块具体用于,当所述第一程序结构描述信息中的函数描述信息包括的函数名称和所述第二程序结构描述信息中的函数描述信息包括的函数名称相同时,对所述第一程序结构描述信息中的函数描述信息包括的函数返回结果数据类型和所述第二程序结构描述信息中的函数描述信息包括的函数返回结果数据类型进行比较。
35.如权利要求34所述的设备,其特征在于,所述函数描述信息还包括参数列表、函数修饰符和函数体中的一项或多项;
所述比较模块还用于,当所述第一程序结构描述信息中的函数描述信息包括的函数名称和所述第二程序结构描述信息中的函数描述信息包括的函数名称相同时,对所述第一程序结构描述信息中的函数描述信息中包括的参数列表和所述第二程序结构描述信息中的函数描述信息中包括的参数列表进行比较;和/或对所述第一程序结构描述信息中的函数描述信息中包括的函数修饰符和所述第二程序结构描述信息中的函数描述信息中包括的函数修饰符进行比较;和/或对所述第一程序结构描述信息中的函数描述信息中包括的函数体和所述第二程序结构描述信息中的函数描述信息中包括的函数体进行比较。
36.如权利要求20所述的设备,其特征在于,当所述比较模块比较的结果为不同时,还包括,结果输出模块,用于根据比较模块和/或判断模块的判断结果,输出所述第一程序文本和所述第二程序文本的差异结果。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110064354.9A CN102681830B (zh) | 2011-03-17 | 2011-03-17 | 一种比较程序文本的方法和设备 |
HK12110640.9A HK1170036A1 (zh) | 2011-03-17 | 2012-10-25 | 種比較程序文本的方法和設備 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110064354.9A CN102681830B (zh) | 2011-03-17 | 2011-03-17 | 一种比较程序文本的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102681830A CN102681830A (zh) | 2012-09-19 |
CN102681830B true CN102681830B (zh) | 2015-09-02 |
Family
ID=46813815
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110064354.9A Active CN102681830B (zh) | 2011-03-17 | 2011-03-17 | 一种比较程序文本的方法和设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102681830B (zh) |
HK (1) | HK1170036A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110069455B (zh) * | 2017-09-21 | 2021-12-14 | 北京华为数字技术有限公司 | 一种文件合并方法及装置 |
CN108023808B (zh) * | 2017-12-07 | 2020-10-16 | 深圳乐信软件技术有限公司 | 应用程序中的消息分发方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040210885A1 (en) * | 2000-11-14 | 2004-10-21 | Microsoft Corporation | Methods for comparing versions of a program |
US20090313271A1 (en) * | 2008-06-16 | 2009-12-17 | Robert Zeidman | Detecting copied computer source code by examining computer object code |
-
2011
- 2011-03-17 CN CN201110064354.9A patent/CN102681830B/zh active Active
-
2012
- 2012-10-25 HK HK12110640.9A patent/HK1170036A1/zh unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040210885A1 (en) * | 2000-11-14 | 2004-10-21 | Microsoft Corporation | Methods for comparing versions of a program |
US20090313271A1 (en) * | 2008-06-16 | 2009-12-17 | Robert Zeidman | Detecting copied computer source code by examining computer object code |
Also Published As
Publication number | Publication date |
---|---|
CN102681830A (zh) | 2012-09-19 |
HK1170036A1 (zh) | 2013-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11789715B2 (en) | Systems and methods for transformation of reporting schema | |
CN110032369A (zh) | 一种代码自动生成方法、装置及介质 | |
CN109684838B (zh) | 一种针对以太坊智能合约的静态代码审计系统及方法 | |
US20090049438A1 (en) | Method for Optimizing Migration of Software Applications to Address Needs | |
CN107958057A (zh) | 一种用于异构数据库中数据迁移的代码生成方法及装置 | |
CN106155651A (zh) | 应用程序版本的自动化发布及更新的方法和系统 | |
CN110825363B (zh) | 智能合约获取方法、装置、电子设备及存储介质 | |
CA2967251A1 (en) | Intelligent code differencing using code clone detection | |
US8607217B2 (en) | Incremental upgrade of entity-relationship systems | |
CN105183476B (zh) | 一种跨平台应用程序的构建方法和装置 | |
CN111316232A (zh) | 使用程序的注释来提供优化 | |
JPWO2017033441A1 (ja) | システム構築支援システム、方法および記憶媒体 | |
CN115033896B (zh) | 以太坊智能合约漏洞检测方法、装置、系统与介质 | |
KR101379855B1 (ko) | 메인프레임 시스템의 계층형 데이터베이스를 개방형 시스템의 리호스팅 솔루션에 구축된 데이터베이스로 적재하는 데이터 마이그레이션 방법과 장치 | |
Fill et al. | Formalizing meta models with FDMM: the ADOxx case | |
CN104731588A (zh) | 页面布局文件生成方法和页面布局文件生成装置 | |
Taj et al. | To apply data mining for classification of crowd sourced software requirements | |
Baquero et al. | Predicting the programming language: Extracting knowledge from stack overflow posts | |
Cartright et al. | Galago: A Modular Distributed Processing and Retrieval System. | |
CN102681830B (zh) | 一种比较程序文本的方法和设备 | |
CN109816038A (zh) | 一种物联网固件程序分类方法及其装置 | |
Jahanbin et al. | Intelligent run-time partitioning of low-code system models | |
Van Geet et al. | Redocumentation of a legacy banking system: an experience report | |
US8214336B2 (en) | Preservation of digital content | |
Lamhaddab et al. | Model driven reverse engineering: graph modeling for mobiles platforms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1170036 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1170036 Country of ref document: HK |