01/04/2014, 00:46
|
| | Fecha de Ingreso: marzo-2014
Mensajes: 2
Antigüedad: 10 años, 7 meses Puntos: 0 | |
Analizador lexico Hola soy nuevo recien me registre, quisiera su ayuda.... estoy llevando el curso de Compiladores en la Universidad. Explico un poco tengo un archivo el cual leo desde mi programa caracter por caracter, al encontrar un espacio en blanco o retorno de carro comparo lo leido para saber si es una palabra reservada, si lo es me manda un mensaje "palabra reservada" y sino pues manda "Es un ID", el problema es al poner dos o mas espacios e blanco o dos o mas retornos de carro en el archivo ya que me manda el mensaje "es un ID" cuando realmente no es nada,.... dejo el codigo y si me pudieran ayudar muchisimas gracias......!!!!!
#include<stdio>
#include<conio>
#include<iostream>
void comparar();
void vaciar();
char pal[1];
char comp[15];
int y=0,a=0,ac=0;
FILE *codigo;
main()
{
cout<<"PRESIONE ENTER PARA LEER ARCHIVO\n";
getch();
codigo=fopen("Codigo.txt","r");
cout<<"\n";
while(!feof(codigo))
{
comp[y]=fgetc(codigo);
pal[0]=comp[y];
cout<<comp[y];
if(strncmp(pal," ",1)==0)
{
comparar();
}
if(strncmp(pal,"\n",1)==0)
{
comparar();
}
if(feof(codigo))
{
comparar();
}
if(a==1)
{
a=0;
y=0;
}
else
{
y++;
}
}
fclose(codigo);
getch();
return 0;
}
void comparar()
{
if(strncmp(comp,"int",3)==0)
{
gotoxy(8,3+ac);cout<<" Palabra Reservada\n";
a=1;
getch();
}
if(strncmp(comp,"josue",5)==0)
{
gotoxy(8,3+ac);cout<<" Palabra Reservada\n";
a=1;
getch();
}
if(strncmp(comp,"juan",4)==0)
{
gotoxy(8,3+ac);cout<<" Palabra Reservada\n";
a=1;
getch();
}
else
{
if(a==0)
{
gotoxy(8,3+ac);cout<<" ES UN ID\n";
a=1;
getch();
}
}
ac++;
vaciar();
}
void vaciar()
{
for(int z=0;z<=14;z++)
{
comp[z]=NULL;
}
} |