2013-05-06 16 views
13

Sto utilizzando restituisce per le mie regole del parser che funzionano con tutte le regole del parser tranne il primo. Se la prima regola parser nella mia grammatica utilizza i rendimenti dichiarazione ANTLR4 lamenta come segue:Problemi con la dichiarazione di resi sulla prima regola del parser in una grammatica ANTLR4

attesa ARG_ACTION mentre corrispondono di regola

Se posso aggiungere un'altra regola parser di sopra del quale non fa uso di "ritorni" ANTLR non si lamenta

Qui si ha una grammatica ridotta al problema:

grammar FirstParserRuleReturnIssue; 
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 
aRule returns [String s]: ID { $s = $ID.text; }; 

ho cercato di trovare un ruolo speciale della prima regola che potrebbe spiegare il comportamento, ma non ha trovato nulla. E 'un errore? Mi manca un po 'di comprensione?

risposta

13

È necessario inserire le regole del parser (iniziare con una lettera minuscola) prima delle regole del lexer (iniziare con una lettera maiuscola) nella grammatica. Dopo aver incontrato una regola lexer, lo [ attiva uno LEXER_CHAR_SET anziché ARG_ACTION, quindi il flusso di token visto dal compilatore sembra che tu stia passando un set di caratteri dove dovrebbe essere il valore di ritorno.

+0

Questo sembra un bug in ANTLR, giusto? –

Problemi correlati