我想对一堆用不太常见的编程语言(类似C语法)编写的脚本进行静态代码分析。经常出现的问题是:
语言解释器/编译器本身并不为这些问题提供帮助。
是否有任何像林特一样的工具足够灵活,可以很容易地适应新的编程语言?还是有人知道另一个好的起点?(Lex/Yacc??)
提前感谢
发布于 2010-10-04 17:31:40
我怀疑你会找到一个万能的工具。
很多静态分析都依赖于词汇和语法的遵从性。
一个好的静态分析器将对语言及其实现有额外的上下文知识。它还可以包括一个跟踪状态和多个执行路径的模拟器。此外,它可能知道模式和实践,以及某些库和调用。
例如,在C中,这个代码if ( x = 3 ) { /*Do something*/ }是完全合法的,尽管程序员可能打算使用==。或者,可以执行printf("%s", longVal);,尽管可以将任意值推送到堆栈上,但特定的调用可能基于传递给它的初始值而具有其他期望。
总之,一个通用的lint应用程序应该知道很多,更不用说语言和库是一个移动的目标,如果这样的野兽真的存在的话,那么对于实际应用来说,它要么太复杂,要么太缺乏动力,而不是一个更便宜的工具,它能更好地完成特定语言的工作。
发布于 2010-10-04 23:59:51
商业上可用的DMS软件重组工具包允许编写这样的一致性检查,并且具有足够的灵活性,可以适应多种语言。
发布于 2011-03-01 02:28:39
考虑一下Vera社区版或Google的cpplint提供了您可以定制的代码。
https://stackoverflow.com/questions/3857282
复制相似问题