【发布时间】:2014-07-24 15:43:12
【问题描述】:
目标是插入代码来监控Java同步块的进入和退出。
即
enteringSync();
synchronized(lockObj){
enteredSync();
...
leavingSync();
}
leftSync();
我最初的想法是实现进入/退出侦听器方法(在 Java synchronizd 块周围添加子树),然后打印出结果 AST。现在我意识到antlr4似乎不支持树修改,我应该考虑哪些替代方案?
【问题讨论】:
-
我后来意识到 ANTLR4 允许修改树。可以添加和删除 ParseRuleContext 的子项。但正如 ANTLR Guy 所说,重写令牌流似乎是一个更好的选择。
-
我发现这个答案有点令人惊讶。如果目标是操纵代码,那么如果操纵它们没有用,那么构建树的意义何在?这表明人们需要的不仅仅是解析(参见我的简历)。要了解如何使用“树”(但不是 ANTLR4)执行此操作,请参阅我在语义设计.com/Company/Publications/TestCoverage.pdf 上的关于将任何类型的探针插入代码(示例用于测试覆盖)的论文
标签: java antlr antlr4 code-translation program-transformation