2009-11-30 26 views
2

我最近创建了一个ANTLR3解析器规则ANTLR语法中是否有保留字列表?

options : foo bar; 

它没有编译和我花了一些时间来发现options是一个保留字(AntlrWorks指示的错误,但不是原因)。 ANTLR中是否存在保留字列表,并且在命名规则中是否有最佳做法(这可能有助于避免这种情况)?

回答

4

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.的解析器规则(除了它们应该以小写开头,这当然不是惯例)。

+0

谢谢!我想知道是否应该使用伪名称空间名称,例如init_a,init_b,以尽可能避免冲突。 – 2009-11-30 17:02:28

+0

彼得没问题。 – 2009-11-30 21:46:48

1

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

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

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

+0

您能否扩展解释? – 2009-12-17 04:50:48