jueves, 14 de enero de 2010

Compilador Javascript

Programa Archivo Cpp
#include
#include
#include
#include
#include


int funcion_evaluar_cadena(char cadena[20],int linea);
int funcion_evaluar_linea(int linea[50][2],int lineas,int y);

int funcion_evaluar_id(char cadena[20], int linea);
char palabras_reservadas[12][17]=
{
{'w','h','i','l','e'},{'i','f'},{'v','a','r'},{'e','l','s','e'},{'f','o','r'},{'c','a','s','e'},{'b','r','e','a','k'},{'s','c','r','i','p','t'},{'/','s','c','r','i','p','t'},

};
char tabla_transiones_identificadores[3][2]=
{
{0, 0},
{2, 0},
{2, 2},

};
char 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},
};

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 fin_linea=';';
char flujo_out[2]={'<','<'};
char flujo_in[2]={'>','>'};
char llaves[2] ={'{','}'};
char parentesis[2]={'(',')'};
char digito[10]={'0','1','2','3','4','5','6','7','8','9'};
char comillas={'"'};

char cadena[50][20];
int n_cadena[50][6];
char lista_identificador[20][30];
int linea_identificador[20];
int tipo_identificador[20];
int li=0;
int nop=0;
void main()
{

cout< cout<<" ***ANALIZADOR LEXICO***"< cout< cout<<"---------------------------------------------------------------------------"<
ifstream archivo("progra.txt", ios::in);
char var;
int x=0,y=0;
int tok=0;
int linea=1;
int linea_q[50][2];

while(!archivo.eof())
{
archivo.get(var);
if(var==' '||var=='\n')
{
x=0;
linea_q[y][1]=funcion_evaluar_cadena(cadena[y],linea);
cout<<"\t\tNumero de Linea "< linea_q[y][0]=linea;
if(var=='\n')
linea++;


y++;

}
else
{

cadena[y][x]=var;
cout< x++;
}
}
cout<<"-------------------------------------------------------------------"< cout< cout<<" *** ANALIZADOR SINTACTICO ***"< cout<<"-------------------------------------------------------------------"< cout< cout<//for(int p=0; p// cout<

funcion_evaluar_linea(linea_q,linea,y);
cout<<" Variables "<for(int g=0; g{
if(tipo_identificador[g]>0)
{
cout<<"La variable ";
int d =strlen(lista_identificador[g]);
for(int c=0; c {
cout< }
cout<<" es de tipo ";

if(tipo_identificador[g]==1)
{
cout<<"entero";
}
else
if(tipo_identificador[g]==2)
{
cout<<"string";
}

cout<}

}

}

//-------------------------------------------------------------------------------------------------------------
void azu()
{


ifstream archivo("progra.txt", ios::in);
char var;
int x=0,y=0;
int tok=0;
int linea=1;
char cadena[50][20];
char info_cadena[50];


while(!archivo.eof())
{
archivo.get(var);
if(var==' '||var=='\n')
{
x=0;
funcion_evaluar_id(cadena[y],linea);
cout<<"\t\tNumero de Linea "< info_cadena[y]=linea;
if(var=='\n')
linea++;
y++;
}
else
{
cadena[y][x]=var;
cout< x++;
}
}


}
/////______________________________________________________
int funcion_evaluar_id(char cadena[20], int linea)
{
int apunta=1,dir=2;
int t=strlen(cadena);
int sim=0;
int x, y;

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)
{




cout<<"\t\tEs_Identificador";
for(int q=0; q {
lista_identificador[li][q]=cadena[q];

}
linea_identificador[li]=linea;
li++;

return 21;

}
}
//_______________________________________________________________________________________________________________
int funcion_evaluar_cadena(char cadena[20], int linea)
{
int t=strlen(cadena);
int sim=0;
int x, y;
if(t==1)
{
char var=cadena[0];
char var1=cadena[0];
char var2=cadena[0];
if(cadena[0]==fin_linea)
{
cout<<"\t\tFin de Sentencia";

return 20;
}

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

if(operadores_matematicos[x]==var)
{
cout<<"\t\tOpe. Matematico ";
return 13;


}

}

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

if(llaves[x]==cadena[0])
{

cout<<"\t\tEs una Llave";
return 14+x;


}

}
if('='==cadena[0])
{

cout<<"\t\tes un operador matematico";
return 16;


}

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

if(parentesis[x]==cadena[0])
{

cout<<"\t\tEs un Parentesis ";
return 17+x;


}

}


}

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<<"\t\tEsto es un Numero";
return 19;
}




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

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

if(sim==ta&&t==sim)
{
cout<<"\t\tPalabra_Reservada";
//if(x==0||x==1||x==3||x==4)
//cout<<" *Compatible con 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)
{




cout<<"\t\tEs_Identificador";
for(int c=0; c {
lista_identificador[nop][c]=cadena[c];
}
nop++;

return 21;

}
int igu=0;
if(cadena[0]=='"'&&cadena[t-1]=='"')
{
for(int f=1; f {
for(int z=0; z<26;z++)
{
if(cadena[f]==abc[z])
{
igu++;
}

}
}
if(igu==t-2)
{
cout<<"\t\tIdentificador Cadena"< return 25;
}
}
int azu=0;
for(int w=1; w{
for(int z=0; z<10; z++)
{
if(cadena[w]==digito[z])
{
azu++;
}
}
}
if(azu==t)
{
cout<<"\t\tIdentificador numerico"< return 26;
}





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];
}

}
int st=strlen(cadena);
if(st==1)
{
if(cadena[0]=='<')
{
return 23;
}
if(cadena[0]=='>')
{
return 24;
}


}

if(apunta==2||apunta==3)
{
cout<<"\t\tEs un Operador Logico ";
return 22;

}

cout<<"\tError no es token";

return 0;

}
/////.......................................................
int funcion_evaluar_linea(int linea[50][2],int lineas,int y)
{
int are[15][16];
int tom[15];
int ev_lin[15];
int metric=0;
for(int p=0; p<=lineas; p++)
{int tam=0;
for(int k=0; k if(p==linea[k][0])
{
are[p][tam]=linea[k][1];
tam++;
}
tom[p]=tam;
if(tom[p]==3)
{
if(are[p][0]==23)
if(are[p][1]==8)
if(are[p][2]==24)
{
cout<<"Etiqueta de inicio "< ev_lin[metric]=1;
metric++;
}

if(are[p][0]==23)
if(are[p][1]==9)
if(are[p][2]==24)
{
cout<<"Etiqueta de fin "< ev_lin[metric]=2;
metric++;
}
}
if(tom[p]==4)
{
if(are[p][0]==21)
if(are[p][1]==16)
if(are[p][2]==21)
if(are[p][3]==20)


{
cout<<"Expresion matematica "< ev_lin[metric]=3;
metric++;

}


}
if(tom[p]==6)
{
if(are[p][0]==21)
if(are[p][1]==16)
if(are[p][2]==19)
if(are[p][3]==13)
if(are[p][4]==21)
if(are[p][5]==19)
{
cout<<"Operacion matematica "< ev_lin[metric]=3;
metric++;
// cout<<"

}




if(are[p][0]==2)
if(are[p][1]==17)
if(are[p][2]==21||are[p][2]==19)
if(are[p][3]==22||are[p][3]==23||are[p][3]==24)
if(are[p][4]==21||are[p][4]==19)
if(are[p][5]==18)
{
cout<<"Inicia if"< ev_lin[metric]=4;
metric++;

}
if(are[p][0]==1)
if(are[p][1]==17)
if(are[p][2]==21||are[p][2]==19)
if(are[p][3]==22||are[p][3]==23||are[p][3]==24)
if(are[p][4]==21||are[p][4]==19)
if(are[p][5]==18)
{
cout<<"Inicia while"< ev_lin[metric]=5;
metric++;

}





}
if(tom[p]==5)
{
if(are[p][0]==3)
if(are[p][1]==21)
if(are[p][2]==16)
if(are[p][3]==19)
if(are[p][4]==20)


{
cout<<"Declaracion de variable de tipo entero "< ev_lin[metric]=6;
metric++;

tipo_identificador[li]=1;
li++;



}


}
if(tom[p]==5)
{
if(are[p][0]==3)
if(are[p][1]==21)
if(are[p][2]==16)
if(are[p][3]==25)
if(are[p][4]==20)

{
cout<<"Declaracion de variable de tipo string "< ev_lin[metric]=6;
metric++;
tipo_identificador[li]=2;
li++;



}


}
if(tom[p]==3)
{
if(are[p][0]==3)
if(are[p][1]==21)
if(are[p][2]==20)

{
cout<<"Declaracion de variable indefinida "< ev_lin[metric]=6;
metric++;

}


}


if(tom[p]==16)
{
if(are[p][0]==5)
if(are[p][1]==17)
if(are[p][2]==21)
if(are[p][3]==16)
if(are[p][4]==21||are[p][4]==19)
if(are[p][5]==20)
if(are[p][6]==21||are[p][6]==19)
if(are[p][7]==22||are[p][7]==23||are[p][7]==24)
if(are[p][8]==21||are[p][8]==19)
if(are[p][9]==20)
if(are[p][10]==21)
if(are[p][11]==16)
if(are[p][12]==21||are[p][12]==19)
if(are[p][13]==13)
if(are[p][14]==21||are[p][14]==19)
if(are[p][15]==18)

{
cout<<"inicio de for "< ev_lin[metric]=7;
metric++;

}
}
if(tom[p]==1)
{
if(are[p][0]==14)
{
cout<<"llave de inicio "< ev_lin[metric]=8;
metric++;
}
if(are[p][0]==15)
{
cout<<"llave de fin "< ev_lin[metric]=9;
metric++;
}
if(are[p][0]==4)
{
cout<<"llave de fin "< ev_lin[metric]=10;
metric++;
}

}




}


int eti_ini=0;
int eti_fin=0;
int c_mat=0;
int if_ini=0;
int while_ini=0;
int c_var=0;
int for_ini=0;
int llave_inicio=0;
int llave_fin=0;
int c_else=0;

if(ev_lin[metric-1]==2&&ev_lin[0]==1)
{
for(int w=0; w {
if(ev_lin[w]==1)
{
//etiqueta de inicio
eti_ini++;
}
if(ev_lin[w]==2)
{
//etiqueta de inicio
eti_fin++;
}
if(ev_lin[w]==3)
{
//etiqueta de inicio
c_mat++;
}
if(ev_lin[w]==4)
{
//etiqueta de inicio
if_ini++;
}
if(ev_lin[w]==5)
{
//etiqueta de inicio
while_ini++;
}
if(ev_lin[w]==6)
{
//etiqueta de inicio
c_var++;
}
if(ev_lin[w]==7)
{
//etiqueta de inicio
for_ini++;
}
if(ev_lin[w]==8)
{
//etiqueta de inicio
llave_inicio++;
}
if(ev_lin[w]==9)
{
//etiqueta de inicio
llave_fin++;
}
if(ev_lin[w]==10)
{
//etiqueta de inicio
c_else++;
}
if(llave_inicio {
cout<<"error en las llaves"< }
if(c_else>if_ini)
{
cout<<"error en la estructura if"< }

}

if(llave_inicio>llave_fin||llave_inicio {
cout<<"error en las llaves "<
}

if(c_else>if_ini)
{
cout<<"error en la sentencia if "<
}
}
else
{
cout<<"error rn las etiquetas de inicio y fin de script "<}


return 0;
}


Programa en Javascript

< script >
var x = 15 ;
var y = "hola" ;
var z = 21 ;
for ( x = 10 ; x > 15 ; x = x + 1 )
{
}
if ( y == 21 )
{
}
< /script >

Resultado en Consola







No hay comentarios:

Publicar un comentario