如何手动重写Antlr4解析树?

如何手动重写Antlr4解析树?,antlr4,Antlr4,我正在开发一个简单的Xquery处理器,并使用Antlr4解析语法。我使用访问者模式遍历解析树。现在,如果查询满足某些条件,我想重写一个查询。如果查询直接使用诸如“join”之类的关键字并符合“join”语法,处理器现在可以处理查询 如果查询可以更改为联接查询,我想首先重写解析树,否则什么也不做。有没有办法手动操作解析树?比如添加一个规则上下文或者构造一个新的解析树 对于Antlr4,惯用的方法是用分析产品装饰树节点,而不是改变树结构。也就是说,可以使用一个或多个树漫游来识别和标记可以合并为联接

我正在开发一个简单的Xquery处理器,并使用Antlr4解析语法。我使用访问者模式遍历解析树。现在,如果查询满足某些条件,我想重写一个查询。如果查询直接使用诸如“join”之类的关键字并符合“join”语法,处理器现在可以处理查询


如果查询可以更改为联接查询,我想首先重写解析树,否则什么也不做。有没有办法手动操作解析树?比如添加一个规则上下文或者构造一个新的解析树

对于Antlr4,惯用的方法是用分析产品装饰树节点,而不是改变树结构。也就是说,可以使用一个或多个树漫游来识别和标记可以合并为联接的节点,并使用最终漫游来输出结果

当然,可以遍历解析树以生成一个单独的AST,而AST又可以遍历并在结构上进一步修改。Antlr4不支持此类AST的构建和行走