我想对用一种不太常见的编程语言(类似 C 的语法)编写的一堆脚本进行静态代码分析。常见的问题是:
- 使用未定义/声明的符号
- 调用函数时参数的数量或类型错误
语言解释器/编译器本身并不为这些问题提供帮助。
是否有任何类似 lint 的工具足够灵活,可以轻松地适应新的编程语言?或者有人知道另一个好的起点吗?(莱克斯/雅克???)
提前致谢
我想对用一种不太常见的编程语言(类似 C 的语法)编写的一堆脚本进行静态代码分析。常见的问题是:
语言解释器/编译器本身并不为这些问题提供帮助。
是否有任何类似 lint 的工具足够灵活,可以轻松地适应新的编程语言?或者有人知道另一个好的起点吗?(莱克斯/雅克???)
提前致谢
市售的DMS Software Reengineering Toolkit允许编写此类一致性检查,并且足够灵活以适应多种语言。
我怀疑你会找到一个通用的工具。
许多静态分析不仅仅依赖于词汇和语法的合规性。
一个好的静态分析器将具有语言及其实现的额外上下文知识。它还可能包括一个跟踪状态和多个执行路径的模拟器。此外,它可能知道模式和实践,以及某些库和调用。
例如,在 C 中,这段代码if ( x = 3 ) { /*Do something*/ }
是完全合法的,尽管程序员可能有意==
. 或者,可以这样做printf("%s", longVal);
,虽然可以将任意值推入堆栈,但该特定调用可能具有基于传递给它的初始值的其他期望。
归根结底,一个通用的 lint 应用程序要知道的东西太多了,更不用说语言和库是一个移动的目标,如果确实存在这样的野兽,它要么太复杂,要么功能太弱,无法实用应用程序比一个更便宜的工具可以更好地完成特定于语言的工作。
考虑Vera Community Edition或 Google 的cpplint提供的代码,您可以自定义。