Nota: Devi essere registrato per poter inserire un messaggio. Per registrarti, clicca qui. La Registrazione è semplice e gratuita!
V I S U A L I Z Z A D I S C U S S I O N E
Chilavert
Inserito il - 28/06/2004 : 18:16:45 Ho archiviato l'altra discussione perché non mi sembrava giusto dare agli studenti uno scanner che aveva erroretti qua e là... guardate questo e poi mi dite:
enum STATI {P, q0, q1, q2, q3, F}; //P: stato pozza!
int main() { int i, n; int stato; char token[MAXTOKEN+1]; char risp; do { stato = q0; system("CLS"); fflush(stdin); printf("Inserisci il token da analizzare: "); gets(token); printf("%s\n",token); n = strlen(token); for(i = 0; i < n; i++) switch (stato) { case q0: if (isspace(token[i])) stato = q0; else if (token[i] == '/') stato = q1; else stato = P; break; case q1: if (token[i] == '*') stato = q2; else stato = P; break; case q2: if (token[i] != '*') stato = q2; else stato = q3; break; case q3: if (token[i] == '*') stato = q3; else if ((token[i] != '/') && (token[i] != '*')) stato = q2; else if (token[i] == '/') stato = F; break; case F: if (isspace(token[i])) stato = F; else if (token[i] != '\0') stato = P; break; } if (stato == F) printf("Token %s esatto!\n\n", token); else printf("Token %s errato!\n\n", token); do { printf("Si desidera analizzare un altro token? (S/N) "); scanf("%s",&risp); } while ((risp != 'S') && (risp != 's') && (risp != 'N') && (risp != 'n')); } while ((risp == 'S') || (risp == 's')); return(0); }
PS: per coloro i quali si sentono un po' a disagio con le istruzioni gets e fflush, non vi preoccupate... forse non è un metodo elegante, ma per l'esame di linguaggi basta ed avanza (spero) Ecco il listato (per i soliti problemi di perdita d'indentazione): commenti.txt