PDA

View Full Version : [FLEX] Aiuto: Analizzatore lessicale


Helldron
20-02-2010, 16:57
Ciao a tutti,
vorrei un consiglio su un programma FLEX, che è un analizzatore lessicale, scritto praticamente in C ma si tratta comunque di un file .L

Il programma deve fare questo:
aggiunge alla fine di ogni parola una 'a' per ogni occorrenza di 'st' mentre aggiunge alla fine di ogni parola una 'e' per ogni occorrenza di 'tr'. Chiaramente deve riconoscere anche più occorrenze a seconda dell'ordine.

Per esempio:
stelo -> steloa
tramonto -> tramontoe
triste -> tristeea
tristetriste -> tristetristeeaea

Il problema è contare le occorrenze di 'st' e 'tr'.
Grazie.

nikel
21-02-2010, 20:40
un idea...


char stringa[20];
#
#
int contast,contatr

for (int i=0;i<19)
{
if (stringa[i]=='s' && stringa[i+1]=='t') contast++;
if (stringa[i]=='t' && stringa[i+1]=='r') contatr++;
}


//questo sopra per contare le occorrenze


for (int i=0;i<=contast;i++)
{
stringa[fine della stringa]='e'
}

//questo per inserire alla fine

TRF83
22-02-2010, 09:36
Ma vuoi fare tutta da FLEX,oppure ritorni i token ad un programma scritto in c? Nel secondo caso, il metodo riportato da nikel, può andare bene (magari mettere solo un else tra i due if..tanto se è "st" non può essere "tr"..così risparmi un'operazione, in certi casi! Lo so..la mia è semplice pignoleria.. ^^), altrimenti..tutto da flex, non saprei come aiutarti..se non inserendo per ogni occorrenza che trovi questo listato..
Oppure..qualcosa del tipo
.*st
.*tr
.*str (serve perchè se no la prima regola si mangerebbe la t)
In questo caso (sempre se flex non ti mangia il resto della frase fino al $), basterebbe avere due contatori da incrementare sparatemente nel primo e secondo caso, e contemporaneamente nel terzo. Se provi..fammi sapere! (devo iniziare a lavorarci sopra anch'io - a Flex - così mi fai da feedback per un test! ;))