#include <stdio.h>
#include <ctype.h>

int yyline;
FILE *yyinput;
char yytext[1024];

int yylex()
{
   int c;		/* the current character */
   int i=0;		/* index into yytext[] */
   int category = 0;
   for (;;) {
      c = getc(yyinput);
      switch(c) {
      case EOF:
	 if (category == 0)
	    return -1;
	 yytext[i] = '\0';
	 return category;
      case '\n':
         yyline++;
	 /* fall through */
      case ' ': case '\t':
         if (category==0)
	    continue;
         yytext[i] = '\0';
	 return category;
      default:
	 yytext[i++] = c;
	 if (isupper(c)) {
	    if (category==0) category = 2;
	    else if ((category==1) || category==2) category = category;
	    else category = 5;
	    }
	 if (islower(c)) {
	    if (category==0) category = 1;
	    else if ((category==1) || category==2) category = category;
	    else category = 5;
	    }
	 else if (isdigit(c)) {
	    if (!category || (category == 3)) category = 3;
	    else category = 5;
	    }
	 else {
	    if (!category || (category == 4)) category = 4;
	    else category = 5;
	    }
	 }
      }
}

