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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top