/************ first.lex - versione 0 (2015) *********** Analizzatore lessicale per alcuni semplici token. La parte di codice utente contiene: - una definizione della classe Yytoken piuttosto banale basata sull'uso di un tipo enumerativo. - un metodo main che utilizza l'analizzatore lessicale facendogli individuare nell'input standard (tastiera) i token corrispondenti alla definizione. Ad ogni chiamata del metodo di scansione yylex, l'analizzatore lessicale restituisce un oggetto di tipo Yytoken che il metodo main visualizza. *************************************************/ import java.io.*; class Esempio { public static void main(String args[]) throws IOException { Yylex scanner = new Yylex(new InputStreamReader(System.in)); Yytoken t; while ((t = scanner.yylex()) != null) System.out.println(t.toString()); } } enum Yytoken { //costanti per la rappresentazione dei token PAROLA, NUMERO, PUNTO, VIRGOLA, DUE_PUNTI, PUNTO_E_VIRGOLA, PUNTO_ESCLAMATIVO, PUNTO_INTERROGATIVO, ALTRO; } %% %unicode LETTERA = [:letter:] CIFRA = [:digit:] FINERIGA = \r | \n | \r\n SPAZIATURA = [ \t\f] | {FINERIGA} %% {LETTERA}+ {return Yytoken.PAROLA;} {CIFRA}+ {return Yytoken.NUMERO;} "." {return Yytoken.PUNTO;} "," {return Yytoken.VIRGOLA;} ":" {return Yytoken.DUE_PUNTI;} ";" {return Yytoken.PUNTO_E_VIRGOLA;} "!" {return Yytoken.PUNTO_ESCLAMATIVO;} "?" {return Yytoken.PUNTO_INTERROGATIVO;} {SPAZIATURA} {} . {return Yytoken.ALTRO;}