antlr - 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
标识符有什么问题?它未列在保留关键字列表中:
导入、片段、词法分析器、解析器、语法、返回、本地、抛出、捕获、最终、模式、选项、标记
解决方案
tree
是ANTLR v3 中的保留关键字。我猜文档可能不完整,也可能是一个错误。该文档还提到了不能用作规则名称的非关键字(如单词rule
),因此可能tree
是相似的 - 不是真正的关键字,但在任何地方都不允许使用。
根据针对您的问题的未解决的 ANTRL4 错误报告,如果您删除 和 之间的空格,它将tree
起作用:
。
推荐阅读
- sapui5 - 按下按钮时在对话框中显示图表
- java - 如何将 S3 对象转换为 springBoot 中的资源?
- windows - 重新枚举从旧固件升级到新固件且描述符发生变化的 USB 设备
- api-platform.com - 收集操作的额外数据
- javascript - DOM MutationObserver 的问题 - Javascript
- apache-spark - 使用 Azure 数据工厂 V1 的 Spark 作业链
- mysql - 世界地图面板格拉法纳
- excel - 如果值为 EMPTY 与 NULL,VBA TRIM 函数会返回什么?
- python - 将用户/项目视图数据转换为 2D 指标
- ruby-on-rails - 在导轨中连接两个模型