#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"<
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<<" "<
num_tokens++;
if(var=='\n')
{
linea++;
codigo_digital[num_tokens]=50;
num_tokens++;
}
y++;
}
else
{
cadena[y][x]=var;
cout<
}
}
cout<
cout<
system("cls");
cout<
cout<<" ANALISIS SINTACTICO "<
for(int f=0; f
if(codigo_digital[f]==50){
cout<<"linea "<
tama_digi=0;
cout<
}
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<
}
}
//
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"<
}
}
}*/
if(tam_digi==2)
{
if(envio_digital[0]==7)
if(envio_digital[1]==18)
{
cout<<"<<<--------------------- Es una variable entera"<
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"<
}
}
}
}
}
}
}
if(inicia==5)
{
cout<<"<<<--------------------- Es un inicio de if"<
}
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"<
}
//////////////////////////
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 "<
}
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"<
}
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"<
}
cout<<"<<<--------------------- No se reconoce";
return 0;
}
No hay comentarios:
Publicar un comentario