antlr4:为什么树不能用作规则名称?

时间:2018-09-01 00:02:18

标签: antlr antlr4

如果我保存语法

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,   当地人,抛出,抓住,最后,模式,选项,令牌

1 个答案:

答案 0 :(得分:1)

treeunresolved ANTRL4 bug report for your issue。我猜文档可能不完整,也可能是错误。该文档还提到了不能用作规则名称的非关键字(例如单词rule),因此tree可能很相似-不是真正的关键字,但各处都不允许。

根据此RFC,如果您删除tree:之间的空格,它将起作用。