/* AUTORE: Marino "kernelfolla" Di Clemente DATA: venerdì 11 Giugno 2004 AUTOMA: da q0 a q1 con / da q1 a q2 con * da q2 a q2 con !* ! significa not da q2 a q3 con * da q3 a q2 con !/ da q3 a q4 con / q1 e q4 sono stati finali, tutto il resto è noia ISTRUZIONI: il testo viene preso da testo.txt, controlla solo il primo token, questo era più che sufficiente nel laboratorio NOTE: l'automa non effettua un lookahead poiche penso non sia necessario(invece emi sa che era necessario nella prova di lab) inoltre non viene fatto il controllo nell'alfabeto X={a..z,1..9,*,/,_} anche se basterebbe implementare uno stato pozza e degli else nel codice(probabilmente poi lo farò). Praticamente è l'automa che controlla il diviso e i commenti. */ #include #include #include //modificarlo se si usa linux #define pause() system("pause") #define DEBUG 1 //funzione di debug che mostra lo stato void dstato(int q){ if(DEBUG) printf("STATO:%i\n",q); } int main() { FILE *f; char c; int end = 0; //per il while int q = 0; dstato(q); f = fopen("testo.txt","r"); if(getc(f)=='/'){ q = 1; dstato(q); if(getc(f)=='*'){ while(end!=1){ q = 2; dstato(q); while((c=getc(f))!='*'&&c!=EOF) //identico al do while ; if(c=='*'){ q = 3; dstato(q); if((c=getc(f))=='/'){ q = 4; dstato(q); end = 1; } }else{ //sarà EOF end = 1; } } } } switch(q){ case 0: case 2: case 3: printf("Non appartiene al linguaggio\n"); break; case 4: printf("Appartiene a q4\n"); break; case 1: printf("Appartiene a q1\n"); break; } pause(); return 0; }