#include #include #include #define MAXTOKEN 256 #define P 0//stato pozza #define q0 1 #define q1 2 #define q2 3 #define q3 4 #define q4 5 struct token { char name[MAXTOKEN+1]; int stato; }; int gettoken (FILE *src,struct token *tkn,int max) { int car; int i=0; tkn->stato=q0; if ((car=getc(src))!=EOF) { while (isspace(car)) car=getc(src); while(car!=EOF && i<=max) { tkn->name[i]=car; if ((isalpha(car))&&((car<97)||(car>122))) tkn->stato=P; else { switch (tkn->stato) { case q0: if (car=='/') tkn->stato=q1; else tkn->stato=P; break; case q1: if (car=='*') tkn->stato=q2; else tkn->stato=P; break; case q2: if ((car=='*')||(car=='/')) tkn->stato=q2; else if ((isalnum(car))||(car=='*')||(car=='_')) tkn->stato=q3; else tkn->stato=P; break; case q3: if (car=='*') tkn->stato=q2; else if (car=='/') tkn->stato=q4; else tkn->stato=P; break; case q4: if (car!='\0') tkn->stato=P; break; } } car=getc(src); i++; } tkn->name[i]=0; return 1; } else return 0; } int main(int argc, char *argv[]) { FILE *source; source=fopen("prova.txt","r"); struct token next; while (gettoken(source,&next,MAXTOKEN)) if ((next.stato==q1)||(next.stato==q4)) printf("Il token %s e' esatto.\n",next.name); else printf("Il token %s e' errato.\n",next.name); fclose(source); printf("Premi un tasto per terminare l'esecuzione"); getch(); return 0; }