可识别C ++的Diff实用程序

时间:2013-01-09 18:37:26

标签: c++ g++ diff clang abstract-syntax-tree

是否有一个免费的diff实用程序可以使用它们的AST而不是文本比较两个C ++文件?

我在想的是:   - 将两个文件转换为AST   - 将AST渲染为C ++代码(这标准化了缩进)   - 在这两者之间做正常的差异   - 还尝试检测已完成的简单重构(例如添加/ del / rename成员)

4 个答案:

答案 0 :(得分:4)

[其他一位发言人要求发布商业工具的名称。]

Semantic Designs的SmartDifferencer工具将解析C ++,并根据AST计算差异;布局格式化无关紧要。解析器是一个完整的C ++ 11解析器。它可以解析大多数源文件而不扩展大多数预处理器指令,只要它们是“结构化”的; C ++预处理器的使用通常不像在C中那样具有滥用性。

有其他语言版本的SmartDifferencer。

[披露:我是Semantic Designs的首席技术官]

答案 1 :(得分:2)

我可以为您的问题考虑两种替代解决方案:

  1. 讨论将作为一个组使用并坚持下去的编码风格。您可能必须在团队成员的不同个人编码风格之间找到妥协。

  2. 如果您正在使用源代码管理,请添加删除提交时删除所有格式的挂钩,并在结帐时自定义代码格式。这需要一些工作,但允许团队成员使用自己的格式样式。当然,这并不能解决变量命名和其他非格式化代码样式元素的不同意见。

答案 2 :(得分:2)

像MOSS(http://theory.stanford.edu/~aiken/moss/)这样的工具可能会有所帮助。

答案 3 :(得分:1)

您可以在执行diff之前通过AStyle传递代码以标准化缩进/间距/格式。这对重构没有任何作用,但老实说,你需要一个完整的预处理/编译通道才能正确地完成AFAICS。

http://astyle.sourceforge.net/