我想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
),但这可能非常无效(我将不止一次添加前缀)。