如果我保存语法
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
标识符有什么问题?它未列在保留关键字列表中:
导入、片段、词法分析器、解析器、语法、返回、 局部变量, 投掷, 接球, 最后, 模式, 选项, 令牌
tree
是ANTLR v3中的保留关键字。我想文档可能不完整,也可能是一个错误。该文档还提到了不能用作规则名称的非关键字(如单词rule
(,因此tree
可能是相似的 - 不是真正的关键字,但并非在所有地方都允许。
根据针对您的问题的未解决的ANTRL4错误报告,如果您删除tree
和:
之间的空格,它可以工作。