domingo, 12 de agosto de 2007

Es para abrir archivo y descubrir un Token. Lexema

#include
#include
#include
#include
#define n 20

main()
{
int mat[4]={7,7,10,7};
FILE *ptr,*ptrd; int i=0,sm,v=0,p=0,col=0,c,a;
char dato[20]=" ";
char stri[20]=" ",*lex[20]={" "},*des[20]={" "};
int sust[n];

for (a=0;a<=20;a++)
sust[a]=0;

ptr=fopen("dia.txt","r");

while (feof(ptr)==0)
{
fgets(stri,20,ptr); sm=0; v=0;
while(stri[sm]!='\n' && stri[sm]!='\t')
{
if(stri[sm]<='z' && stri[sm]>='a')
sust[v]=1;
else
{
if(stri[sm]>='0' && stri[sm]<='9')
sust[v]=2;
else
{
if (stri[sm]=='.')
sust[v]=3;
else
{
if (stri[sm]=='+' stri[sm]=='-' stri[sm]=='*' stri[sm]=='/')
sust[v]=4;
else
{
lex[p]="NA";
des[p]="No Aceptada";
p++;
}
}
}
}

sm++; v++;

}

v=0;

while((stri[sm]=='\n' stri[sm]=='\t') && sust[v]!=NULL){ if (sust[v]==1)
{
col=sust[v]-1;

while (mat[col] !=10 && sust[v]!=NULL)
{
col=sust[v]-1; v++;
}
if (col==1)
{
lex[p]="ID";
des[p]="Identificador";
}
else
if(col==0)
{
ptrd=fopen("palres.txt","r"); fgets(dato,20,ptrd);

while (feof(ptrd)==0 && strcmp(stri,dato)!=0)
{
fgets(dato,20,ptrd);
}

if(strcmp(stri,dato)==0)
{
lex[p]="PR";
des[p]="Palabra Reservada";
}
else
{
lex[p]="ID";
des[p]="Identificador";
}
}
}

else
{
if (sust[0]==2)
{
col=sust[v]-1;

while (mat[col]!=10 && sust[v]!=NULL)
{
col=sust[v]-1; v++;
}
if(col==2)
{
col=sust[v]-1;

while (mat[col]!=10 && sust[v]!=NULL)
{
v++;
col=sust[v];
}
if(col!=1)
{
lex[p]="NF";
des[p]="Numero Flotante";
}
else
{
lex[p]="NA";
des[p]="No Aceptada";
}
}
else
if(col==1)
{
lex[p]="NE";
des[p]="Numero Entero";
}
}
else
{
if(sust[0]==3)
{
lex[p]="NA";
des[p]="No Aceptada";
}
else
{
if(sust[0]==4)
{
lex[p]="SE";
des[p]="Signo Especial";
}
}
}
}
p++;

for (a=0;a<=20;a++)
sust[a]=0;
}}

p=0;
clrscr();gotoxy(2,6); printf("TOKEN");gotoxy(27,6); printf("LEXEMA");gotoxy(40,6); printf("DESCRIPCION");gotoxy(70,6); printf("LINEA");
c=8;
ptr=fopen("dia.txt","r");
while (feof(ptr)==0) { fgets(stri,20,ptr); gotoxy(2,c); printf("%s",stri); gotoxy(30,c); printf("%s",lex[p]); gotoxy(40,c); printf("%s",des[p]); gotoxy(70,c); printf("%d",i); c++; i++; p++; }
fclose(ptr); fclose(ptrd);
getch();
return 0;
}

No hay comentarios: