You are on page 1of 3

#include<stdio.

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];

#define PACKAGE 257


#define BODY 258
#define IS 259
#define BEGIN 260
#define END 261
#define INTLITERAL 262
#define ID 263
#define OPCOM 264
#define WRITELN 265
#define PROCEDURE 266
#define OPASSI 267
#define COLON 268

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;
}

if(c==',') {printf(",");return c;}


if(c=='(') {printf("(");return c;}
if(c==')') {printf(")");return c;}
if(c==';') {printf(";");return c;}
if(c=='+') {printf("+");return c;}
if(c=='*') {printf("*");return c;}
if(c=='=') {printf("=");return c;}

}
}

int espalreservada(char *t){


if(strcmp(t,"package") == 0) {printf(t); return PACKAGE;}
if(strcmp(t,"is") == 0) {printf(t); return IS;}
if(strcmp(t,"body") == 0) {printf(t); return BODY;}
if(strcmp(t,"begin") == 0) {printf(t); return BEGIN;}
if(strcmp(t,"end") == 0) {printf(t); return END;}
if(strcmp(t,"writeln") == 0) {printf(t); return WRITELN;}
if(strcmp(t,"procedure") ==0) {printf(t); return PROCEDURE;}
return -1;
}

void yyerror(char *m){


printf("\n%s\n",m);
}

int main(int argc, char *argv[]){


f=NULL;
f=fopen("prueba.txt","rt");
if(f==NULL){
printf("No se encuentra el archivo!!!\n");
exit(1);
}
yyparse();
fclose(f);
system("PAUSE");
return 0;
}

You might also like