Este
programa es un analizador léxico que te sube las palabras analizadas de un
archivo a memoria dinámica utilizando árboles
los
archivos tendrán el código fuente.
Ejemplo:
inicio
escribir(Daniel)
fin
Este
programa esta hecho con pase de parámetros
#include"stdio.h" /*Las palabras que puedes utilizar en este
progra ma son las iguientes*/
#include"conio.h" /*inicio, escribe, lee, si, fin, mientras*/
#include"alloc.h"
/*inicio es la cabesa del programa*/
#define FALSO 0 /*fin son los pies delprograma*/
#define CIERTO 1 /*escribe,lee,si,mientras son isntrucciones
dadas por*/
/*la gramatica ya antes establecida*/
char palabra[30],palabr[30];
struct programa{struct inicio
*inicio1; struct sentencias *sen1; struct fin *fin1;};
struct inicio{struct programa
*anterior1;};
struct sentencias{struct sentencias
*siguiente1; struct instrucciones *ins_sig; struct sentencias *anterior2;
struct programa *raiz;};
struct instrucciones{struct escribe
*esc; struct lee *lee; struct mientras *min; struct si *si; struct sentencias
*sent;};
struct escribe{struct instrucciones
*anterior3;};
struct lee{struct instrucciones
*anterior4;};
struct mientras{struct instrucciones
*anterior5;};
struct si{struct instrucciones
*anterior6;};
struct fin{struct programa
*anterior7;};
struct
programa *nodo_raiz=NULL;
struct
inicio *i=NULL;
struct
sentencias *sent=NULL;
struct
instrucciones *inst=NULL;
struct
escribe *escb=NULL;
struct lee
*le=NULL;
struct
mientras *mi=NULL;
struct si
*s=NULL;
struct fin
*f=NULL;
int
ins_sen(char palabra[50])
{if((strcmp(palabra,"escribe"))==0)
return 1;
else if((strcmp(palabra,"lee"))==0)
return 2;
else
if((strcmp(palabra,"mientras"))==0) return 3;
else if((strcmp(palabra,"si"))==0)
return 4;
else if((strcmp(palabra,"inicio"))==0)
return 5;
else if((strcmp(palabra,"fin"))==0)
return 6;
}
void
mensage(){printf("NO HAY MEMORIA DISPONIBLE"); getch(); exit(1);};
void
ins_lee()
{if((le=malloc(sizeof(le)))==NULL){mensage();}
le->anterior4=inst;
inst->lee=le;}
void ins_mientras()
{if((mi=malloc(sizeof(mi)))==NULL){mensage();}
mi->anterior5=inst;
inst->min=mi;
}
void ins_escribe()
{
if((escb=malloc(sizeof(escb)))==NULL){mensage();}
escb->anterior3=inst;
inst->esc=escb;}
void
ins_si()
{ struct instrucciones *tem=inst;
if((inst=malloc(sizeof(inst)))==NULL){mensage();}
inst->esc=NULL; inst->lee=NULL;
inst->min=NULL; inst->si=NULL;
inst->sent=NULL;
if(!tem)
{ inst->esc=NULL;
inst->min=NULL;
inst->lee=NULL;
inst->si=NULL;
inst->sent=sent;}
else
{ inst->esc=NULL;
inst->min=NULL;
inst->lee=NULL;
inst->si=NULL;
inst->sent=tem; }
}
void
ins_sentencias()
{ struct sentencias *tmp=sent ;
if((sent=malloc(sizeof(sent)))==NULL){mensage();}
if(!tmp){sent->siguiente1=NULL;
sent->ins_sig=NULL;
sent->anterior2=NULL;
nodo_raiz->sen1=sent;
sent->raiz=nodo_raiz;
}
else
{
sent->ins_sig=NULL;
sent->anterior2=tmp;
sent->siguiente1=NULL;
sent->raiz=NULL;
}
}
void
ins_fin()
{
if((f=malloc(sizeof(f)))==NULL){mensage();}
f->anterior7=nodo_raiz;
nodo_raiz->fin1=f; }
void
ins_inicio()
{
if((i=malloc(sizeof(i)))==NULL){mensage();}
nodo_raiz->inicio1=i;
i->anterior1=nodo_raiz; }
void
ins_programa()
{
if((nodo_raiz=malloc(sizeof(nodo_raiz)))==NULL){mensage();}
nodo_raiz->inicio1=NULL;
nodo_raiz->sen1=NULL; nodo_raiz->fin1=NULL;
}
void memoria(int que)
{
if(que==1){ins_escribe();}
else if(que==2){ins_lee();}
else if(que==3){ins_mientras();}
else if(que==4){ins_si();}
else if(que==5){ins_inicio();}
else if(que==6){ins_fin();}
}
void inicialisa(void) { int x;
for(x=0;x<=29;x++){ palabra[x]='