Professional Documents
Culture Documents
h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int yylex();
void yyerror(char *);
int espalreservada(char *);
FILE *f;
int c,p;
char t[80];
int yylex(){
while(1){
c=fgetc(f);
if(c=='\n') { printf("\n"); continue;}
if(c=='\t') { printf("\t"); continue;}
if(isspace(c)) { printf(" "); continue;}
if(c==EOF) return c;
if(isalpha(c)){
if(isalnum(c)){
p=0;
do{
t[p++]=c;
c=fgetc(f);
}while(isalnum(c));
ungetc(c,f);
t[p]=0;
p=espalreservada(t);
if(p>=0) return p;
printf(t);
return ID;
}
}
if(isdigit(c)){
p=0;
do{
t[p++]=c;
c=fgetc(f);
}while(isdigit(c));
ungetc(c,f);
t[p]=0;
if(p>=0) return p;
printf(t);
return INTLITERAL;
}
if(c==':'){
c=fgetc(f);
if(c=='='){
strcpy(t,":=");
printf(t);
return OPASSI;
}
ungetc(c,f);
printf(":");
return COLON;
}
if(c=='%'){
c=fgetc(f);
if(c=='%'){
strcpy(t,"%%");
printf(t);
return OPCOM;
}
ungetc(c,f);
printf("%");
return c;
}
}
}