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:

codice:
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 [b]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 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:
codice:
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