2015-06-04 42 views
1

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

我想首先重写解析树,如果查询可以更改为连接查询或不做任何事情。有没有办法手动操纵分析树?像添加规则上下文或构建新的分析树?

回答

1

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

当然,可以通过分析树来生成一个单独的AST,然后这个AST就可以被执行并进一步进行结构修改。 Antlr4不支持这种AST的建造和行走。