在源代码中查找模式

时间:2009-02-10 12:09:39

标签: algorithm pattern-recognition

如果我想了解一般的模式识别什么是一个好的起点(推荐一本书)?

此外,是否有人对如何应用这些算法在程序中查找抽象模式有任何经验/知识? (重复的代码,执行相同操作的代码块,但方式略有不同,等等。)

由于

编辑:我不介意数学密集型书籍。事实上,这将是一件好事。

8 个答案:

答案 0 :(得分:2)

如果你在数学上有合理的信心,那么Chris Bishop的书籍“模式识别和机器学习”或“模式识别的神经网络”都非常适合学习模式识别。

答案 1 :(得分:1)

如果您可以访问编译期间生成的解析树,则会有所帮助。通过这种方式,您可以查找相似的树的部分,忽略比您正在查看的更深的节点,这样您就可以选择例如将两个子表达式相乘的节点,忽略子表达式的内容。您可以将相同的逻辑应用于节点集合,例如你想找到两个子表达式的乘法,其中这两个子表达式是更多子表达式的加法。你首先查找乘法,然后检查乘法下面的两个节点是否是加法,忽略任何更深的东西。

答案 2 :(得分:0)

我建议查看一些开源项目的代码(例如FindBugsSIM) 这就是你所说的那种。

答案 3 :(得分:0)

如果您使用的是其中一种受支持的语言,IntelliJ的想法会非常适合您的问题{/ 3}}。

答案 4 :(得分:0)

其他有趣的项目包括PMDEclipse

Eclipse对任何项目中的所有源代码使用AST(抽象语法树)。然后,工具可以注册某些类型的AST(如Java源代码),并获得预处理视图,以便添加其他信息(如文档链接,错误标记等)。

答案 5 :(得分:0)

您可以查看的另一个项目是Duplo - 它是一个开源/ GPL项目,因此您可以通过抓取SourceForge中的代码来实现他们的方法。

答案 6 :(得分:0)

这是特定于.Net和visual studio,但它会在您的项目中找到重复的代码。它确实报告了我发现的一些误报,但它可能是一个很好的起点。

Clone Detective

答案 7 :(得分:0)

一种模式是通过复制和粘贴方法克隆的代码。请参阅CloneDR,通过比较相关语言的抽象语法树,可以自动找到此类代码的工具,尽管布局有变化,甚至克隆体也发生了变化。

CloneDR适用于各种语言:C,C ++,C#,Java,JavaScript,PHP,COBOL,Python,...该网站显示各种编程语言的克隆检测报告。