Groovy 用于查找变量修改的静态分析

Groovy static analysis for finding variable modifications

我有一个简单的任务,需要在给定代码中找到变量的修改。这将是一个静态分析。例如,给定一个变量(例如,年龄),我想创建一个列表或树(一种数据结构)来告诉我修改这个变量的内容,最好是进行修改的函数名称(作为 return ) 或任何其他辅助信息。我开始编写脚本,但我发现它很容易出错,因为我需要考虑许多情况,例如嵌套循环等。

你能建议我从哪里开始吗?

如果要分析的代码恰好是 Groovy 代码,那么您可以编写一个 AST 转换(可能是全局转换)来遍历代码并获取您要查找的信息。

Groovy 文档站点有一个关于 AST 转换的部分,请查看 http://groovy-lang.org/metaprogramming.html#_compile_time_metaprogramming 本页描述了现有的 AST xform 以及如何开发自己的。我建议浏览实现标准 AST xform 的代码,例如 @Immutable@Cannonical 和其他代码。

CodeNarc (http://codenarc.sourceforge.net/) 是 Groovy 代码的静态代码分析器,灵感来自 PMD。它还依赖于 AST xforms。 GContracts (https://github.com/andresteingress/gcontracts) 是另一个使用 AST xforms 实现的工具。这两个可以作为理解更多AST转换的基础。

OTOH 如果分析的代码恰好是 Java 那么 AST 转换将无济于事。