ANTLR语法中是否有保留字列表?

时间:2009-11-30 09:06:52

标签: antlr

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

options : foo bar;

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

2 个答案:

答案 0 :(得分:6)

ANTLR v3的保留字是:

    Keyword  |  Description
    ---------+--------------------------------------------------------
    scope    |  Dynamically-scoped attribute
    fragment |  lexer rule is a helper rule, not real token for parser
    lexer    |  grammar type
    tree     |  grammar type
    parser   |  grammar type
    grammar  |  grammar header
    returns  |  rule return value(s)
    throws   |  rule throws exception(s)
    catch    |  catch rule exceptions
    finally  |  do this no matter what
    options  |  grammar or rule options
    tokens   |  can add tokens with this; usually imaginary tokens
    import   |  import grammar(s)

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

不知道“命名惯例”w.r.t.解析器规则(除了它们应该从小写开始,当然不是惯例......)。

答案 1 :(得分:3)

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

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

根据目标语言的不同,这可能是也可能不是问题。我使用的是默认的Java目标,当然也是如此,如果是这种情况,你应该检查目标语言的保留关键字列表。