C/Visual C - AYUDA EN ANALIZADOR SINTACTICO!!!

 
Vista:

AYUDA EN ANALIZADOR SINTACTICO!!!

Publicado por ANGEL (2 intervenciones) el 21/11/2005 16:19:51
Amigos que tal tengo un problema ,mi programa hace lo siguiente ,lee en un txt el codigo que esta abajo :

#include<iostream.h>

void main ()
{
int a , b , c ;

cout << "ingresa a " ;
cin >> a ;
cout << "ingresa b " ;
cin >> b ;
c = a + b ;
cout << "la suma sera :" ;

cout << c ;
}

una vez que lo lee ,lo compara con el codigo en c++ que esta a continuacion :

#include<stdio.h>
#include<string.h>
#include<ctype.h>

#define MAX_PAL 32
#define MAX_PALS 64

struct keyIE {
char *palabraI;
char *palabraE;
int index;
} keytab[] = {
"si","if", 1,
"para","for", 2,
"mientras","while", 3,
"leer","cin", 4,
"escribir","cout",5,
"principal2","main", 6,
/* ... */
"principal","void", 7,
"Entero","int", 8,
"Doble","double",9,
"cabecera" ,"#include<iostream.h>" ,10,

/*variables*/

//"var","a", 10,
//"var","b", 11,
//"var","c", 12,
"var","d", 13,
"var","e", 13,
"var","f", 13,
"var","g", 13,
"var","h", 13,
"var","i", 13,
"var","j", 13,
"var","k", 13,
"var","l", 13,
"var","m", 13,

/*cosntantes*/

"cons","1", 14,
"cons","2", 15,
"cons","3", 16,
"cons","4", 17,
"cons","5", 18,
"cons","6", 19,
"cons","7", 20,
"cons","8", 21,
"cons","9", 22,
"cons","0", 23

};

char * sigToken(FILE *f) {
char *palabra = new char[MAX_PAL];
int i=0,c;
while(isspace(c=getc(f)))
;
if (c!=EOF) ungetc(c,f);

for(c = getc(f); !isspace(c) && !feof(f); c = getc(f))
palabra[i++] = c;

if (c!=EOF) ungetc(c,f);
palabra[i] = '\0';
return palabra;
}
int Reemplaza(char * token) {
int n = sizeof(keytab)/sizeof(struct keyIE);
for(int i=0; i<n; i++)
if (strcmp(keytab[i].palabraE,token) == 0)
return i;
return -1;
}
void main() {
int flag=0;
char *n1 = "entrada8.txt";
char *n2 = "salida8.txt";

FILE *f1 = fopen(n1,"r");
FILE *f2 = fopen(n2,"w");

char *tok;
for(int r=0; !feof(f1); )
{
tok = sigToken(f1);
r = Reemplaza(tok);
if (r>=0) fprintf(f2, "%s%s", keytab[r].palabraI, "\n");
else fprintf(f2, tok,"\n");
delete tok;
}
fclose(f2);
fclose(f1);
}

ejecuto el codigo en c++ que esta arriba y me bota un txt de esta forma :

cabecera
principal
principal2
(){Entero
a,b,c;escribir
<<"ingresaa";leer
>>a;escribir
<<"ingresab";leer
>>b;c=a+b;escribir
<<"lasumasera:";escribir
<<c;}

como ven la salida sale desordenada y quiero que mi salida salga asi :

cabecera
principal principal2 ()
{
Entero
a,b,c;
escribir <<"ingresaa";
leer>>a;
escribir<<"ingresab";
leer>>b;
c=a+b;
escribir<<"lasumasera:";

escribir<<c;
}

es decir en forma ordenada y de acuerdo a la entrada que puse al comienzo ,por favor necesito su ayuda urgente muchas gracias de antemano ,cualquier ayuda ,me escriben a mi correo [email protected]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder