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