问个技术难题,发现中文的资料很少,希望大家给点idea
小弟这几个月一直在写一个Diff软件,就类似于win merge,和XML diff。。。。来判断两个file的相同和不同的地方,和判断两个目录的相似度。
这里的文件,是在一种形式化方法过程中一个叫refinement阶段产生的,文件叫做verification condition files. 简称VCs.
一旦代码改变,这些verification condition file 也改变。
我的任务就是开发一种软件,来探测这种改变。
verification condition是基于 first order logic的,所以也就是说,是一种特殊的文件。
这里的比较,不是flat-based, 而是structured based,基于结构化的比较。
有一个标准,可以把上述的VCs转化成 一种特殊的Abstract Syntax tree.
通过比较两个文件分别生成的AST 树(不是普通的树,严格意义上讲,是一种图和树的结合物。),然后通过树的比较和操作来探测改变。
我的问题也来了。
既然生成AST 树,就能用广度遍历它,进而得到一个序列,然后比较序列。
我现在是能找到树的树根,但是树的全部,不容易访问。我特别想用一个for的递归算法,来迭代的访问树。
但是好像java api中getNext()方法不能用,所有的数据结构都得我自己写。
我想问,有没有其他方法来得到树的序列?
按照一般的思路,比如
Compared(tree t1, tree t2)
if(t1.root == t2.root)
{
CompTree(tree1-> leftchild,tree2-> leftchild);
CompTree(tree1-> rightchild,tree2-> rightchild);
}
但是我思考了,发现这种方法可能行不通。
大家有什么想法没?