Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

Un file sorgente per JFlex è composto di tre sezioni distinte separate dal simbolo '%%'.

La prima sezione contiene il codice utente = SEZIONE DEL CODICE.
La seconda contiene opzioni e dichiarazioni = SEZIONE DELLE DICHIARAZIONI.
La terza contiene regole lessicali sotto forma di coppieespressione_regolare azione.

Sezione del codice
%%
Sezione delle dichiarazioni
%%
Sezione delle regole

Sezione del codice

Tutte le righe presenti nella sezione del codice vengono ricopiate senza alcuna modifica nel programma generato da JFlex.
Di solito si inseriscono dichiarazioni e librerie Java che verrano utilizzate più avanti nel codice.

                Esempio:
                    import java.io.*;
                    import java_cup.runtime.*;

Sezione delle dichiarazioni

Per semplificare la gestione di espressioni regolari complesse o ripetitive, é possibile definire identificatori che designano sotto-espressioni regolari.

La sotto-espressione così definita può essere usata nella sezione delle regole, racchiudendone il nome tra parentesi graffe.

Sezione delle regole

Ad ogni espressione regolare è associata in JFlex un'azione che viene eseguita all'atto del riconoscimento.
Le azioni sono espresse sotto forma di codice Java e devono essere racchiuse tra parentesi graffe.
Per ignorare il testo riconosciuto si usa {;}.

Metodi da usare all'interno delle azioni:
yytext() : contiene il testo riconoscuto dalla regola.
yylength() : contiene il numero di caratteri riconosciuti.
yyline e yycolumn : indicano rispettivamente la riga e colonna corrente, utile nella gestione degli errori.

Esempio:
import java.io.*;
%%
euro = [1-9][0-9]*"."[0-9][0-9] | 0?"."[0-9][0-9]
lire = [1-9][0-9]*
%%
{euro} { System out println( "Euro: "+ yytext() ); }
{lire} { System.out.println( "Lire: " + yytext() ); }


INGRESSO USCITA
0.02 Euro: 0.02
.10 Euro: .10
2000.30 Euro: 2000.30
1.50 Euro: 1.50
15000 Lire: 15000

Ambiguità lessicali

Se ci sono più regole che riconoscono il testo input, verrà eseguita l'azione associata all'espressione regolare che ha riconosciuto la sequenza più lunga oppure l'azione associata all'espressione regolare dichiarata per prima nel file sorgente JFlex.

Stati inclusivi e esclusivi

Inclusivi
    
Nella sezione delle dichiarazioni inserire %state nome_stato
Per richiamarlo usare yybegin(nome_stato).

Le regole dello stato si aggiungono alle regole base dell'analizzatore. Tale stato rimane attivo fino a che non se ne attiva un altro. Per tornare alla situazione iniziale si deve esguire il comando yybegin(YYINITIAL);

Esclusivi

Nella sezione delle dichiarazioni inserire %xstate nome_stato
Per richiamarlo usare yybegin(nome_stato).

Le regole dello stato si sostituiscono a quelle correnti.
Si creano così dei mini analizzatori.

Average (1 Vote)
The average rating is 5.0 stars out of 5.