Linguaggi e Traduttori
Anno Accademico 2015/2016
Corso di Laurea in Informatica - Milano
Home page Linguaggi e Traduttori
Home page 2015/2016
Analizzatori lessicali
JFlex
The fast scanner generator for Java
Esempi d'uso
Un semplice esempio di riconoscitore di
elementi lessicali all'interno di un testo:
- Versione 0
Individua all'interno dello standard input semplici elementi lessicali,
come stringhe alfabetiche, numeriche e alcuni simboli di punteggiatura.
I token sono rappresentati da costanti enumerative specificate nella classe
Yytoken, scritta nella prima parte del file di specifica lessicale.
Il metodo yylex della classe Yylex generata dall'analizzatore
restituisce la costante enumerativa corrispondente al token individuato.
Al raggiungimento della fine del file viene restituito il riferimento null.
Nella prima parte del file di specifica lessicale è anche definita una
classe Esempio con un metodo main che avvia l'esecuzione
e richiama il metodo di scansione yylex.
- Versione 1
La classe per la rappresentazione dei token chiama Token
e si trova in un file
separato.
Ai token possono essere associati dei valori. Pertanto
la struttura della classe che rappresenta i token è più articolata che
nella versione precedente. Di conseguenza, anche le azioni associate alle
regole lessicali nel file di specifica lessicale sono più complesse.
Vengono utilizzate alcune opzioni per modificare i nomi della classe
generata, del metodo di scansione e della classe che definisce i token.
Vengono introdotti alcuni metodi per il conteggio di righe, caratteri e
token.
Alla fine dell'input viene restituito un apposito token, anziché
il riferimento null.
Due esempi di applicazioni che utilizzano questo analizzatore lessicale:
- Un programma
per elencare tutti i token trovati e indicare il loro numero,
insieme al numero di caratteri e di righe lette.
- Un programma
per elencare tutte le parole (stringhe alfabetiche).
Entrambi i programmi possono leggere da tastiera o da un file il cui nome
viene specificato sulla riga di comando.
Alcune osservazioni
Un riconoscitore di numeri romani:
- È uno scanner per i numeri romani: il metodo di scansione
(nextToken) ad ogni chiamata produce un token, di tipo
Token contenente il numero letto, in notazione romana e in notazione
decimale. Si noti che i token vengono restituiti dalla seconda regola
corrispondente a un carattere di spaziatura (la prima regola,
eseguita nello stato iniziale, elimina gli spazi
successivi al primo e gli spazi iniziali).
Come esempio d'uso viene fornita separatamente la classe
RiconosciRomani.