Linguaggi e Traduttori 2
Anno accademico 2007/2008 - Secondo semestre
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.
Il metodo yylex della classe Yylex generata dall'analizzatore
si limita a visualizzare un messaggio per ogni elemento individuato e termina
quando viene inserito il carattere di end-of-file.
Nella prima parte del file di specifica lessicale è definita una
classe Esempio con un metodo main che avvia l'esecuzione
e richiama il metodo di scansione yylex.
- Versione 1
Qualche aggiunta alla versione precedente: può leggere anche da un file,
il cui nome deve essere fornito al momento dell'esecuzione sulla linea di comando;
è in grado di leggere caratteri Unicode.
- Versione 2
Gli elementi lessicali sono gli stessi delle due versioni precedenti,
ma l'architettura è simile a quella di un vero analizzatore lessicale.
Nella classe Yytoken (definita nella prima parte del file
di specifica lessicale) vengono dichiarate, mediante un tipo enumerativo,
delle costanti per rappresentare i vari elementi lessicali e viene
definita la struttura dei token.
Il metodo yylex è un produttore di token: a ogni chiamata
restituisce un'istanza di Yytoken corrispondente all'elemento lessicale appena
letto.
Separatamente sono fornite due rudimentali classi di prova, che richiamano
yylex:
una si occupa di
elencare i token incontrati,
l'altra di riscrivere l'input letto utilizzando lettere maiuscole.
- Versione 3
Alcuni cambiamenti rispetto alla versione precedente: la classe generata si chiama
AnalizzatoreLessicale, il metodo di scansione
getProssimo. Vengono inoltre utilizzate alcune direttive di JFlex.
La classe che elenca i Token
riscritta per i nuovi nomi.
Un riconoscitore di numeri romani:
- Versione 0
Individua all'interno dello standard input numeri romani scritti correttamente
utilizzando i simboli I V X, e li trascrive in output.
In questa versione non viene restituito alcun token.
- Versione 1
Una volta individuato un numero scritto correttamente, lo visualizza anche
in notazione decimale.
In questa versione non viene restituito alcun token.
- Versione 2
È 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.java.
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).
WebCounter
segnala
accessi a queste pagine dal 22 febbraio 2000
Ultimo
aggiornamento: 3 aprile 2008
© Giovanni Pighizzini