新语言的静态代码分析。从哪儿开始?

时间:2010-05-19 22:33:22

标签: coding-style static-analysis checkstyle

我刚刚获得了一项新任务,看起来它将成为一项有趣的挑战。

客户希望开发一种代码样式检查工具,用于在JVM上运行的内部(即将开源)编程语言。语言语法非常像Java。

客户基本上希望我生成类似checkstyle的内容。

所以我的问题是,你会如何处理这个问题?鉴于一个清晰的平台,您会向客户提出哪些建议?

我认为我有3个选项

  1. 从头开始写点东西。我宁愿不这样做,因为似乎这种代码分析工具问题已经解决了很多次,必须有一个更“框架”或“平台”的方法。

  2. 分叉现有的代码样式检查工具并修改解析以适应这种新语言等等

  3. 扩展或插入现有的静态代码分析工具。 (也许为Yasca写一个插件?)

4 个答案:

答案 0 :(得分:4)

这些工具基本上必须至少为该语言的一个子集实现编译器前端。最简单的出发点通常是调整现有的编译器前端,因此您一定要从查看客户的编译器开始。如果你很幸运,它将在前端和后端之间实现清晰的分离,并且能够按原样使用它,并使用AST或前端产生的任何IR来进行额外的分析。

答案 1 :(得分:1)

你不想从头开始写这些东西。

请参阅DMS Software Reengineeering Toolkit。这通用了编译器机制来解析,构建AST,构造符号表,构造/遍历控制流和数据流图以及调用树。

DMS可以通过构建AST,符号表和上面的流分析的完整Java前端获得。 DMS使用aplomb处理语言方言,因此修改此前端以匹配客户的Java变体语言并获得所有这些分析机制应该是切实可行的。

答案 2 :(得分:1)

PMD怎么样?我已经使用PMD多年了,但之前从未真正钻研过它的内部工作。

可以通过编写自定义语言解析器来扩展PMD,这可以通过在类路径上的JAR中提供以下实现来完成。

net.sourceforge.pmd.cpd.Language
net.sourceforge.pmd.cpd.Tokenizer

http://pmd.sourceforge.net/cpd-parser-howto.html

然后使用PMD rule designer我可以从结果AST中定义规则。

我喜欢PMD的是它在Java空间中广泛认可的代码分析工具,因此有很多第三方支持。例如Eclipse插件,Hudson CI插件等

答案 3 :(得分:0)

查看FindBugs