/************ minimal.lex - versione 2 *********** Analizzatore lessicale per alcuni semplici token. Contiene una definizione non banale della classe Yytoken Ad ogni chiamata, l'analizzatore lessicale restituisce un oggetto di tipo Yytoken. Non è presente una classe con un metodo main. *************************************************/ enum TipoToken { //costanti per la rappresentazione dei token PAROLA, NUMERO, PUNTO, VIRGOLA, DUE_PUNTI, PUNTO_E_VIRGOLA, PUNTO_ESCLAMATIVO, PUNTO_INTERROGATIVO, ALTRO, FINE; } class Yytoken { private TipoToken tipo; private String testo; //costruttore public Yytoken(TipoToken t, String s) { tipo = t; testo = s; } public TipoToken getTipo() { return tipo; } public String getTesto() { return testo; } public String toString() { return tipo.toString() + " " + testo; } } %% %unicode LETTERA = [:letter:] CIFRA = [:digit:] FINERIGA = \r | \n | \r\n SPAZIATURA = [ \t\f] | {FINERIGA} %% {LETTERA}+ {return new Yytoken(TipoToken.PAROLA, yytext());} {CIFRA}+ {return new Yytoken(TipoToken.NUMERO, yytext());} "." {return new Yytoken(TipoToken.PUNTO, yytext());} "," {return new Yytoken(TipoToken.VIRGOLA, yytext());} ":" {return new Yytoken(TipoToken.DUE_PUNTI, yytext());} ";" {return new Yytoken(TipoToken.PUNTO_E_VIRGOLA, yytext());} "!" {return new Yytoken(TipoToken.PUNTO_ESCLAMATIVO, yytext());} "?" {return new Yytoken(TipoToken.PUNTO_INTERROGATIVO, yytext());} {SPAZIATURA} {} . {return new Yytoken(TipoToken.ALTRO, yytext());}