Linguaggi e traduttori
Anno Accademico 2009/2010
Analizzatori lessicali
JFlex
The fast scanner generator for Java
Esempi d'uso
(N.B. Per alcuni esempi è necessaria la versione 5 del
linguaggio Java)
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
si restituisce la costante enumerativa corrispodnente al token individuato.
Al raggiungimento della fine del file viene restituito in 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
Le classi Esempio (contente il main)
e Yytoken
sono collocate in file separati.
In questa versione ai token possono essere associati dei valori. Pertanto
la struttura della classe Yytoken è più articolata che
nella versione precedente. Di conseguenza, anche le azioni associate alle
regole lessicali nel file di specifica lessicale sono più complesse.
Oltre al metodo main della classe Esempio, viene fornito
un ulteriore metodo main che utilizza questo analizzatore lessicale
al fine di elencare tutte le stringhe incontrate nel testo esaminato.
Il metodo si trova nella classe ElencaParole.
- Versione 2
Alcuni cambiamenti rispetto alla versione precedente: la classe generata
si chiama AnalizzatoreLessicale, il metodo di scansione
getProssimo, la classe che definisce i token
Token.
Vengono inoltre utilizzate alcune direttive di JFlex.
La classe che elenca i Token
riscritta per i nuovi nomi.
Una calcolatrice in notazione
postfissa:
- Versione 1
- Versione 2
In questa versione alle costanti del tipo enumerativo viene associato
un metodo di calcolo. Il codice della calcolatrice può
essere di conseguenza semplificato (il file di specifica lessicale e la
classe che definisce i Token sono gli stessi della versione 1).
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.
WebCounter segnala
accessi a queste pagine dal 23 febbraio 2010
Ultimo aggiornamento: 13 aprile 2010
© Giovanni Pighizzini
Università degli Studi di Milano