我最近创建了一个ANTLR3解析器规则
options : foo bar;
没有编译,我花了一些时间才发现options
是一个保留字(AntlrWorks表示错误,但不是为什么)。 ANTLR中是否有保留字列表,是否有命名规则的最佳实践(这可能有助于避免这种情况)?
答案 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)
不知道“命名惯例”w.r.t.解析器规则(除了它们应该从小写开始,当然不是惯例......)。
答案 1 :(得分:3)
使用目标语言的保留字也会导致问题。
我花了一天的时间试图弄清楚为什么我的语法不起作用只是为了意识到它被我的语法中的“enum”规则搞砸了,我把它命名为“enum”。
根据目标语言的不同,这可能是也可能不是问题。我使用的是默认的Java目标,当然也是如此,如果是这种情况,你应该检查目标语言的保留关键字列表。