什么是->;ANTLR3中的运算符平均值?

什么是->;ANTLR3中的运算符平均值?,antlr,antlr3,antlr4,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"] | ES

我正在尝试编译一个语法,并让它在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中,运算符是什么意思?

在解析器规则中,
->
表示ANTLR3中的重写规则,该规则根据解析器规则构造AST。更多关于此问题的信息,请参见本问答:

在ANTLR 4中,
->
仅在lexer规则中用于将某些令牌放在不同的通道上(或从令牌流中将它们一起跳过)。因为,
->
不再具有等效项。将ANTLR v3语法转换为v4语法时,只需删除
->
及其右侧的所有内容