我刚刚获得了一项新任务,看起来它将成为一项有趣的挑战。
客户希望开发一种代码样式检查工具,用于在JVM上运行的内部(即将开源)编程语言。语言语法非常像Java。
客户基本上希望我生成类似checkstyle的内容。
所以我的问题是,你会如何处理这个问题?鉴于一个清晰的平台,您会向客户提出哪些建议?
我认为我有3个选项
从头开始写点东西。我宁愿不这样做,因为似乎这种代码分析工具问题已经解决了很多次,必须有一个更“框架”或“平台”的方法。
分叉现有的代码样式检查工具并修改解析以适应这种新语言等等
扩展或插入现有的静态代码分析工具。 (也许为Yasca写一个插件?)
答案 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