8

我刚刚接到了一项新任务,看起来这将是一个有趣的挑战。

客户希望为其在 JVM 上运行的内部(即将开源)编程语言开发代码样式检查工具。语言语法很像 Java。

客户基本上希望我制作类似checkstyle的东西。

所以我的问题是,你将如何解决这个问题?给定一张白纸,您会向客户提出什么建议?

我想我有 3 个选择

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

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

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

4

4 回答 4

4

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

于 2010-05-19T22:54:42.020 回答
1

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

请参阅DMS 软件再工程工具包。这具有用于解析、构建 AST、构建符号表、构建/遍历控制流和数据流图以及调用树的通用编译器机制。

DMS 可以通过构建 AST、符号表和上述流分析的完整 Java 前端来获得。DMS 可以沉着地处理语言方言,因此修改此前端以匹配您客户的 Java 变体语言并获得所有这些分析机制应该尽可能简单。

于 2010-05-19T23:12:16.597 回答
1

PMD呢?我已经使用 PMD 多年,但之前从未真正深入了解其内部工作原理。

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

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

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

然后通过使用PMD 规则设计器,我可以从生成的 AST 中定义规则。

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

于 2010-05-19T23:40:52.223 回答
0

看看FindBugs

于 2010-05-19T22:37:23.763 回答