Translate

Avvisi

Agg: Toolbar
Mod: SEF
Mod: Forum
Mod: Menu Invio
Agg: Clouds
Per ottenere i diritti di scrittura contattare minopausa

Login






Password dimenticata?
Nessun account? Registrati

Statistiche

OS: Linux n
PHP: 5.1.6
MySQL: 5.0.22
Ora: 02:21
Caching: Enabled
GZIP: Disabled
Utenti: 48
Notizie: 214
Collegamenti web: 38
Visitatori: 131557

Abbiamo 1 utente online

website stats


Home
Flex-a-billy PDF Stampa
Scritto da minopausa   
martedė 01 aprile 2008
Ultimo aggiornamento ( giovedė 03 aprile 2008 )
 
http://www.robot-italy.com/images/images_big/600081.jpg
img http://www.robot-italy.com/

 
Dopo l'articolo su come installare Flex qualche utente ci ha chieste se avessimo sotto mano un esempio su come iniziare a creare velocemente un applicativo che utilizzasse il motore di Flex. Sperando di fare una cosa gradita, il sottoscritto e sonik_tooth vi mostranno due esempi abbastanza semplici per poter iniziare a giocare con Flex.

L'articolo su come installa Flex è leggibile qui.

Primo esempio.
Il primo applicativo con Flex che vi proponiamo consiste nell'eliminare i commenti C-style da un qualunque file in ingresso. Siccome vogliamo utilizzare il semplice analizzatore lessicale senza fare uso di un analizzatore sintattico (come ad esempio Bison) che prende in ingresso la funzione yylex() generata da Flex abbiamo implementato nella sezione delle procedure di supporto un main() che faccia funzionare stand-alone il programma creato con cc. Questo è il listato in ingresso a Flex:

%%
"/*".*"*/"
"//".*  
"/*"[^"*/"]+"*/"
%%
int main(int argc, char *argv[]) {
yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}

Dopo averlo compilato con questo comando:

flex nomefile

verrà creato un file lex.yy.c (il file creato avrà sempre questo nome, indipendentemente dal nome del file da compilare!). Compiliamo questo file con cc oppure con gcc¹:

cc lex.yy.c -lfl

se invece usiamo Lex il comando sarà:

cc lex.yy.c -ll

Otterremo l'eseguibile a.out che manderemo in esecuzione con il seguente comando:

./a.out nomefiledaanalizzare

Se creassimo un file con il seguente contenuto:

Commento su singola riga 1:
/* commento su singola riga */
Commento su singola riga 2:
// commento su singola riga
Commento su più righe:
/* commento
    su
    più
    righe */

e lo dessimo in pasto all'eseguibile sopracitato, avremmo in uscita su console (a meno di redizionare l'output altrove) il seguente testo:

Commento su singola riga 1:
Commento su singola riga 2:
Commento su più righe:

Secondo esempio.
Vediamo ora come mandare su console un messaggio di errore e terminare l'esecuzione del programma ogni volta che l'applicativo incontra la direttiva #INCLUDE. Occorre notare che il pattern #INCLUDE può essere sostituito da qualunque altro pattern.

%%
"#include" { printf("ERROR !!! directive #include found.\n");
        return 0; }
%%
int main(int argc, char *argv[]) {
    yyin = fopen(argv[1], "r");
    yylex();
    fclose(yyin);
}

Dopo averlo compilato con questo comando:

flex nomefile

verrà creato un file lex.yy.c (il file creato avrà sempre questo nome, indipendentemente dal nome del file da compilare!). Compiliamo questo file con cc oppure con gcc¹:

cc lex.yy.c -lfl

se invece usiamo Lex il comando sarà:

cc lex.yy.c -ll

Otterremo l'eseguibile a.out che manderemo in esecuzione con il seguente comando:

./a.out nomefiledaanalizzare

Se creassimo un file in cui è presente il pattern #INCLUDE l'applicativo restituirà un errore del tipo:

ERROR !!! directive #include found.

e l'esecuzione dell'applicativo verrà terminata.

¹ In un sistema Debian-like out-of-the-box (appena installato) sicuramente non saranno presenti le librerie necessarie all'esecuzione di cc/gcc. Installiamole con il comando:

sudo apt-get install libc6-dev
Riporta questo articolo sul tuo sito Aggiungi a lista preferiti

Commenti utenti (2)
Postato da Nerone, il 05-04-2008 16:50,
1. Grazie
Grazie per il tute e gli esempi ;)
 
» Segnala questo commento all'amministratore

Postato da minopausa, il 05-04-2008 17:21,
2. @Nerone
Č sempre un piacere! ;)
 
» Segnala questo commento all'amministratore

Aggiungi il tuo commento



mXcomment 1.0.6 DIGO -  © 2007-2008 - visualclinic.fr - Licenza Creative Commons
Modificato da Fiuh!Team - FIUH.it - Alcuni diritti riservati
< Prec.   Pros. >

Sezioni

Compiz-Fusion
Firefox
Musica
Video
Vari
Sicurezza
Utility
Istant Messaging
Grafica
BugFix
Giochi

Categorie

website © 2008 www.tuxbay.org | logo © Gruthelsud | buttons © foCs | hosting eastitaly.com
Translate