我有一个简单的任务,需要在给定的代码中找到变量的修改。这将是一个静态分析。例如,给定一个变量(例如,年龄),我想创建一个列表或树(数据结构),它给我修改此变量的内容,最好是修改(作为返回)或任何其他的函数名称辅助信息。我开始编写我的脚本,但我发现它非常容易出错,因为我需要考虑许多情况,例如嵌套循环等。
你能建议我从哪里开始吗?
答案 0 :(得分:1)
如果要分析的代码恰好是Groovy
代码,那么您可以编写一个AST转换(可能是全局转换),它可以遍历代码并获取您寻找的信息。
Groovy文档站点有一个关于AST转换的部分,请看http://groovy-lang.org/metaprogramming.html#_compile_time_metaprogramming
此页面描述了现有的AST xforms以及如何开发自己的。我建议浏览实现标准AST xforms的代码,例如@Immutable
,@Cannonical
等。
CodeNarc(http://codenarc.sourceforge.net/)是一个针对Groovy代码的静态代码分析器,受PMD的启发。它还依赖于AST xforms。 GContracts(https://github.com/andresteingress/gcontracts)是使用AST xforms实现的另一个工具。这两个可以作为理解更多关于AST转换的基础。
OTOH如果分析的代码恰好是Java,那么AST转换对你没有帮助。