jueves, 14 de enero de 2010

Ehuporia

// Programa //

#include
#include
#include
#include
#include


int ver(char cadena[20]);

int ver_linea(int linea[50],int tam,int l);
int ver_estructura(int linea[50],int tam);


char reservadas[11][9]=
{

{'i','f'},
{'w','h','i','l','e'},
{'f','o','r'},
{'e','n','d'},
{'t','h','e','n'},
{'f','u','n','c','t','i','o','n'},
{'i','n','t','e','g','e','r'},
{'r','e','t','u','r','n'},
{'d','o'},
{'b','y'},
{'t','o'},
};

int estructura_programa[6][8]=
{
{0, 0, 0, 0, 0, 0, 0, 0},
{2, 0, 3, 0, 4, 0, 1, 1},
{2, 5, 3, 0, 4, 0, 2, 2},
{2, 0, 3, 5, 4, 0, 3, 3},
{2, 0, 3, 0, 4, 5, 4, 4},
{2, 0, 3, 0, 4, 0, 5, 0},

};


char operadores_logicos[4]={'<','>','=','!'};
int op_log[5][4]=
{
{0, 0, 0, 0},
{2, 2, 4, 4},
{0, 0, 3, 0},
{0, 0, 0, 0},
{0, 0, 3, 0},
};
int ident[3][2]=
{
{0, 0},
{2, 0},
{2, 2},

};
int begin_if[7][5]=
{
{0, 0, 0, 0, 0},
{2, 0, 0, 0, 0},
{0, 3, 3, 0, 0},
{0, 0, 0, 4, 0},
{0, 5, 5, 0, 0},
{0, 0, 0, 0, 6},
{0, 0, 0, 0, 0},
};

int begin_while[7][5]=
{
{0, 0, 0, 0, 0},
{2, 0, 0, 0, 0},
{0, 3, 3, 0, 0},
{0, 0, 0, 4, 0},
{0, 5, 5, 0, 0},
{0, 0, 0, 0, 6},
{0, 0, 0, 0, 0},
};
int begin_function[8][6]=
{
{0, 0, 0, 0, 0, 0},
{2, 0, 0, 0, 0, 0},
{0, 3, 0, 0, 0, 0},
{0, 0, 4, 0, 0, 0},
{0, 0, 0, 5, 7, 0},
{0, 6, 0, 0, 0, 0},
{0, 0, 0, 0, 4, 7},
{0, 0, 0, 0, 0, 0},

};
int mate[6][4]=
{
{0, 0, 0, 0},
{2, 0, 0, 0},
{0, 3, 0, 0},
{4, 0, 4, 0},
{0, 0, 0, 5},
{4, 0, 4, 0},


};
int return1[4][3]=
{
{0, 0, 0},
{0, 0, 2},
{3, 3, 0},
{0, 0, 0},



};
int endif[4][2]=
{
{0, 0},
{0, 2},
{3, 0},
{0, 0},


};
int endwhile[4][2]=
{
{0, 0},
{0, 2},
{3, 0},
{0, 0},


};


char alfabeto[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char digitos[10]={'0','1','2','3','4','5','6','7','8','9'};








char opemat[4]={'+','-','*','/'};


char igual='=';
int errores_line=0;


char cadena[50][20];

char identificador[50][20];
int tipo_id[50];
int tipo=0;
int nido=0;
int tokens=0;
int linea_val[30];
int errores_lexico=0;
int main()
{
cout<<"***********ANALISIS LEXICO*********** "<
ifstream archivo("cod.txt", ios::in);
char var;
int x=0,y=0;
int lin=1;
int linea[50];
int tokens_linea[50][2];


while(!archivo.eof())
{
archivo.get(var);
if(var==' '||var=='\n')
{
x=0;
tokens_linea[y][0]=ver(cadena[y]);
if(tokens_linea[y][0]==0)
errores_lexico++;
tokens_linea[y][1]=lin;
cout<<" token "<
cout<
linea[y]=lin;
tokens++;
if(var=='\n')
{
lin++;



}
y++;

}
else
{

cadena[y][x]=var;
cout<
x++;
}
}
cout<
if(errores_lexico==0)
{
cout<<"!!presione cualquier tecla para continuara no se encontaron errores lexicos!!"<

}
else
{
cout<<" se encontraron "<
cout<<"verifique su codigo se encontaron errores el compilador no puede continuar"<
return 0;
}
getch();
system("cls");
int errores_line=0;
//cout<<"*********** ANALISIS SINTACTICO *************"<
cout<<" *Etapa 1 analisar la sintaxis de cada linea "<
cout<<" *Etapa 2 analisar de la estructura del programa "<
cout<<"********************************************************************************"<

cout<<" presione cualquier tecla para continuar"<
getch();
system("cls");
////////analiza linea
// cout<<"*********** ANALISIS SINTACTICO *************"<
cout<<"************ LEE LINEA x LINEA **************"<
int arre_struct[50];
errores_line=0;
int mains=0;
for(int da=0; da
{
int paquete1[50];
int tam=0;
for(int f=0; f
{
if(tokens_linea[f][1]==(da+1))
{
paquete1[tam]=tokens_linea[f][0];
tam++;
int tr=strlen(cadena[f]);
for(int lr=0; lr
{
cout<
}
cout<<" ";
}
}

cout<<" <===== ";

arre_struct[da]=ver_linea(paquete1,tam,da);
if(arre_struct[da]==0)
{
errores_line++;
mains=da+1;
}
cout<

}
if(errores_line==0)
{
cout<<"!!sin errores en las linea!!"<
}
if(errores_line>0)
{
cout<<" !! se encontraron "<
return 0;
}
cout<<" presione cualquier tecla para continuar"<
getch();
system("cls");
cout<
for(int matriz=0; matriz<600;matriz++)
{
cout<<"...espere analizando...no se ha siclado...";
}
cout<
system("cls");
cout<
cout<<"****************ETAPA 2 EVALUAR ESTRUCTURA*****************"<
int estatus=ver_estructura(arre_struct,lin);
if(estatus==0)
return 0;
getch();



for(int r=0; r
{


if(tipo_id[r]==1||tipo_id[r]==2)
{
cout<<" la variable " ;

int as=strlen(identificador[r]);
for(int f=0; f
{
cout<
}
cout<<" es de tipo ";
cout<
cout<
}
}







}
//funcion que renvia
int ver(char cadena[20])
{




//analisza palabras reservadas
int lon=strlen(cadena);
int q=0;
int x, y;
for( x=0; x<11; x++)
{
q=0;
for( y=0; y
{
if(cadena[y]==reservadas[x][y])
{
q++;
}
}
int as=strlen(reservadas[x]);
if(q==as)
{
cout<<" palabra reservada";

if(x==0||x==1||x==2||x==7)
{
cout<<"esta palabra es compatible con c++";

}

return x+1;
}

}

////analiza cadena
int pos=1,d=0;
if(cadena[0]=='"'&&cadena[lon-1]=='"')
{
for( x=1; x
{
for( y=0; y<26;y++)
{
if(alfabeto[y]==cadena[x])
{
d++;
}
}
for( int z=0; z<10;z++)
{
if(digitos[z]==cadena[x])
{
d++;
}
}
}

if(d==lon-2)
{
cout<<" cadena ";
return 20;
}
}



//analiza identificadores
pos=1,d=2;
for( x=0; x
{
d=2;
for( y=0; y<26;y++)
{
if(alfabeto[y]==cadena[x])
{
d=0;
}
}
for( int z=0; z<10;z++)
{
if(digitos[z]==cadena[x])
{
d=1;
}
}
if(d==2)
{
pos=0;
}
else
{
pos=ident[pos][d];
}
}

if(pos==2)
{
cout<<"Identificador ";
for(int gp=0; gp<2; gp++)
{
identificador[nido][gp]=cadena[gp];
}
nido++;



return 12;
}
//analiza si es numero
int jk=0;
for( x=0; x
{
for( y=0; y<10;y++)
{
if(cadena[x]==digitos[y])
{
jk++;
}
}
}

if(jk==lon)
{
cout<<" numero";
return 13;
}
//analiza si es un operador matematico
if(lon==1)
{
for( x=0; x<4; x++)
{

if(opemat[x]==cadena[0])
{
cout<<" opera. mat. ";
return 14;
}

}

//analiza si es una coma

if(cadena[0]==',')
{
cout<<" coma ";
return 15;
}
//analiza si es un igual

if(cadena[0]=='=')
{
cout<<" igual ";
return 16;
}
//analiza si es parentesis de apertura

if(cadena[0]=='(')
{
cout<<" parentesis A ";
return 17;
}
//analiza si es un parentesis de cerradura

if(cadena[0]==')')
{
cout<<" parentesis B ";
return 18;
}
}

//analiza si es un operador logico
int pp=1, dd=2;
for( x=0; x
{
dd=25;
for( y=0; y<4;y++)
{
if(operadores_logicos[y]==cadena[x])
{
dd=y;
}
}
if(dd==25)
{
pp=0;
}
else
{
pp=op_log[pp][dd];
}
}
if(pp==2||pp==3)
{
cout<<" operador logico ";
return 19;

}


cout<<"************************************************** ";

return 0;
}
////***********************************************************
int ver_linea(int linea[50],int tam,int l)
{

if(tam==3)
{
if(linea[0]==12)
if(linea[1]==16)
if(linea[2]==13)
{
cout<<"Es una declaracion de variable tipo interger";
tipo_id[tipo]=1;
tipo++;
return 9;
}
else
if(linea[2]==20)
{
cout<<"Es una declaracion de variable tipo string";
tipo_id[tipo]=2;
tipo++;
return 9;
}
else
if(linea[2]==12)
{
cout<<"Es Asignacion del valor de una variable";
tipo_id[tipo]=0;
tipo++;
tipo++;
return 9;

}


}

int estado=1;
int val_if[5]={1,12,13,19,5};

for(int c=0; c
{
for(int ro=0; ro<5; ro++)
{
if(linea[c]==val_if[ro])
{
estado=begin_if[estado][ro];
}
}
}
if(estado==6)
{
cout<<"la linea "<
tipo_id[tipo]=0;
tipo++;
return 1;

}

//fin del if

estado=1;
int val_endif[2]={1,4};



for(int ca=0; ca
{
for(int ro=0; ro<2; ro++)
{
if(linea[ca]==val_endif[ro])
{
estado=endif[estado][ro];
}
}
}
if(estado==3)
{
cout<<"la linea "<
return 2;
}

//inicio while
estado=1;
int val_while[5]={2,12,13,19,9};

for(int cu=0; cu
{
for(int ro=0; ro<5; ro++)
{
if(linea[cu]==val_while[ro])
{
estado=begin_while[estado][ro];
}
}
}
if(estado==6)
{
cout<<"la linea "<
tipo_id[tipo]=0;
tipo++;
return 3;

}
//fin del while
estado=1;
int val_endwhile[2]={2,4};



for(int ce=0; ce
{
for(int ro=0; ro<2; ro++)
{
if(linea[ce]==val_endwhile[ro])
{
estado=endwhile[estado][ro];
}
}
}
if(estado==3)
{
cout<<"la linea "<
return 4;
}
//inicio function
estado=1;
int val_function[6]={6,12,17,7,15,18};

for(int cd=0; cd
{
for(int ro=0; ro<6; ro++)
{
if(linea[cd]==val_function[ro])
{
estado=begin_function[estado][ro];
}
}
}
if(estado==7)
{
cout<<"la linea "<
tipo_id[tipo]=0;
tipo++;
return 5;

}
//fin de function
estado=1;
int val_endfunction[2]={6,4};



for(int cq=0; cq
{
for(int ro=0; ro<2; ro++)
{
if(linea[cq]==val_endfunction[ro])
{
estado=endwhile[estado][ro];
}
}
}
if(estado==3)
{
cout<<"la linea "<
return 6;
}

//operacion mate
estado=1;
int val_matema[4]={12,16,13,14};



for(int cl=0; cl
{
for(int ro=0; ro<4; ro++)
{
if(linea[cl]==val_matema[ro])
{
estado=mate[estado][ro];
}
}
}
if(estado==4)
{
cout<<"la linea "<
tipo_id[tipo]=0;
tipo++;
return 7;
}

//operacion return
estado=1;
int val_return[3]={12,13,8};



for(int ct=0; ct
{
for(int ro=0; ro<3; ro++)
{
if(linea[ct]==val_return[ro])
{
estado=return1[estado][ro];
}
}
}
if(estado==3)
{
cout<<"la linea "<
return 8;
}



cout<<"la linea "<
return 0;

}

///************************************************
int ver_estructura(int linea[50],int tam)
{
int estado=1;
int val_program[8]={1,2,3,4,5,6,7,8};
int num_if=0;
int num_whiles=0;
int num_function=0;







for(int c=0; c
{
cout<<"empiezo en el estado "<
for(int ro=0; ro<8; ro++)
{
if(linea[c]==val_program[ro])
{
if(estado==5)
{
if(val_program[ro]==2&&num_if>0)
{
estado=2;
}
if(val_program[ro]==4&&num_whiles>0)
{
estado=3;
}
if(val_program[ro]==6&&num_function>0)
{
estado=4;
}

}
estado=estructura_programa[estado][ro];
cout<<" con "<
if(val_program[ro]==1)
{
num_if++;
}
if(val_program[ro]==3)
{
num_whiles++;
}
if(val_program[ro]==5)
{
num_function++;
}
if(val_program[ro]==2)
{
num_if--;
}
if(val_program[ro]==4)
{
num_whiles--;
}
if(val_program[ro]==6)
{
num_function--;
}
}
}
}
if(estado==5&&num_if==0&& num_whiles==0&&num_function==0)
{
cout<>>>>>>>"<
return 1;
}
else
{
cout<<" error en la estructura"<
cout<
if(num_if>0)
{
cout<<"falta cerrar "<
}
if(num_whiles>0)
{
cout<<"falta cerrar "<
}
if(num_function>0)
{
cout<<"falta cerrar "<
}
return 0;
}
}




// ****************** Código En .txt que leo ******************** //

if a >= 1 then
if a >= 1 then
azu = b
end if
end if
while x > 0 do
a = 10 + 1
end while
b = a + 5
s = "hola"
d = 2

No hay comentarios: