Apache Pig从ANTLR3迁移至ANTLR4:是否仍用!排除AST节点
Apache Pig迁移ANTLR4后AST节点排除方式说明
- Apache Pig从ANTLR3迁移到ANTLR4后,不再使用感叹号(!)标记来排除语法元素进入AST。
- 在ANTLR3中,
!是专门用于标记无需纳入抽象语法树(AST)的语法节点;但ANTLR4的核心设计改为生成包含全量语法元素的解析树(Parse Tree),不再依赖语法中的!标记来裁剪节点。 - 若需要忽略特定语法元素,ANTLR4采用以下替代方式:
- 对于空格、分隔符、括号这类无业务意义的元素,可在词法规则中通过
skip()或指定为隐藏通道(HIDDEN channel)直接跳过解析。 - 若要在构建自定义AST时过滤节点,需通过编写监听器(Listener)或访问器(Visitor),在遍历解析树的过程中跳过不需要的节点。
- 对于空格、分隔符、括号这类无业务意义的元素,可在词法规则中通过
- 针对原ANTLR3版本QueryParser.g中类似
expr : expr '+' expr!;这类带!的语法片段,迁移到ANTLR4后会调整为去掉!标记,后续通过上述解析树处理逻辑来实现节点过滤。
内容的提问来源于stack exchange,提问作者Mark Rostron
相关产品推荐
相关产品推荐

