首页 > 解决方案 > antlr4:为什么`tree`不能用作规则名称?

问题描述

如果我保存语法

grammar L;

tree: 't' ;
a: tree | 'b' ;

在文件名L.g4和调用antlr4 L.g4(Version 4.7.1) 中,它会输出一条不带任何行号或列号的难以理解的错误消息:

L.g4::: 语法错误:不匹配的字符 '|' 期待“g”

:::部分是错误的行/列号通常所在的位置。

如果我改为保存

grammar L;

tre: 't' ;
a: tre | 'b' ;

作为L.g4并运行antlr4它,它运行没有错误。

tree标识符有什么问题?它未列在保留关键字列表中:

导入、片段、词法分析器、解析器、语法、返回、本地、抛出、捕获、最终、模式、选项、标记

标签: antlrantlr4

解决方案


treeANTLR v3 中的保留关键字。我猜文档可能不完整,也可能是一个错误。该文档还提到了不能用作规则名称的非关键字(如单词rule),因此可能tree是相似的 - 不是真正的关键字,但在任何地方都不允许使用。

根据针对您的问题的未解决的 ANTRL4 错误报告,如果您删除 和 之间的空格,它将tree起作用:


推荐阅读