什么 - > ANTLR3中的运算符意味着什么?

时间:2014-02-25 08:00:54

标签: antlr antlr3 antlr4

我正在尝试编译语法并让它在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中意味着什么?

1 个答案:

答案 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语法时,只需删除->及其右侧的所有内容。