4

我最近创建了一个 ANTLR3 解析器规则

options : foo bar;

它没有编译,我花了一些时间才发现这options是一个保留字(AntlrWorks 指出了一个错误,但没有说明原因)。ANTLR 中是否有保留字列表,命名规则是否有最佳实践(这可能有助于避免这种情况)?

4

2 回答 2

6

ANTLR v3 的保留字是:

    关键字 | 描述
    ---------+---------------------------------------- ----------------
    范围 | 动态范围的属性
    片段 | 词法分析器规则是辅助规则,而不是解析器的真正标记
    词法分析器 | 语法类型
    树 | 语法类型
    解析器 | 语法类型
    语法 | 语法头
    返回 | 规则返回值
    抛出 | 规则抛出异常
    抓住| 捕获规则异常
    最后 | 无论如何都要这样做
    选项 | 语法或规则选项
    代币 | 可以用这个添加令牌;通常是虚构的标记
    进口 | 导入语法

请参阅:https ://web.archive.org/web/20120314155217/http://www.antlr.org/wiki/display/ANTLR3/ANTLR+Cheat+Sheet (在页面末尾)

不知道“命名约定”wrt 解析器规则(除了它们应该以小写开头,这不是约定,当然......)。

于 2009-11-30T14:18:13.613 回答
3

使用目标语言的保留字也会导致问题。

我花了一天时间试图弄清楚为什么我的语法不起作用,只是意识到它被我命名为“枚举”的语法中的“枚举”规则弄乱了。

这可能是也可能不是问题,具体取决于目标语言是什么。我使用的是默认的 Java 目标,而且确实如此,所以如果是这种情况,您也应该检查目标语言的保留关键字列表。

于 2009-12-17T01:15:38.440 回答