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