Código Fuente Analizador Léxico
Representación
Grafica de la forma en que se mandan a llamar los programas que intervienen en
el analizador léxico
Código
Analizador Léxico
Consta de 4 programas (sin embargo en el avance realizado solo se mostrara uno
de ellos posteriormente se presentaran los restantes)
Palresv.cpp
Este programa sirve para que el compilador
reconozca cuales son para mi palabras reservadas
char
reserv[45][30]={"include","int","char","float","const","void","for","if","do","printf",
"while","clrscr","main","alee","flee","getch","getche","strcpy","qordena","strlen",
"gotoxy","llee","ellee","mayus","break","return","stdio.h","stdlib.h","conio.h","dos.h",
"string.h","ctype.h","strcmp","else"};
char
tipos[10][10]={"int","char","float","void","const"};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
reserv1.cpp
Este programa sirve para analizar el archivo txt y
encuentra las palabras reservadas
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include "PALRESV.cpp" //mando a llamar a este programa por aqui
tengo lo que para mi son palabras reservadas y tipos de datos
FILE *in, *out;
int bandera=0,contfun=0,bandcom=0;
char a;
int w;
char tip[1][20]={'\0'};
char funciones[10][15]={'\0'};
void cerrar(void);
void linea(void);
void abrir(void);
void copia(void);
void funcion(int);
void quitarep(int);
void main()
{char op;
clrscr();
copia();
busca_tipos();
// printf("deseas ver la tabla de variables (S/N)\n");
//op=toupper(getche());
//if(op=='S')
//system("edit tabla.cpp");
//printf("\n\nARCHIVO DE SALIDA: tabla.CPP\n");
}
void abrir()
{
if ((in = fopen("tabla.CPP", "rt"))
== NULL)
{
fprintf(stderr, "no se puede abrir tabla.\n");
exit(1);
}
if ((out = fopen("tabla.BAK", "wt"))
== NULL)
{
fprintf(stderr, "no se puede abrir el bak.\n");
exit(1);
}
}
void cerrar()
{fclose(in);
fclose(out);
remove("tabla.cpp");
rename("tabla.bak","tabla.cpp");
remove("tabla.bak");
}
void copia()
{if ((in = fopen("tokens.cpp", "rt"))
== NULL)
{
fprintf(stderr, "Cannot open input file.\n");
exit(1);
}
if ((out = fopen("tabla.CPP", "wt"))
== NULL)
{
fprintf(stderr, "Cannot open output file.\n");
exit(1);
}
while (!feof(in))
fputc(fgetc(in),out);
fclose(in);
fclose(out);
}
void busca_tipos()
{
int i,k,e=0;
char cadena[1][30];
abrir();
bandera=1;
int bandera2=0;
int ed=0;
while (!feof(in))
{ a=fgetc(in);
if(a=='\n' )
bandera=0;
else
{ if((isalpha(a) || a=='_') && (bandera==0 && bandera2==0))
{
i=0;
while(a!='\n')
{
cadena[0][i]=a;
i++;
a=fgetc(in);
}
cadena[0][i]='\0';
for(k=0;k<45;k++)
if(strcmpi(cadena[0],reserv[k])==0)
e=1;
for(k=0;k<10;k++)
if(strcmpi(cadena[0],tipos[k])==0)
{ e=0; ed=1;}
/* esta funcion falto*/
for(k=0;cadena[0][k]!='\0';k++)
if(cadena[0][k]=='.' && ed==1)
{ fputc(';',out);
break;
} /*aqui acaba */
if(e==0)
{ for(k=0;cadena[0][k]!='\0';k++)
fputc(cadena[0][k],out);
fputc('\n',out);
}
e=0;
}
else
{ if(a==';')
{ fputc(a,out);
fputc('\n',out);
ed=0;
}
if(ispunct(a) && ed==1 && a!='=' && a!='[' &&
a!=']' && a!='(' && a!=',' && a!=')' && a!='*'
&& a!='{' && a!='}')
{ fputc(';',out);
fputc('\n',out);
}
if(a==',')
{ fputc(a,out);
fputc('\n',out);
}
if(a=='(')
{ fputc(a,out);
fputc('\n',out);
}
if(a==')')
{ fputc(a,out);
fputc('\n',out);
}
if(a=='"')
{ if(bandera2==0)
bandera2=1;
else
bandera2=0;
}
if(a=='\\')
a=getc(in);
bandera=1;
}
}
}
cerrar();
}