我有一个用 ANTLR 4 编写的示例语法
query : select from ';' !? EOF!
我明白了
query : select from ';'
这个怎么运作
!? EOF!
语法中的意思是什么以及它是如何工作的?
在 ANTLR v3 语法中使用感叹号表示应该从生成的 AST 中省略某个节点。由于 ANTLR v4 没有 AST,因此不再使用此构造。
在 v3 和 v4 中,?
表示规则(词法分析器或解析器)是可选EOF
的,表示文件结尾常量。
总结';'!?
意味着:可选地匹配 a';'
并将其从 AST 中排除。并且EOF!
意味着:匹配文件结尾并从 AST 中排除此标记。
因此,v3 解析器规则:
query : select from ';'!? EOF!
在 v4 语法中应该如下所示:
query : select from ';'? EOF