对ANTLR 4中编写的以下语法的解释

时间:2013-09-09 11:02:48

标签: antlr grammar antlr4

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

query : select from ';' !? EOF!

我明白了

query : select from ';'

如何运作

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

1 个答案:

答案 0 :(得分:4)

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

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

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

所以,v3解析器规则:

query : select from ';'!? EOF!

应该在v4语法中看起来像这样:

query : select from ';'? EOF