8 java api abstract-syntax-tree
有没有一个开源的java api允许比较两个抽象语法树的java源代码?
我想看看两个语法树之间的差异,类似于在diff工具中完成的方式.
大多数diff工具比较行,而不是语法树(请参阅Wikipedia文章以供讨论).
有一些技术论文谈论如何进行语法树比较,例如, Diff/TS:用于细粒度结构变化分析的工具
据我所知,在任何地方都没有用于计算树差异的API.如果你想获得最小的差异,问题比第一次听起来更复杂.但基本技术是使用Levenstein距离度量的一些变化.
我们不得不为我们的SmartDifference系列推出自己的产品 ; 幸运的是,我们有很多很好的前端,可以产生准确的AST.
你最终会有额外的惊喜,例如想要比较评论的人,尽管你有AST是什么,想要比较破碎的文件,比较你的语法不匹配的语言方言,或者包含插入的代码其他语言等等.按行进行差异没有这些问题,这是一个普遍存在行差异和树差异的原因之一.
是的,有输出树差异的免费实现:
gumtree(快速,多语言,与git集成):http ://www.labri.fr/perso/falleri/perso/tools/gumtree/ https://github.com/jrfaller/gumtree
ChangeDistiller(相当成熟,作为一个独立的库构建):https://bitbucket.org/sealuzh/tools-changedistiller/wiki/Home
CodingSpectator(ast diffing在其余代码中硬编码):https://github.com/vazexqi/CodingSpectator/tree/codingtracker-ast-inference