2012-08-30 16 views
6

Voglio creare una grammatica molto semplice con indentazione dello spazio. Ogni linea costituito da 1 o più parole ma indentazione come pitone (4 spazi o una scheda è un trattino) e non v'è vicino per indentazione, ad esempio:ANTLR: rientranza spaziale?

if something cool occurs 
    do this 
else 
    otherwise do this 
    loop around something 
     each time doing this 
     and do that 
say good byte 

Anziché leggere ogni riga, calcolare il rientro e costruire manualmente un albero è possibile fare tutto ciò nella grammatica ANTLR? La mia lingua di arrivo è Java.

+6

Vedere: http://stackoverflow.com/questions/8642154/antlr-what-is-simpliest-way-to-realize-python-like-indent-depending-grammar –

risposta

1

Questo è possibile. Tutto ciò che fai è definire una regola e lasciarla saltare.

Qui si va:

Ignore : (' ' | '\t' | '\n' | '\r')+ {skip();}; 

O se è necessario riconoscere \ n o \ r

Ignore : (' ' | '\t')+ {skip();}; 

aggiungere questo alla tua gramar e tutti gli spazi e le schede saranno ignorati.