是否有通用lint(-toolkit)?

时间:2010-10-04 16:38:41

标签: static-analysis lint static-code-analysis

我想对一堆用不太常见的编程语言编写的脚本进行静态代码分析(C语法)。经常出现的问题是:

  • 使用未定义/声明的符号
  • 调用函数时错误的参数数量或类型

语言解释器/编译器本身不提供这些问题的帮助。

是否有类似工具的lint足够灵活,可以轻松地适应新的编程语言?或者有人知道另一个好的起点吗? (Lex / Yacc ???)

提前致谢

4 个答案:

答案 0 :(得分:2)

我怀疑你是否会找到一个通用的工具。

许多静态分析不仅仅取决于词汇和语法的合规性。

一个好的静态分析器将具有语言及其实现的额外上下文知识。它还可能包括一个跟踪状态和多个执行路径的模拟器。此外,它可能知道模式和实践,以及某些库和调用。

例如,在C中,此代码if ( x = 3 ) { /*Do something*/ }完全合法,尽管程序员可能打算==。或者,可能会printf("%s", longVal);,并且虽然可以在堆栈上推送任意值,但该特定调用可能会基于传递给它的初始值而具有其他期望。

总而言之,通用lint应用程序需要知道多少,更不用说语言和库是一个移动的目标,如果这样的野兽确实存在,它要么太复杂,要么太过分实际应用的能力不足,而不是更便宜的工具,可以更好地完成语言工作。

答案 1 :(得分:2)

商用DMS Software Reengineering Toolkit允许编写此类一致性检查,并且足够灵活,可以适应多种语言。

答案 2 :(得分:0)

考虑Vera Community Edition或Google cpplint提供您可以自定义的代码。

答案 3 :(得分:0)

花了几个小时玩PHP_CodeSniffer和another thread here中建议的其他人...我得出结论PHPlint是我的方法。如果没有其他原因,它可以正确检测调用具有错误数量的参数的函数的代码。