2010-06-26 34 views
3

之间是否有任何Linux/Windows的一种工具,它将使我们能够确定是否在C特定功能的逻辑是一样的,在一个特定的功能C++?工具来确定的相似逻辑的C函数和C++

+0

“逻辑学”在什么意义?相同的控制结构? – 2010-06-26 15:57:26

+0

考虑到C中的addElement()使用特定的逻辑在链表的开头添加了一个元素。因此,该工具应该能够确定/识别C++中的特定函数是否也使用相同的逻辑王来在链表的开始处添加元素。 – 2010-06-26 16:01:32

+0

男:所以你正在寻找一个流程图发生器?在C和C++中实现这个的不同方法呢?见弗雷德的答案如下。 – 2010-06-26 16:03:41

回答

11

一般来说,图灵机的等价为undecidable,所以没有。

+1

这个问题在一般情况下是不可能的,并不能证明一个有用的工具(即可以获得简单案例的工具)是不可能的。 – dmckee 2010-06-26 20:48:07

+0

事实上,dmckee指出,代码的AST匹配给出了答案的近似值,至少对于复制粘贴的代码。 – 2010-06-28 15:52:11

-1

我觉得有这样一个工具,叫做装配上市。

1

如果您只是谈论控制结构,if/else,代码块,swtich/case,while等等,并且如果您愿意能够接受“gettign一个很好的感觉”,宁可比100%准确,然后一张图片可能工作千言万语,你可能会看一个代码流程图程序。

我不会推荐任何东西,因为我不太了解它们(但是一直都想尝试它们,特别是如果是往返旅行的话,可能不容易找到一些免费的东西。看到这样的事情...... alt text http://www.ezprog.com/wp-content/uploads/flowchart.gif

是,你有什么想法?难道它C和C++版本中,你可以得到一个粗略的感受逻辑的相似性。

也许你能告诉我们多一点你在寻找什么?帮助我们来帮助你?谢谢。

+0

比“查看流程图”更复杂的方法是构造程序依赖图(带/不带静态单赋值)并尝试图匹配。本文使用这个想法来查找代码克隆:Jens Krinke:用程序依赖关系图识别类似代码。 WCRE 2001:301-309好消息是它在一定程度上有效;坏消息是它不能扩展到真正的大系统。更可伸缩的方法使用了词汇标记或AST匹配的匹配。 – 2010-06-29 01:06:44

1

你可以想像一个工具,比较STRU在编译器完成初始转换为抽象表示或经过一次或多次优化之后,编译器将执行AST

这可能

  1. 错过一些真正的匹配(即产生假阴性)
  2. 找出一些虚假的比赛(即产生误报)

有了调整,你可以强制第二种情况更普遍。我不知道如何将它作为vgrep流程的前端有用。

但它变得更糟,因为你已经要求跨语言实施,并且使它更难。尽管如此,gcc对所有东西都使用相同的抽象表示,所以它不会超出想象。

这么说,我知道没有这样的工具。

+0

有一个工具,确实*这*。它被称为CloneDR(http://www.semanticdesigns.com/Products/Clone)这比较了源代码的AST以验证“相似性”。 CloneDR处理包括C和C++在内的许多语言您几乎不需要跨语言实现; C通常足够接近被C++解析器所吞噬,并且更容易对C代码进行轻微更改,而不是创建这样的跨语言工具。 – 2010-06-28 15:50:42

+0

@Ira:谢谢......哇!该网站提出了一些非常强烈的主张。有人知道它在现实生活中有多好? – dmckee 2010-06-28 15:58:43

+0

我是作者。我认为它工作得很好。你必须形成你自己的意见。您可以下载评估版来这样做。 – 2010-06-28 19:30:44