Scanner e parser con flex + LLgen o LLnextgen

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Fra_221187
Prode Principiante
Messaggi: 190
Iscrizione: martedì 10 gennaio 2006, 19:56
Località: Foggia
Contatti:

Scanner e parser con flex + LLgen o LLnextgen

Messaggio da Fra_221187 »

Ciao a tutti, ho un'esercitazione da fare per l'università: realizzare uno scanner e un parser per un linguaggio inventato tramite gli strumenti flex e LLgen o LLnextgen. Ovviamente non vi chiedo di svolgerlo ma di indicarmi, se ne conoscete, del materiale utile allo scopo.

Vi ringrazio anticipatamente, Francesco
Ultima modifica di Fra_221187 il venerdì 1 giugno 2007, 18:52, modificato 1 volta in totale.
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da paper0k »

Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
Avatar utente
Fra_221187
Prode Principiante
Messaggi: 190
Iscrizione: martedì 10 gennaio 2006, 19:56
Località: Foggia
Contatti:

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da Fra_221187 »

Ovviamente quel materiale l'avevo già trovato... solamente mi sarebbe stato utile un esempio pratico anche molto semplice per capire come far interagire i due strumenti!
Avatar utente
Fra_221187
Prode Principiante
Messaggi: 190
Iscrizione: martedì 10 gennaio 2006, 19:56
Località: Foggia
Contatti:

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da Fra_221187 »

up
Avatar utente
Fra_221187
Prode Principiante
Messaggi: 190
Iscrizione: martedì 10 gennaio 2006, 19:56
Località: Foggia
Contatti:

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da Fra_221187 »

Visto che non ricevo risposte pongo una domanda più precisa per cominciare a capirci qualcosa di più:

Io creo il mio file "linguaggio.lex" così strutturato

Codice: Seleziona tutto

%%
espressione_regolare    printf("nome_token\n");
%%
main()
{
    yylex();
}
dopodiché creo il codice sorgente tramite il comando "flex linguaggio.lex" che poi compilo tramite "gcc lex.yy.c -ll". A questo punto come utilizzo l'eseguibile ottenuto? O provato a passare il nome di un file di testo da usare come input come argomento per l'eseguibile generato ma ottengo il messaggio "input.txt: ASCII text".

Come devo comportarmi?
Francesco
alextar
Prode Principiante
Messaggi: 2
Iscrizione: domenica 3 giugno 2007, 20:09

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da alextar »

Anche io ho lo stesso problema. Mi spiego.... Ho creato il mio bel programmino lex:
%{
#include
#include
%}
%%
[0-9]*"?"[a-z]
%%

Poi mi piacerebbe sapere se funziona.
1) flex nomefile.l
fin qui tutto bene.
In teoria la successiva istruzione dovrebbe essere:
2) gcc lex.yy.c -ll -o out
e l'ultima:
3) ./out  "fornire il LESSEMA"

eppure al passo 2 mi da un sacco di errori? HELP ME.......
Grazie
Avatar utente
Fra_221187
Prode Principiante
Messaggi: 190
Iscrizione: martedì 10 gennaio 2006, 19:56
Località: Foggia
Contatti:

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da Fra_221187 »

Io ho risolto indicando nel main quale input leggere:

Codice: Seleziona tutto

main()
{
	yyin = fopen("input.txt", "r");	
	yylex();
}
Ora però ho un altro problema: dichiaro le seguenti regole

Codice: Seleziona tutto

lettera     [a-zA-Z]
cifra        [0-9]
%%
[{lettera}|{cifra}]*     printf("IDENTIFICATORE\n");
%%
...
Ma non mi riconosce correttamente le stringhe formate da lettere e cifre... a volte taglia fuori la prima o l'ultima lettera mentre altre volte ancora "taglia" in due delle parole e riconosce quindi due identificatori. Sbaglio qualcosa nella dichiarazione?
alextar
Prode Principiante
Messaggi: 2
Iscrizione: domenica 3 giugno 2007, 20:09

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da alextar »

Potresti dirmi il testo dell'esercizio? per curiosità stai preparando l'esame di Compilatori? presso quale università? (b2b)

Adesso provo come dici tu....

io conosco i comandi per mandrake ma di ubuntu niente da fare....

istruzioni mandrake LEX:

flex nomefile.l

cc lex.yy.c -lfl -o out

./out ["Fornire il lessema"]
Avatar utente
Fra_221187
Prode Principiante
Messaggi: 190
Iscrizione: martedì 10 gennaio 2006, 19:56
Località: Foggia
Contatti:

Re: Scanner e parser con flex + LLgen o LLnextgen

Messaggio da Fra_221187 »

L'esercizio consiste nello scrivere uno scanner (con flex) e un parser (con llgen o llnextgen) per un linguaggio di fantasia. Sto preparando l'esame per il corso di linguaggi di programmazione all'università di Bari
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti