1

我有一个用 ANTLR 4 编写的示例语法

query : select from ';' !? EOF!

我明白了

query : select from ';'

这个怎么运作

!? EOF!语法中的意思是什么以及它是如何工作的?

4

1 回答 1

4

在 ANTLR v3 语法中使用感叹号表示应该从生成的 AST 中省略某个节点。由于 ANTLR v4 没有 AST,因此不再使用此构造。

在 v3 和 v4 中,?表示规则(词法分析器或解析器)是可选EOF的,表示文件结尾常量。

总结';'!?意味着:可选地匹配 a';'并将其从 AST 中排除。并且EOF!意味着:匹配文件结尾并从 AST 中排除此标记。

因此,v3 解析器规则:

query : select from ';'!? EOF!

在 v4 语法中应该如下所示:

query : select from ';'? EOF
于 2013-09-09T12:55:56.687 回答