在ANTLR语法中有保留字列表吗?

在ANTLR语法中有保留字列表吗?,antlr,Antlr,我最近创建了一个ANTLR3解析器规则 options : foo bar; 它没有编译,我花了一些时间才发现options是一个保留字(AntlrWorks指出了一个错误,但没有说明原因)。ANTLR中是否有保留字列表,命名规则中是否有最佳实践(这可能有助于避免这种情况) ANTLR v3的保留字为: Keyword | Description ---------+--------------------------------------------------------

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

options : foo bar;

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

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) 关键词|描述 ---------+-------------------------------------------------------- 范围|动态范围属性 片段| lexer规则是一个辅助规则,而不是解析器的真正标记 lexer |语法类型 树|语法类型 解析器|语法类型 语法|语法标题 返回|规则返回值 抛出|规则抛出异常 catch | catch规则异常 最后,无论如何都要这样做 选项|语法或规则选项 代币|可以使用此功能添加代币;通常是虚构的代币 导入|导入语法 见:(在本页末尾)


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

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

我花了一天时间试图弄明白为什么我的语法不起作用,结果却发现它被我命名为“enum”的语法中的“enum”规则搞砸了


这可能是问题,也可能不是问题,取决于目标语言是什么。我使用的是默认的Java目标,当然是,如果是这样,那么您也应该检查目标语言的保留关键字列表。

谢谢!我想知道我是否应该使用伪名称空间的名称,如init_a、init_b、。。。如果可能的话,为了避免冲突。您能扩展一下解释吗?2018年,v4:名为
getTokenNames
的规则最终将作为解析器代码中的方法,并使
javac
编译失败。