2014-02-25 51 views
3

我想編譯一個語法,並讓它在ANTLR4中有效。這個語法是爲ANTLR3編寫的,我收到了很多編譯錯誤。這裏是其中的一個: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中意味着什麼?

回答

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語法時,只需刪除->及其右側的所有內容即可。