有没有一个开源的java api允许比较两个抽象语法树的java源代码?

我想看看两个语法树之间的差异,类似于在diff工具中完成的方式。

===============>>#1 票数:7

是的,有输出树差异的免费实现:

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

===============>>#2 票数:6 已采纳

大多数diff工具比较行,而不是语法树(请参阅Wikipedia文章以供讨论 )。

有一些技术论文谈论如何进行语法树比较,例如, Diff / TS:用于细粒度结构变化分析的工具

据我所知,在任何地方都没有用于计算树差异的API。 如果你想获得最小的差异,问题比第一次听起来更复杂。 但基本技术是使用Levenstein距离度量的一些变化。

我们不得不为我们的SmartDifference系列推出自己的产品 ; 幸运的是,我们有很多很好的前端,可以产生准确的AST。

你最终会有额外的惊喜,例如想要比较评论的人,尽管你有AST是什么,想要比较破碎的文件,比较你的语法不匹配的语言方言,或者包含插入的代码其他语言等等。按行进行差异没有这些问题,这是一个普遍存在行差异和树差异的原因之一。

===============>>#3 票数:2

我想知道是否有一个可以做到这一点的ANTLR扩展....

http://www.antlr.org/

http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g

  ask by translate from so

未解决问题?本站智能推荐: