我正在尝试编译语法并使其在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 中指定词法分析器命令。但是ANTLR3中的运算符是什么意思?
在解析器规则中,->
表示 ANTLR 3 中的重写规则,该规则从解析器规则构造 AST。在此问答中对此的更多信息:如何输出使用ANTLR构建的AST?
在 ANTLR 4 中,->
仅用于词法分析器规则中将某些令牌放在不同的通道上(或从令牌流中一起跳过它们)。由于ANTLR 4不适用于AST的,因此->
不再具有等价物。将 ANTLR v3 语法转换为 v4 语法时,只需删除->
及其右侧的所有内容即可。