如果我保存语法
grammar L;
tree: 't' ;
a: tree | 'b' ;
以文件名L.g4
并调用antlr4 L.g4
(版本4.7.1),它会输出一个无法理解的错误消息,没有任何行号或列号:
L.g4 :::语法错误:字符'|'不匹配期待'g'
:::
部分通常是错误所在的行/列号。
如果我改为保存
grammar L;
tre: 't' ;
a: tre | 'b' ;
与L.g4
相同并在其上运行antlr4
,它运行无误。
tree
标识符有什么问题?它不在reserved keywords的列表中:
import,fragment,lexer,parser,grammar,return, 当地人,抛出,抓住,最后,模式,选项,令牌
答案 0 :(得分:1)
tree
是unresolved ANTRL4 bug report for your issue。我猜文档可能不完整,也可能是错误。该文档还提到了不能用作规则名称的非关键字(例如单词rule
),因此tree
可能很相似-不是真正的关键字,但各处都不允许。>
根据此RFC,如果您删除tree
和:
之间的空格,它将起作用。