#include #include #include "analex.h" double num; TOKEN ilc; /* item lexico corrente */ char ch; static TOKEN Erro() { fputs("Item lexico invalido.\n", stderr); return INVALIDO; } TOKEN analex() { while (isspace(ch = getc(stdin))); if ((ch == '.') || isdigit(ch)) { ungetc(ch, stdin); if (scanf("%lf", &num)!=1) { getchar(); /* Come o ponto. */ Erro(); } ch = 0; ilc = NUMERO; } else switch (ch) { case '+': case '-': case '*': case '/': ilc = OPERADOR; break; case '(': ilc = PAR_ESQ; break; case ')': ilc = PAR_DIR; break; case '[': ilc = COL_ESQ; break; case ']': ilc = COL_DIR; break; case 'K': case 'k': ilc = VARIAVEL; break; case ':': if ((ch = getc(stdin)) == '=') ilc = ATRIBUI; else return Erro(); break; case ';': ilc = SEPARADOR; break; case EOF : case 'q' : case 'Q' : case 'f' : case 'F' : ilc = FIM; break; default : return Erro(); } return ilc; }