我想SytaxTree用一些前缀变量的方式修改Java prefix(使用ANTLR4)
示例myVar++->prefix.myVar++
expression
|-- expression
| |-- primary
| |-- myVar
|-- ++
// ->
expression
|-- expression
| |-- expression
| |-- primary
| |-- prefix
| |-- .
| |-- myVar
|-- ++
假设我的函数获取SyntaxTree并返回 modified SyntaxTree,我不能使用 simple TokenStreamRewriter,因为它只产生String,不是吗?还给出了Java8 语法,不得修改。
我需要修改树本身(如果可能的话)。
我的骨架就像:(在 Scala 中,但与 Java 几乎相同)
class MyVisitor extends Java8BaseVisitor[Unit] {
// ...
override def visitPrimary(ctx: Java8Parser.PrimaryContext) = {
if (isVariable(ctx)) { // this condition works
// TODO
}
}
}
我在实施// TODO. 我尝试使用但没有成功addChild并getParent抛出空指针。
我想我根本不了解构造/修改,ParseTree因为我没有找到合适的来源。
你能给我一个提示或一些来源吗?
根据github 问题和类似问题,它似乎不受支持 - 您会推荐哪些其他解决方案?我考虑TokenStreamRewriter然后getText再次解析(进入 new ParseTree),但这可能非常无效(我将不止一次添加前缀)。