Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是C++;意识到的 有没有一个免费的差异实用程序,可以用它们的AST来比较两个C++文件,而不是文本?_C++_G++_Diff_Clang_Abstract Syntax Tree - Fatal编程技术网

是C++;意识到的 有没有一个免费的差异实用程序,可以用它们的AST来比较两个C++文件,而不是文本?

是C++;意识到的 有没有一个免费的差异实用程序,可以用它们的AST来比较两个C++文件,而不是文本?,c++,g++,diff,clang,abstract-syntax-tree,C++,G++,Diff,Clang,Abstract Syntax Tree,我想的是: -将两个文件转换为AST -将AST返回为C++代码(这意味着缩进) -这两者之间有正常差异吗 -还可以尝试检测已完成的简单重构(例如添加/删除/重命名成员)在进行差异之前,您可以通过AStyle将代码传递给AStyle,以规范缩进/间距/格式。这对重构没有任何作用,但老实说,您需要一个完整的预处理/编译过程才能正确地完成AFAICS 我可以想出两种解决您问题的备选方案: 讨论将作为一个小组使用的编码风格,并坚持下去。您可能需要在团队成员不同的个人编码风格之间找到折衷方案 如果您使用

我想的是: -将两个文件转换为AST -将AST返回为C++代码(这意味着缩进) -这两者之间有正常差异吗
-还可以尝试检测已完成的简单重构(例如添加/删除/重命名成员)

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


我可以想出两种解决您问题的备选方案:

  • 讨论将作为一个小组使用的编码风格,并坚持下去。您可能需要在团队成员不同的个人编码风格之间找到折衷方案

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


  • [另一位回答者要求张贴商业工具的名称。]

    语义设计的StaseDealSuff工具将解析C++,并基于AST计算差异;布局格式根本不重要。该解析器是一个完整的C++11解析器。它可以解析大多数源文件,而无需扩展大多数预处理器指令,只要它们是“结构化的”;C++预处理器的用法通常不像C.

    滥用。 SmartDifferenticer还有其他语言的版本


    [披露:我是语义设计公司的首席技术官]

    有一些工具,比如MOSS()可能会有所帮助。

    那会很慢,我无法想象为什么会有人想要这样的东西。我想这是为了抓住学生中的作弊行为。这是为了让另一个讨厌我的编码风格的程序员能够审查我代码中的代码更改。由于我们的团队没有正式的样式规则,这种工具将非常有用。@tohava您的团队应该在为时已晚之前实施正式的代码样式规则。如果他在没有做其他更改的情况下重新格式化您的代码(或您对他也这样做),请告诉他停止(或停止这样做)。此外,您还应该就代码样式达成一致意见,并使用IDE设置或预检入代码格式化程序等工具强制执行。不管你喜欢与否,重要的是每个人的代码都是一致的。这个工具不强制使用规范形式。以“int main()\n{\n}”与“int main\n()\n{\n}”为例。它们的产量并不相同。在这种情况下,一个能够将代码编译成AST的工具会很有帮助。我认为你不理解你的要求。一个完整的AST过程需要(至少!)一个完整的预处理器过程,这意味着每个#include将被展开,每个#define将被展开,等等。在许多情况下,您的代码与开始时的代码几乎没有相似之处。这甚至没有考虑到“检测重构”部分,这看起来就像一个白日梦。让我们跳过检测重构。在漂亮的打印过程中,#includes可以很容易地回滚(我们有#line指令或类似的指令)。宏更为棘手,我认为如果预处理器被修改为创建类似javascript线条图的东西,漂亮的打印机就可以使用它来回滚宏,那么它们仍然可以被处理。我遗漏了什么吗?好吧,你问了很多,如果你想要一个免费的预先存在的实用程序,为你做所有这些。为了回答你最初的问题,我认为如果你想要一个符合你所描述的一切的东西,你需要把它写下来。你最好和你的同事谈谈,或者找一份新的工作,或者找一份新的工作,IMO.,有商业广告工具,它将解析C++,并基于AST计算差异。我所知道的一个可以解析源文件而不必扩展大多数预处理器指令(只要它们是结构化的);C++预处理器的用法通常不像C中那样滥用。