我正在尝试编译语法并让它在ANTLR4中运行。语法是为ANTLR3编写的,我遇到了很多编译错误。这是其中之一:
syntax error: '->' came as a complete surprise to me while looking for rule element
这是导致错误的规则
tokens {
ZONE;
ZONE_OFFSET;
}
time_zone_abbreviation
: UTC -> ZONE["UTC"]
| EST -> ZONE["America/New_York"]
| CST -> ZONE["America/Chicago"]
| PST -> ZONE["America/Los_Angeles"]
| MST -> ZONE["America/Denver"]
| AKST -> ZONE["America/Anchorage"]
| HAST -> ZONE["Pacific/Honolulu"]
;
我知道->
运算符可用于在ANTLR4中指定lexer命令。但是运营商在ANTLR3中意味着什么?
答案 0 :(得分:4)
在解析器规则中,->
表示ANTLR 3中的重写规则,它从解析器规则构造AST。有关此内容的更多信息,请参阅此问答:How to output the AST built using ANTLR?
在ANTLR 4中,->
仅用于词法规则,以将某些令牌放在不同的通道上(或者从令牌流中一起跳过它们)。自ANTLR 4 does not work with AST's起,->
不再具有等价物。在将ANTLR v3语法翻译成v4语法时,只需删除->
及其右侧的所有内容。