#include #include #define MAX_LENGTH 100 int scan(char* s) { enum{S,A,B,C,D,POZZA}current_state = S; int i = 0; while((s[i] != '\0' && s[i] != '\n') && current_state != POZZA) { switch(current_state) { case S: if(s[i] == '1') current_state = S; else if(s[i] == '0') current_state = A; else { printf("\nla stringa contiene simboli esterni all' alfabeto\n"); current_state = POZZA; } break; case A: if(s[i] == '0') current_state = B; else if(s[i] != '1') printf("\nla stringa contiene simboli esterni all' alfabeto\n"); else current_state = POZZA; break; case B: if(s[i] == '0') current_state = B; else if(s[i] == '1') current_state = C; else { printf("\nla stringa contiene simboli esterni all' alfabeto\n"); current_state = POZZA; } break; case C: if(s[i] == '0') current_state = A; else if(s[i] == '1') current_state = D; else { printf("\nla stringa contiene simboli esterni all' alfabeto\n"); current_state = POZZA; } break; case D: if(s[i] == '0' || s[i] == '1') current_state = D; else { printf("\nla stringa contiene simboli esterni all' alfabeto\n"); current_state = POZZA; } break; } ++i; } if(current_state == POZZA) printf("\nsi e' giunti nello stato pozza\n"); else if(current_state == S || current_state == A || current_state == B || current_state == C) printf("\nsi e' giunti ad uno stato non finale\n"); return(current_state == D); } int main(int argc,char* argv[]) { char buffer[MAX_LENGTH+1]; char* filename = argv[1]; FILE* file; file = fopen(filename,"r"); if(file == NULL) { printf("file inesistente"); return -1; } while(!feof(file)) { if(scan(fgets(buffer,MAX_LENGTH,file))) printf("%s RICONOSCIUTO\n",buffer); else printf("%s NON RICONOSCIUTO\n",buffer); } fclose(file); system("PAUSE"); return 0; }