#include #include #include #define MAXTOKEN 256 struct token{ char name[MAXTOKEN+1]; int stato; }; int gettoken(FILE *src, struct token *tkn); int main() { FILE *source; struct token next; source = fopen("esame.txt","r"); printf("PAROLE RICONOSCIUTE\n"); while (gettoken(source, &next)) if (next.stato == 6) printf("%s\n", next.name); fclose(source); system("PAUSE"); return(0); } int gettoken(FILE *src, struct token *tkn){ int c, i=0; int ric=0; tkn->stato=0; if((c=getc(src)) != EOF) { while(isspace(c)) c=getc(src); while(ric != 1) switch(tkn->stato){ case 0: if(c == '/') { tkn->name[i]=c; tkn->stato=1; i++; c=getc(src); } else { while(!isspace(c) && c != EOF) c=getc(src); ric=1; } break; case 1: if(isspace(c) || c == EOF) { tkn->name[i]='\0'; tkn->stato=6; ric=1; } else if(c == '*') { tkn->name[i]=c; tkn->stato=2; i++; c=getc(src); } else { while(!isspace(c) && c != EOF) c=getc(src); ric=1; } break; case 2: if(c == '*') { tkn->name[i]=c; tkn->stato=3; i++; c=getc(src); } else if(islower(c) || isdigit(c) || c=='/' || c=='_') { tkn->name[i]=c; tkn->stato=2; i++; c=getc(src); } else { while(!isspace(c) && c != EOF) c=getc(src); ric=1; } break; case 3: if(c=='/') { tkn->name[i]=c; tkn->stato=4; i++; c=getc(src); } else if(islower(c) || isdigit(c) || c=='*' || c=='_') { tkn->name[i]=c; tkn->stato=2; i++; c=getc(src); } else { while(!isspace(c) && c != EOF) c=getc(src); ric=1; } break; case 4: if(isspace(c) || c==EOF) { tkn->name[i]='\0'; tkn->stato=6; ric=1; } else { while(!isspace(c) && c != EOF) c=getc(src); ric=1; } break; default: break; } return 1; } return 0; }