我最近创建了一个 ANTLR3 解析器规则
options : foo bar;
它没有编译,我花了一些时间才发现这options
是一个保留字(AntlrWorks 指出了一个错误,但没有说明原因)。ANTLR 中是否有保留字列表,命名规则是否有最佳实践(这可能有助于避免这种情况)?
我最近创建了一个 ANTLR3 解析器规则
options : foo bar;
它没有编译,我花了一些时间才发现这options
是一个保留字(AntlrWorks 指出了一个错误,但没有说明原因)。ANTLR 中是否有保留字列表,命名规则是否有最佳实践(这可能有助于避免这种情况)?
ANTLR v3 的保留字是:
关键字 | 描述 ---------+---------------------------------------- ---------------- 范围 | 动态范围的属性 片段 | 词法分析器规则是辅助规则,而不是解析器的真正标记 词法分析器 | 语法类型 树 | 语法类型 解析器 | 语法类型 语法 | 语法头 返回 | 规则返回值 抛出 | 规则抛出异常 抓住| 捕获规则异常 最后 | 无论如何都要这样做 选项 | 语法或规则选项 代币 | 可以用这个添加令牌;通常是虚构的标记 进口 | 导入语法
请参阅:https ://web.archive.org/web/20120314155217/http://www.antlr.org/wiki/display/ANTLR3/ANTLR+Cheat+Sheet (在页面末尾)
不知道“命名约定”wrt 解析器规则(除了它们应该以小写开头,这不是约定,当然......)。
使用目标语言的保留字也会导致问题。
我花了一天时间试图弄清楚为什么我的语法不起作用,只是意识到它被我命名为“枚举”的语法中的“枚举”规则弄乱了。
这可能是也可能不是问题,具体取决于目标语言是什么。我使用的是默认的 Java 目标,而且确实如此,所以如果是这种情况,您也应该检查目标语言的保留关键字列表。