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