小弟这几个月一直在写一个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);
}但是我思考了,发现这种方法可能行不通。
大家有什么想法没?

解决方案 »

  1.   

    XMLUnit 中有xml文档/片段的比较,不知有参考价值没
      

  2.   

    比较文件的差别,这个UltraEdit-32就可以做,项目管理的软件也都做了,好像不要这么麻烦吧............
      

  3.   

    去看jmeld的代码吧!
    http://jmeld.svn.sourceforge.net/viewvc/jmeld/trunk/
      

  4.   

    树的遍历,有很多,不知道楼主要怎么遍历。api 没有提供也是很正常的,但自己应该也不会很难,参考一下别人的例子,主要是看人家的思路。递归,不递归这都无所谓。
      

  5.   

    XML比对有什么现成的好用的工具没有啊?