PMD工作原理

PMD的核心是JavaCC解析器生成器。PMD结合运用JavaCCEBNF(扩展巴科斯-诺尔范式,Extended Backus-Naur Formal)语法,再加上JJTree,把Java源代码解析成抽象语法树(ASTAbstract Syntax Tree)。显然,这句话不那么好懂,且看下文具体说明。 

  从根本上看,Java源代码只是一些普通的文本。不过,为了让解析器承认这些普通的文本是合法的Java代码,它们必须符合某种特定的结构要求。这种结构可以用一种称为EBNF的句法元语言表示,通常称为“语法”(Grammar)。JavaCC根据语法要求生成解析器,这个解析器就可以用于解析用Java编程语言编写的程序。 

  不过实际运行中的PMD还要经过JJTree的一次转换。JJTree是一个JavaCC的插件,通过AST扩充JavaCC生成的解析器。AST是一个Java符号流之上的语义层。有了JJTree,语法分析的结果不再是“System, ., out, ., . println”之类的符号序列,而是一个由对象构成的树型层次结构。例如,下面是一段简单的Java代码以及与之对应的AST

 有文件名和RuleSet传入PMD

 PMD将通过该文件的InputStream传递给由JavaCC-生成的解析器   

 PMD 从解析器取得指向抽象语法树(AST)的引用 

 RuleSet 中的每个规则都遍历AST 

 并检查错误报告内容包括RuleViolations以及符合XML 、HTML 或其它格式的代码/文件


你可能感兴趣的:(PMD工作原理)