jueves, 14 de enero de 2010

Analizador Lexico,Sintactico y Semantico

#include
#include
#include
#include
#include


int funcion_evaluar_cadena(char cadena[20]);
int funcion_eva_line(int envio_digital[10],int tam_digi);

char palabras_reservadas[9][10]=
{

{'i','f'},//token 1
{'w','h','i','l','e'},//token 2
{'p','r','i','n','t'},//token 3
{'s','t','r'},//token4
{'e','l','s','e'},// token 5
{'r','e','t','u','r','n'},// token 6
{'i','n','t'},// token 7
{'b','o','o','l'},// token 8
{'d','e','f'},// token 9
};

int tabla_transiones_identificadores[3][2]=
{
{0, 0},
{2, 0},
{2, 2},

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


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


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

int tabla_transiones_inicio_print[4][3]=
{
{0, 0, 0},
{2, 0, 0},
{0, 3, 3},
{0, 0, 0},


};



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

};




char def[50][20];
int into[50];
int gol=0;
int gil=0;
int cola[10];
char operadores_logicos[4]={'<','>','=','!'};
char operadores_matematicos[4]={'/','*','-','+'};
char abc[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 igual='=';

char digito[10]={'0','1','2','3','4','5','6','7','8','9'};

char cadena[50][20];

int codigo_digital[100];
int num_tokens=0;
int linea_val[30];
void main()
{

cout<<" ANALISIS LEXICO "<
cout<<"palabra____________tipo________________linea"< ifstream archivo("cod.txt", ios::in);
char var;
int x=0,y=0;
int tok=0;
int linea=1;
int linea_q[50];
int tama_digi=0;
int envio_digital[10];
while(!archivo.eof())
{
archivo.get(var);
if(var==' '||var=='\n')
{
x=0;
cout<<" ";
codigo_digital[num_tokens]=funcion_evaluar_cadena(cadena[y]);

cout<<" "< linea_q[y]=linea;
num_tokens++;
if(var=='\n')
{
linea++;
codigo_digital[num_tokens]=50;
num_tokens++;



}


y++;

}
else
{

cadena[y][x]=var;
cout< x++;
}
}
cout< cout<<"Presiona enter para continuar";


cout< getch();
system("cls");
cout<
cout<<" ANALISIS SINTACTICO "< int lin=0;
for(int f=0; f{

if(codigo_digital[f]==50){
cout<<"linea "< linea_val[lin]=funcion_eva_line(envio_digital,tama_digi);
tama_digi=0;
cout< lin++;
}
else
{

envio_digital[tama_digi]=codigo_digital[f];
tama_digi++;

}
}
cout<<" Variables"<





for(int w=0; w{
if(into[w]==1||into[w]==2)
{
cout<<" la variable ";
int rom=strlen(def[w]);
for(int e=0; e {
cout< }
cout<<" El tipo ";
cout< cout< }
}

}



//
int funcion_evaluar_cadena(char cadena[20])
{
int t=strlen(cadena);
int sim=0;
int x, y;




if(cadena[0]=='"'&&cadena[t-1]=='"')
{
cout<<"cadena ";
return 14;
}
if(t==1)
{
char var=cadena[0];
char var1=cadena[0];
char var2=cadena[0];
if(cadena[0]=='=')
{
cout<<"igual ";
return 15;
}

if(cadena[0]=='(')
{
cout<<"parentesis A";
return 30;
}
if(cadena[0]==')')
{
cout<<"parentesis B";
return 31;
}
if(cadena[0]==',')
{
cout<<"coma";
return 32;
}





for( x=0; x<4; x++)
{

if(operadores_matematicos[x]==var)
{
cout<<"operador matematicos ";
return 16;


}

}



}
sim=0;
int nofun=0;

for( x=0; x {
nofun++;
for( y=0; y<10;y++)
{
if(cadena[x]==digito[y])
{

sim++;
y=100;

}
else
nofun++;
}
if(nofun==10)
x=100;

}

if(sim==t)
{
cout<<"numero";
return 17;
}




for( x=0; x<9; x++)
{
sim=0;

for( y=0; y {
if(cadena[y]==palabras_reservadas[x][y])
{
sim++;
}
}
int ta=strlen(palabras_reservadas[x]);

if(sim==ta)
{
cout<<"palabra reservada";
if(x==0||x==1||x==4||x==5||x==6||x==7)
{
cout<<" Compatible con lenguaje c++ ";
}
return x+1;
}

}
int apunta=1,dir=2;

for( x=0; x {
dir=2;

for( y=0; y<26;y++)
{
if(abc[y]==cadena[x])
{
dir=0;
y=30;

}
}
for( int z=0; z<10;z++)
{
if(digito[z]==cadena[x])
{
dir=1;
y=30;

}
}
if(dir==2)
{
apunta=0;
}
else
{
apunta=tabla_transiones_identificadores[apunta][dir];
}
}

if(apunta==2)
{

for(int h=0; h {
def[gil][h]=cadena[h];

}

gil++;





return 18;
}
//
apunta=1,dir=2;

for( x=0; x {
dir=10;;

for( y=0; y<4;y++)
{
if(operadores_logicos[y]==cadena[x])
{

dir=y;

}

}
if(dir==10)
{
apunta=0;
}
else
{

apunta=tabla_transiones_logicos[apunta][dir];
}

}

if(apunta==2||apunta==3)
{
cout<<"operador logico ";
return 19;

}


cout<<"¡no es token! ";

return 0;
}


int funcion_eva_line(int envio_digital[10],int tam_digi)
{


int valores1[4]={1,18,17,19};
int inicia=1;
int err=0;
for(int c=0; c {
for(int g=0; g<4; g++)
{
if(envio_digital[c]==valores1[g])
{
inicia=tabla_transiones_inicio_if[inicia][g];
}

}
}



/*if(tam_digi==2)
{
if(envio_digital[0]==7||envio_digital[0]==8||envio_digital[0]==4)
{
if(envio_digital[1]==18)
{
cout<<"<<<--------------------- Es una declaracion de variable"< return 5;

}
}
}*/
if(tam_digi==2)
{
if(envio_digital[0]==7)
if(envio_digital[1]==18)
{
cout<<"<<<--------------------- Es una variable entera"< into[gol]=2;
gol++;
return 5;
}
}
if(tam_digi==2)
{
if(envio_digital[0]==4)
if(envio_digital[1]==18)
{
cout<<"<<<--------------------- Es una variable de cadena"<
into[gol]=1;
gol++;



return 5;
}
}

if(tam_digi==6)
{
if(envio_digital[0]==9)
{
if(envio_digital[1]==18)
{
if(envio_digital[2]==30)
{
if(envio_digital[3]==7||envio_digital[3]==8||envio_digital[3]==4)
{
if(envio_digital[4]==18)
{
if(envio_digital[5]==31)
{
cout<<"<<<--------------------- Es una funcion"< return 8;

}
}

}

}
}

}
}

if(inicia==5)
{
cout<<"<<<--------------------- Es un inicio de if"< return 1;
}
err=0;
inicia=1;
int valores2[4]={2,17,18,19};
//////////
for(int p=0; p {
for(int g=0; g<4; g++)
{
if(envio_digital[p]==valores2[g])
inicia=tabla_transiones_inicio_while[inicia][g];
else
err++;
}
if(err==4)
{
inicia=0;
}
err=0;
}
if(inicia==5)
{
cout<<"<<<--------------------- Es un inicio de while"< return 2;
}
//////////////////////////
err=0;
inicia=1;
int valores3[3]={3,17,18};
//////////
for(int r=0; r {
for(int g=0; g<3; g++)
{
if(envio_digital[r]==valores3[g])
inicia=tabla_transiones_inicio_print[inicia][g];
else
err++;
}
if(err==3)
{
inicia=0;
}
err=0;
}
if(inicia==3)
{
cout<<"<<<--------------------- Es una sentencia print "< return 3;
}
err=0;
inicia=1;
int valores6[4]={18,15,17,16};
//////////
for(int q=0; q {
for(int g=0; g<4; g++)
{
if(envio_digital[q]==valores6[g])
inicia=tabla_transiones_inicio_mat[inicia][g];
else
err++;
}
if(err==4)
{
inicia=0;
}
err=0;
}
if(inicia==6)
{
cout<<"<<<--------------------- Es una sentencia matematica"< return 6;
}
err=0;
inicia=1;
int valores4[3]={9,17,18};
//////////
for(int w=0; w {
for(int g=0; g<3; g++)
{
if(envio_digital[w]==valores4[g])
inicia=tabla_transiones_inicio_print[inicia][g];
else
err++;
}
if(err==3)
{
inicia=0;
}
err=0;
}
if(inicia==3)
{

cout<<"<<<--------------------- Es un return"< return 4;
}

cout<<"<<<--------------------- No se reconoce";
return 0;

}

No hay comentarios:

Publicar un comentario