antlr4:为什么'tree'不能用作规则名称?
如果我保存语法antlr4:为什么'tree'不能用作规则名称?,antlr,antlr4,Antlr,Antlr4,如果我保存语法 grammar L; tree: 't' ; a: tree | 'b' ; 在文件名L.g4和调用antlr4 L.g4(版本4.7.1)中,它输出一条无法理解的错误消息,没有任何行号或列号: 五十、 g4:::语法错误:字符“|”不匹配,应为“g” :部分是错误的行号/列号通常出现的地方 如果我不存钱 grammar L; tre: 't' ; a: tre | 'b' ; 当L.g4并在其上运行antlr4时,它运行时不会出错 树标识符有什么问题?未在以下列表中列出
grammar L;
tree: 't' ;
a: tree | 'b' ;
在文件名L.g4
和调用antlr4 L.g4
(版本4.7.1)中,它输出一条无法理解的错误消息,没有任何行号或列号:
五十、 g4:::语法错误:字符“|”不匹配,应为“g”
:
部分是错误的行号/列号通常出现的地方
如果我不存钱
grammar L;
tre: 't' ;
a: tre | 'b' ;
当L.g4
并在其上运行antlr4
时,它运行时不会出错
树
标识符有什么问题?未在以下列表中列出:
导入、片段、lexer、解析器、语法、返回、,
局部变量、抛出、捕获、最终、模式、选项、标记
树
是一个。我猜文档可能不完整,也可能是一个bug。文档中还提到了不能用作规则名称的非关键字(如单词规则
),因此树
可能类似-不是真正的关键字,但不允许到处使用
根据这一点,如果删除树
和:
之间的空格,它就可以工作 同样似乎仍然相关,它似乎很乐意在Java代码中将未替换的规则名称用作方法名称:public final bobbyTables上下文bobbyTables()
。如果我使用throw
或private
而不是bobbyTables
,我想不会有什么好结果。谢谢,在选择规则名称时,我会尽量小心一点。(轻微更正:throw
实际上生成了漂亮的错误消息。)