Cosa significa -> L'operatore significa in ANTLR3?
Domanda
Sto cercando di compilare una grammatica e farla funzionare a Antlr4.La grammatica è stata scritta per ANTLR3 e sto ottenendo un sacco di errori di compilazione.Ecco uno di questi:
syntax error: '->' came as a complete surprise to me while looking for rule element
.
Questa è la regola che causa l'errore
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"]
;
.
So che l'operatore ->
può essere utilizzato per specificare il comando Lexer in ANTLR4.Ma cosa significa l'operatore in ANTLR3?
Soluzione
All'interno delle regole del parser, il ->
denota una regola di riscrittura in ANLL 3 che costruisce un AST dalla regola del parser.Maggiori informazioni su questo in questo Q & A: Come emettere l'AST Costruito usando Antlr?
In ANTLR 4, il ->
viene utilizzato solo nelle regole Lexer per mettere determinati token su un canale diverso (o saltareli tutti insieme dal flusso del token).Dal momento che antlr 4 non funziona con l'AST , il ->
NOpiù a lungo ha un equivalente.Quando si traduce una grammatica ANTLR V3 su una grammatica V4, rimuovere semplicemente il ->
e tutto sul lato destro di esso.