ANTLR v3构建AST时排除COMMA_KEYWORD的方法(不使用写规则)
在ANTLR v3中排除COMMA_KEYWORD出现在AST中(无需额外规则)
嘿,这个需求在ANTLR v3里其实有个非常简洁的实现方式,完全不用额外编写新规则——直接利用ANTLR内置的**AST否定操作符!**就能让COMMA_KEYWORD不进入最终的AST树。
针对你给出的原始语法规则,只需要在每个COMMA_KEYWORD前面加上!标记即可,修改后的规则如下:
test : value0 !COMMA_KEYWORD value1 (!COMMA_KEYWORD value2)*;
为什么这样管用?
!操作符的作用是告诉ANTLR:在构建抽象语法树时,忽略这个token,不要把它作为节点添加到树结构中。- 这样修改后,最终生成的AST里只会保留
value0、value1以及所有匹配到的value2节点,逗号token会被完全跳过,不会出现在树里。
举个实际的例子,如果你的输入是foo, bar, baz, qux,生成的AST结构大概会是这样:
test ├─ value0 (foo) ├─ value1 (bar) ├─ value2 (baz) └─ value2 (qux)
完全看不到任何逗号节点的影子,完美符合你的要求。
内容的提问来源于stack exchange,提问作者user7698505
相关产品推荐
相关产品推荐

