Logo elrincondelc.com
curso de programación en c
Foros de programación en C
Inicio :: Código fuente
Usuario: Clave: Regístrate

Valoración
4

Analizador lexico

codigo enviada por: Gaona (2007-09-12 21:39:45)
Este programa es un analizador lexico que te sube las palabras analizadas de un archivo a memoria dinamica utilizando arboles
los archivos tendran el codigo fuente
ejemplo
inicio
escribir(Daniel)
fin
este programa esta hecho con pase de parametros espero que te sirva
#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]='
7 comentarios | Etiquetas: xxx
por favor no logro hacer correr este programa..que alguien me diga como hacerle...aesolano_84@hotmail.com
(solano 2007-11-16 11:47:14)
perdonen por averlo metido mal pero les prometo que lo voy a buscar en mis codigos fuentes y lo volvere a introducir para que les pueda correr y para aquellos que me preguntan donde compile compile en c 2.01, perdon por abandonar nadamas asi de repente la pagina y no aver metido mas codigo
(Gaona 2008-04-07 15:39:35)
ya pues cuando completan el codigo, y por cierto que estas usando LL o LR, para las gramticas, seria bueno que pongas las gramticas y sus producciones. gracias
(MicroLogic 2008-07-02 11:01:45)
uhmmm! creo que ese analizador lexico no es muy realista... :D
(EriOsMurrugarra 2010-08-04 20:55:33)
interesante
(diemfdie 2012-03-10 13:15:12)
http://www.elrincondelc.com/nuevorincon/index.php?pag=codigos&id=30
(gaona 2012-07-26 19:48:03)
donde esta el resto del codigo
(trunsk420 2014-05-13 20:29:01)

Para enviar comentarios debes estar registrado.

(c) ElRincondelC.com, 1999-2007

Un proyecto de Urlan Heat : proyectos de Internet y soporte para el comercio electrónico.