jueves, 14 de enero de 2010

Analizador Lexico, Sintactico y Semantico

<<<<<<  Programa de Analizador Lexico, Sintactico y Semántico >>>>>>>>


#include
#include
#include
#include
#include

int funcion_pal_reserv(char cadena[30]);
int funcion_digi(char cadena[30]);
int funcion_identificador(char cadena[30]);
int funcion_cadena(char cadena[30]);
int funcion_simbolos(char cadena[30]);
int funcion_logicos(char cadena[30]);
int funcion_matematicos(char cadena[30]);
char pal_reserv[6][10]=
{
{'i','f'},
{'w','h','i','l','e'},
{'p','r','i','n','t'},
{'<','s','t','d','i','n','>'},
{'f','o','r'},
{'e','l','s','e'}
};

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

char Operadores_logicos[5][3]=
{

{'<'},
{'>'},
{'=','>'},
{'<','='},
{'=','='},



};

char abc[27]={'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 vara[50][20];
int we=0;
int load[50];
int fu=0;

int s_linea=0,fun=0;
int num[20][20];
int es[20];
char leer;
char cadena[100][30];
int p=0;
void main()
{
int x=0;
cout<<" Analizador Lexico"<
cout<<"Token               Numero"<<

ifstream codigo("perl.txt");
fun=0;
    while(!codigo.eof())
    {
        codigo.get(leer);

if(leer=='\n'||leer==' ')
{


int token=funcion_pal_reserv(cadena[p]);
if(token==0)
token=funcion_digi( cadena[p]);
if(token==0)
token=funcion_identificador(cadena[p]);
if(token==0)
token=funcion_cadena(cadena[p]);
if(token==0)
token=funcion_simbolos(cadena[p]);
if(token==0)
token=funcion_logicos(cadena[p]);
if(token==0)
token=funcion_matematicos(cadena[p]);

cout<<"         "<<

cout<

if(leer=='\n')
{

es[s_linea]=fun+1;
num[s_linea][fun]=token;

fun=0;


s_linea++;

p++;
x=0;

}

if(leer==' ')
{ num[s_linea][fun]=token;
fun++;
p++;
x=0;


}
num[s_linea][fun]=token;



        

}
else
{
cout<
cadena[p][x]=leer;
x++;
}

}
cout<<"Analizador Sintactico"<
int eva=0;
int anterior=0;
int conteo1=0;
int conteo2=0;
cout<
for(int d=0; d
{
eva=0;
cout<<"Linea "<<<" ";
if(es[d]==3)
{
if(num[d][0]==3)
if(num[d][1]==8||num[d][1]==9)
if(num[d][0]==3)

{
cout<<"Esta linea es una sentencia print "<
eva++;
}




}
if(es[d]==6)
{
if(num[d][0]==8)
if(num[d][1]==11)
if(num[d][2]==7||num[d][2]==8)
if(num[d][3]==13)
if(num[d][4]==7||num[d][4]==8)
if(num[d][5]==10)
{
cout<<"Esta linea es una operacion matematica"<
eva++;
}
}
if(es[d]==4)
{
if(num[d][0]==8)
if(num[d][1]==11)
if(num[d][2]==7)
if(num[d][3]==10)
{
cout<<"Esta linea es una asigancion de valor a variable tipo entero"<
load[fu]=1;
fu++;
eva++;
}
if(num[d][0]==8)
if(num[d][1]==11)
if(num[d][2]==9)
if(num[d][3]==10)
{
cout<<"Esta linea es una asigancion de valor a variable tipo string"<
load[fu]=2;
fu++;
eva++;
              

}
            if(num[d][0]==8)
if(num[d][1]==11)  /// tipo entero
if(num[d][2]==8)
if(num[d][3]==10)
{
cout<<"Esta variable se esta convirtiendo al tipo de dato de la variable asignada [entero] "<
eva++;

}

if(num[d][0]==8)
if(num[d][1]==11)
if(num[d][2]==7||num[d][2]==8)
if(num[d][3]==13)
if(num[d][4]==8||num[d][2]==0)
if(num[d][5]==10)
{
cout<<"Error de asignacion, verifique la asignacion  "<
eva++;
}
}



if(es[d]==6)
{
if(num[d][0]==1)
if(num[d][1]==14)
if(num[d][2]==8||num[d][2]==7)
if(num[d][3]==12)
if(num[d][4]==8||num[d][4]==7)
if(num[d][5]==15)
{
cout<<"Esta linea es un if"<
eva++;
anterior=d;
}

if(num[d][0]==2)
if(num[d][1]==14)
if(num[d][2]==8||num[d][2]==7)
if(num[d][3]==12)
if(num[d][4]==8||num[d][4]==7)
if(num[d][5]==15)
{
cout<<"Esta linea es un while"<
eva++;
anterior=d;
}

}
// cout<

if(num[d][0]==5)
if(num[d][1]==14)
if(num[d][2]==8)
if(num[d][3]==11)
if(num[d][4]==7)
if(num[d][5]==10)
if(num[d][6]==8)
if(num[d][7]==12)
if(num[d][8]==7)
            if(num[d][9]==10)
if(num[d][10]==8)
           if(num[d][11]==18)
if(num[d][12]==15)
{
cout<<"esta linea es un for"<
eva++;
anterior=d;
}

if(es[d]==1)
{
if(num[d][0]==16)
{
cout<<"esta linea es una llave de inicio de proceso"<
eva++;
conteo1++;
if(anterior==d-1)
{
}
else
{
cout<<"error en esta llave de apertura (la llaves de apertura ban despues de un inicio de if,while o for)"<
}
}
if(num[d][0]==17)
{
cout<<"esta linea es una llave de fin "<
eva++;
conteo2++;
if(conteo2>conteo1)
{
cout<<"error en la llaves de cerradura "<
}
}



}

if(eva==0)
{
cout<<"Esta linea no es aceptada, verifique su sintaxis"<
}
cout<


}
if(conteo2==conteo1)
{
}
else
{
if(conteo1>conteo2)
{
cout<<"faltan llaves de cerradura"<
}
if(conteo2>conteo1)
{
          cout<<"se encontraron llaves de cerraduras ilegales"<
}
}

/*for(int da=0;da
{
if(load[da]==1||load[da]==2)
{
cout<<"La variable ";
int fg=strlen(vara[da]);
for(int f=0;f
{
cout<
}
cout<<" es de  tipo ";
cout<
cout<
}

}*/



}

int funcion_pal_reserv(char cadena[30])
{


   int e=0;
   int w=strlen(cadena);

for(int m=0; m<6;m++)
{
int d=strlen(pal_reserv[m]);

if(d==w)
{


e=0;
for(int q=0; q
{
if(pal_reserv[m][q]==cadena[q])
{
e++;
}

}
if(w==e)
{
return m+1;
}
}

}





return 0;
}

int funcion_digi(char cadena[30])
{
int m=0;
int t=strlen(cadena);
for(int g=0; g
{
for(int k=0; k<10; k++)
{
if(cadena[g]==digi[k])
m++;

}
}

if(m==t)
{

return 7;
}
return 0;

}
///
int funcion_identificador(char cadena[30])
{
int m=0;
int tam=strlen(cadena);

    int i=0;
int b=0;

if(cadena[0]=='$')
  b++;




for(int x=0; x<25; x++)
{
if(cadena[1]==abc[x])
i++;

}

if(i>0&&b==1)
{

for(int y=1; y
{
for(int z=0; z<10; z++)
{
if(cadena[y]==digi[z])
m++;

}
for(int a=0; a<25; a++)
{
if(cadena[y]==abc[a])
m++;

}
}

if(m==tam-1)
{
for(int rt=0;rt
{
vara[we][rt]=cadena[rt];
}
we++;



return 8;
}
}

return 0;



}
///
int funcion_cadena(char cadena[30])
{
int m=0;
int tam=strlen(cadena);

    int i=0;
int b=0;

if(cadena[0]=='"'&&cadena[tam-1]=='"')
  b++;






if(b==1)
{

for(int y=1; y
{
for(int z=0; z<10; z++)
{
if(cadena[y]==digi[z])
m++;

}
for(int a=0; a<25; a++)
{
if(cadena[y]==abc[a])
m++;

}
}

if(m==tam-2)
{

return 9;
}
}
return 0;



}

////
int funcion_simbolos(char cadena[30])
{
int tam=strlen(cadena);

if(tam==1&&cadena[0]==';')
{

return 10;
}
if(tam==1&&cadena[0]=='=')
{

return 11;
}
if(tam==1&&cadena[0]=='(')
{

return 14;
}
if(tam==1&&cadena[0]==')')
{

return 15;
}
if(tam==1&&cadena[0]=='{')
{

return 16;
}
if(tam==1&&cadena[0]=='}')
{

return 17;
}
if(tam==2&&cadena[0]=='+'&&cadena[1]=='+')
{

return 18;
}
if(tam==2&&cadena[0]=='-'&&cadena[1]=='-')
{

return 18;
}



return 0;
}
////
int funcion_logicos(char cadena[30])
{
int tam=strlen(cadena);
if(tam==2&&cadena[0]=='='&&cadena[1]=='=')
{

return 12;
}
if(tam==1&&cadena[0]=='<')
{

return 12;
}
if(tam==1&&cadena[0]=='>')
{

return 12;
}
if(tam==2&&cadena[0]=='='&&cadena[1]=='>')
{

return 12;
}
if(tam==2&&cadena[0]=='<'&&cadena[1]=='=')
{

return 12;
}

return 0;

}
///
int funcion_matematicos(char cadena[30])
{
   int tam=strlen(cadena);
if(tam==1&&cadena[0]=='+')
{

return 13;
}
if(tam==1&&cadena[0]=='-')
{

return 13;
}
if(tam==1&&cadena[0]=='*')
{

return 13;
}
if(tam==1&&cadena[0]=='/')
{

return 13;
}
return 0;
}

<<<<<<<   Código que Los Analizadores Detectan para Verificar    >>>>>>>>



<<<<<<     Imágenes del Resultado   >>>>....







3 comentarios:

Blogger EMSAD 25 EL RINCON "MC" ha dicho...

en que lenguaje esta

23 de mayo de 2015, 20:12  
Blogger Miguel Pacheco ha dicho...

Disculpa, qué librerías usas?

4 de febrero de 2018, 18:44  
Blogger Unknown ha dicho...

amigo me gusta tu codigo pero que librerias usaste?

13 de mayo de 2018, 9:45  

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio