PDA

Visualizza la versione completa : [C] Esercizio in Flex (analisi lessicale) e puntatori


AndreaNobili
23-02-2011, 15:23
Ciao,
allora devo fare un picolo esercizietto in FLEX che un analizzatore lessicale, il problema non riguarda tanto FLEX ma penso pi che altro che non tocco C da qualche annetto e st un po' arruginito con i puntatori...

Il frammento di codice C il seguente:



char consonante = 0; /* Variabile che contiene la consonante corrente riconosciuta durante dall'analizzatore */

char *cursore; /* Puntatore usato per scorrere i caratteri della parola */

{CONSONANTE} { /* Regola definita per il pattern associato al token CONSONANTE */

consonante=tolower(*yytext); /* si usa la variabile carattere per memorizzare la consonante correntemente riconosciuta */

if(consonante == *yytext++) /* Se la consonante attuale uguale al carattere succssivo siamo nel caso di una doppia

yytext++; /* Passa al carattere successivo

ECHO;

}


Sostanzialmente la parte non C (cio {consonante} significa cosa deve fare quando trova una consonante in un file di testo)

Praticamente il mio programmino scorre un file di testo e deve eliminare le consonanti doppie consecutive, per esempio:

trova la parola appiattire e la trasforma in apiatire

yytext un puntatore/b] al carattere corrente nel testo, quindi in pratica la mia logica questa:

Se viene riconosciuta una lettera consonante nel testo (a fare il matching ci pensa FLEX ed indicato da {CONSONANTE}, questo sicuramente giusto), mette questa consonante corrente dentro la variabile [b]consonante facendola diventare minuscola.

A questo punto confronta il valore della consonante corrente con il PROSSIMO ELEMENTO ALL'INTERNO DEL TESTO che ho indicato con la riga:
if(consonante == *yytext++)
consonante dovrebbe contenere un char e *yytext++ dovrebbe restituire il prossimo char nel testo (almeno credo ma ho dei dubbi in merito...).

Se questa condizione risulta essere TRUE significa che sono in presenza di due consonanti doppie consecutive, quindi per eliminare una doppia avanzo di 1 il puntatore all'interno dei caratteri del mio testo con l'istruzione: yytext++;

Infine il comando ECHO un comando di Flex che dice di copiare il carattere corrente sullo standard output (monitor)

Le cose sono 2:

o ho sbagliato qualcosa con i puntatori o ho un problema "algoritmico" perch non f quello che deve fare ma se metto delle parole nel file mi riscrive solo le loro vocali, tipo:

nel file ho la parola almanacco ed invece di restituirmi almanaco mi d aaao (solo le sue vocali)

Qualcuno s aiutarmi?

Grazie mille

Loading