/* Semplici token per le espressioni aritmetiche */ package lt2.calc; import static lt2.calc.TipoToken.*; //questa direttiva di importa le costanti del tipo TipoToken //evitando di dovere ripetere il nome della classe davanti ad esse. //Ad esempio possiamo scrivere semplicemente PIU al posto //di TipoToken.PIU %% %full //set di caratteri su 8 bit %class Scanner //nome della classe generata %function getProssimo //nome del metodo di scansione %type Token //tipo restituito dal metodo di scansione //(la classe Token e' in un file separato) %eofval{ return new Token(FINE); /* Questa porzione di codice viene eseguita quando viene richiesto un token ed e' stata raggiunta la fine dell'input. Di default viene restituito null, qui per comodita' restituiamo il token FINE. In questo modo nell'analizzatore sintattico ogni volta che vogliamo controllare il valore di un token non siamo costretti a controllare che il riferimento a esso sia diverso da null. */ %eofval} %ignorecase %public //rende public la classe generata CIFRA = [:digit:] FINERIGA = \r | \n | \r\n SPAZIATURA = [ \t\f] | {FINERIGA} %% "/" {return new Token(DIVISO);} "-" {return new Token(MENO);} "*" {return new Token(PER);} "+" {return new Token(PIU);} "(" {return new Token(TONDA_APERTA);} ")" {return new Token(TONDA_CHIUSA);} {CIFRA}+ {return new Token(NUMERO, new Integer(yytext()));} {SPAZIATURA} { } . {return new Token(NULLO, yytext());}