miércoles, 13 de enero de 2010

Analizador Lexicoooooo

Gramatica de D





este es el automata, la expresion regular y la tabla de transiciones





codigo del analizador


package pack;

import java.io.*;

/**
*
* @author PrInCeSsItA
*/
public class analizadord {
/*public static void main(String args[]) throws IOException
{
String pal;
try
{

BufferedReader p=new BufferedReader(new FileReader("intp.txt"));
while((pal=p.readLine())!=null){
st(pal);
}

}
catch(FileNotFoundException e)
{
System.out.println("Error de archivo");
}
}*/
public String st(String pal)
{
String nuca=pal;//+'$';
int val=nuca.length();
String valor=null;

int tt [][]=new int [5][28];
//[a-z] / { } * n(0-9) [ ] ( ) +
tt[0][0]=1; tt[0][1]=1; tt[0][2]=1; tt[0][3]=1; tt[0][4]=1; tt[0][5]=2; tt[0][6]=2; tt[0][7]=2; tt[0][8]=2; tt[0][9]=2; tt[0][10]=2;
tt[1][0]=1; tt[1][1]=1; tt[1][2]=1; tt[1][3]=1; tt[0][4]=1; tt[1][5]=1; tt[1][6]=1; tt[1][7]=1; tt[1][8]=1; tt[1][9]=1; tt[1][10]=1;
tt[2][0]=2; tt[2][1]=2; tt[2][2]=2; tt[2][3]=2; tt[0][4]=2; tt[2][5]=2; tt[2][6]=2; tt[2][7]=2; tt[2][8]=2; tt[2][9]=2; tt[2][10]=2;

// - = ~ _ ? " : . ; <
tt[0][11]=2; tt[0][12]=2; tt[0][13]=2; tt[0][14]=2; tt[0][15]=2; tt[0][16]=2; tt[0][17]=2; tt[0][18]=2; tt[0][19]=2; tt[0][20]=2;
tt[1][11]=1; tt[1][12]=1; tt[1][13]=1; tt[1][14]=1; tt[1][15]=1; tt[1][16]=1; tt[1][17]=1; tt[1][18]=1; tt[1][19]=1; tt[1][20]=1;
tt[2][11]=2; tt[2][12]=2; tt[2][13]=2; tt[2][14]=2; tt[2][15]=2; tt[2][16]=2; tt[2][17]=2; tt[2][18]=2; tt[2][19]=2; tt[2][20]=2;

// > , ^ & | # fc[$]
tt[0][21]=2; tt[0][22]=2; tt[0][23]=2; tt[0][24]=2; tt[0][25]=2; tt[0][26]=2; tt[0][27]=2;
tt[1][21]=1; tt[1][22]=1; tt[1][23]=1; tt[1][24]=1; tt[1][25]=1; tt[1][26]=1; tt[1][27]=1;
tt[2][21]=2; tt[2][22]=2; tt[2][23]=2; tt[2][24]=2; tt[2][25]=2; tt[2][26]=2; tt[2][27]=2;
/*Hola mundo*/
int est=0,col=0;
try
{
for(int a=0; a {
if (nuca.charAt(a) == ' ' || nuca.charAt(a) == '\n') continue;
if( nuca.charAt(a) >='a' && nuca.charAt(a) <='z' || nuca.charAt(a) >='A' && nuca.charAt(a) <='Z' )
{
col=0;
est=tt[est][col];
}
else if(nuca.charAt(a)=='/')
{
col=1;
est=tt[est][col];
}
else if(nuca.charAt(a)=='{')
{
col=2;
est=tt[est][col];
}
else if(nuca.charAt(a)=='}')
{
col=3;
est=tt[est][col];
}
else if(nuca.charAt(a)=='*')
{
col=4;
est=tt[est][col];
}
else if(nuca.charAt(a) >='0' && nuca.charAt(a) <='9' )
{
col=5;
est=tt[est][col];
}
else if(nuca.charAt(a)=='[')
{
col=6;
est=tt[est][col];
}
else if(nuca.charAt(a)==']')
{
col=7;
est=tt[est][col];
}
else if(nuca.charAt(a)=='(')
{
col=8;
est=tt[est][col];
}
else if(nuca.charAt(a)==')')
{
col=9;
est=tt[est][col];
}

else if(nuca.charAt(a)=='+')
{
col=10;
est=tt[est][col];
}
else if(nuca.charAt(a)=='-')
{
col=11;
est=tt[est][col];
}

else if(nuca.charAt(a)=='=')
{
col=12;
est=tt[est][col];
}

else if(nuca.charAt(a)=='~')
{
col=13;
est=tt[est][col];
}
else if(nuca.charAt(a)=='_')
{
col=14;
est=tt[est][col];
}
else if(nuca.charAt(a)=='?')
{
col=15;
est=tt[est][col];
}
else if(nuca.charAt(a)=='"')
{
col=16;
est=tt[est][col];
}

else if(nuca.charAt(a)==':')
{
col=17;
est=tt[est][col];
}
else if(nuca.charAt(a)=='.')
{
col=18;
est=tt[est][col];
}
else if(nuca.charAt(a)==';')
{
col=19;
est=tt[est][col];
}
else if(nuca.charAt(a)=='<')
{
col=20;
est=tt[est][col];
}
else if(nuca.charAt(a)=='>')
{
col=21;
est=tt[est][col];
}
else if(nuca.charAt(a)==',')
{
col=22;
est=tt[est][col];
}
else if(nuca.charAt(a)=='^')
{
col=23;
est=tt[est][col];
}
else if(nuca.charAt(a)=='&')
{
col=24;
est=tt[est][col];
}
else if(nuca.charAt(a)=='|')
{
col=25;
est=tt[est][col];
}
else if(nuca.charAt(a)=='#')
{
col=26;
est=tt[est][col];
}
else {

est=2;

}
if( est != 1 )
{System.out.println("Palabra no aceptada");
valor = "No es palabra valida";
}
else
{System.out.println("Palabra Valida");
valor = "Palabra Aceptada";
}
/*if(nuca.charAt(a)=='$')
{
nuca=pal;
col=27;

if(tt[est][col]==200)
{
//System.out.print(nuca +"\t Palabra valida\n");
valor="Palabra valida";
}
if(tt[est][col]==100)
{
//System.out.print(nuca +"\t Palabra valida\n");
valor="Palabra invalida";
}*/




}
}catch (ArrayIndexOutOfBoundsException exc){}
return valor;
}


}


Applet "Codigo del boton"

analizadord an = new analizadord();
//jTextField1.setText(an.st(jTextArea1.getText()));
jTextField1.setText(an.st(jTextArea1.getText()));

Examen

esta es la gramatica del examen

E -> TE'
E' -> +TE'|-TE'|e
T -> FT'
T' -> *FT'|/FT'|e
Z -> ^F|e
F -> PZ
P -> -P|M
M -> (E)|id|c



codigo del afd


import java.io.*;

public class Afd {
int z;
String r;
public static void validador(String palabra)
{
Pila app = new Pila();
String caden = palabra, cadena = null;
int tam = caden.length();
int l = 0;
//char cad = 0;

while(l%tam)%= el signo mayor que
{
if(Character.isDigit(caden.charAt(l))||Character.isLetter(caden.charAt(l))||caden.charAt(l)=='_'||caden.charAt(l)=='+'||caden.charAt(l)=='*'||caden.charAt(l)=='('||caden.charAt(l)==')'||caden.charAt(l)=='/'||caden.charAt(l)=='^'||caden.charAt(l)=='-')
cadena = caden;
else
{
cadena ="";
break;
}
l++;
}//fin while
app.pila(cadena);
}//fin validador

public String constante(String palabra, int n)
{
String cad = "",res="";
int matriz[][] = new int[4][5];

matriz[1][1] = 2; matriz[1][2] = 2; matriz[1][3] = 3; matriz[1][4] = 90;
matriz[2][1] = 2; matriz[2][2] = 2; matriz[2][3] = 3; matriz[2][4] = 100;
matriz[3][1] = 2; matriz[3][2] = 2; matriz[3][3] = 3; matriz[3][4] = 90;

int fila = 1, col = 1;
String cadena = palabra;
if(Character.isDigit(cadena.charAt(n)))
{
col = 3;
fila = matriz[fila][col];
cad = cad+cadena.charAt(n);
}
try
{
do
{
if(Character.isDigit(cadena.charAt(n)))
{
col = 3;
fila = matriz[fila][col];
cad = cad+cadena.charAt(n);
}

n++;
}while((Character.isDigit(cadena.charAt(n))==true));
z = n-1;
}catch(java.util.EmptyStackException e){}
res = cad;
return res;

}
public String analizador(String palabra, int n)
{
String cad = "";
String cadena = palabra;
int x = n;
String res = null;

int matriz[][] = new int[4][5];

matriz[1][1] = 2; matriz[1][2] = 2; matriz[1][3] = 3; matriz[1][4] = 90;
matriz[2][1] = 2; matriz[2][2] = 2; matriz[2][3] = 3; matriz[2][4] = 100;
matriz[3][1] = 2; matriz[3][2] = 2; matriz[3][3] = 3; matriz[3][4] = 90;

int fila = 1, col = 1;

try
{
do
{
if(Character.isLetter(cadena.charAt(n)))
{
col = 1;
fila = matriz[fila][col];
cad = cad+cadena.charAt(n);
}
if(Character.isDigit(cadena.charAt(n)))
{
if(x != n)
{
col = 3;
fila = matriz[fila][col];
cad = cad+cadena.charAt(n);
}
else
{
cad=null;
break;
}
}
if(cadena.charAt(n) == '_')
{
col = 2;
fila = matriz[fila][col];
cad = cad+cadena.charAt(n);
}
n++;
}while((Character.isDigit(cadena.charAt(n))==true)||Character.isLetter(cadena.charAt(n))==true||cadena.charAt(n)=='_');
z = n-1;
}
catch(ArrayIndexOutOfBoundsException e)
{
}
res = cad;
return res;
}//fin analizador

public int contador(){
int i = 0;
i=z;
return i;
}//fin contador

}//fin clase



codigo de la pila


import java.util.Stack;


public class Pila {

public String pila(String palabra)
{
String cadena = null, cad = "";
Afd epp = new Afd();
String E = "E", T = "T", F = "F", Z = "Z", P = "P", M = "M", Ex = "Ex", Tx = "Tx", s = "+", r = "-", m = "*", d = "/", p = "(", q = "q", c = null, x = "^";
String id = null, res = null;
Stack pila = new Stack();
int i = 0, tam, h = 0;

if(palabra.length() != 0)
{
cadena = palabra+'#';
tam = cadena.length();
}
else
tam = 0;
int matriz [][] = new int [19][11];
// + - * / ^ ( ) id c æ
/*E*/matriz [1][1] = 90; matriz [1][2] = 90; matriz [1][3] = 90; matriz [1][4] = 90; matriz [1][5] = 90; matriz [1][6] = 90; matriz [1][7] = 90; matriz [1][8] = 90; matriz [1][9] = 90; matriz [1][10] = 2;
/*Ex*/matriz [2][1] = 3; matriz [2][2] = 4; matriz [2][3] = 90; matriz [2][4] = 90; matriz [2][5] = 90; matriz [2][6] = 90; matriz [2][7] = 90; matriz [2][8] = 90; matriz [2][9] = 90; matriz [2][10] = 5;
/*T*/matriz [3][1] = 90; matriz [3][2] = 90; matriz [3][3] = 90; matriz [3][4] = 90; matriz [3][5] = 90; matriz [3][6] = 90; matriz [3][7] = 90; matriz [3][8] = 90; matriz [3][9] = 90; matriz [3][10] = 6;
/*Tx*/matriz [4][1] = 90; matriz [4][2] = 90; matriz [4][3] = 7; matriz [4][4] = 8; matriz [4][5] = 90; matriz [4][6] = 90; matriz [4][7] = 90; matriz [4][8] = 90; matriz [4][9] = 90; matriz [4][10] = 9;
/*Z*/matriz [5][1] = 90; matriz [5][2] = 90; matriz [5][3] = 90; matriz [5][4] = 90; matriz [5][5] = 11; matriz [5][6] = 90; matriz [5][7] = 90; matriz [5][8] = 90; matriz [5][9] = 90; matriz [5][10] = 12;
/*F*/matriz [6][1] = 90; matriz [6][2] = 90; matriz [6][3] = 90; matriz [6][4] = 90; matriz [6][5] = 90; matriz [6][6] = 90; matriz [6][7] = 90; matriz [6][8] = 90; matriz [6][9] = 90; matriz [6][10] = 10;
/*P*/matriz [7][1] = 90; matriz [7][2] = 13; matriz [7][3] = 90; matriz [7][4] = 90; matriz [7][5] = 90; matriz [7][6] = 90; matriz [7][7] = 90; matriz [7][8] = 90; matriz [7][9] = 90; matriz [7][10] = 14;
/*M*/matriz [8][1] = 90; matriz [8][2] = 90; matriz [8][3] = 90; matriz [8][4] = 90; matriz [8][5] = 90; matriz [8][6] = 15; matriz [8][7] = 90; matriz [8][8] = 16; matriz [8][9] = 17; matriz [8][10] = 90;
/*(*/matriz [9][1] = 90; matriz [9][2] = 90; matriz [9][3] = 90; matriz [9][4] = 90; matriz [9][5] = 90; matriz [9][6] = 18; matriz [9][7] = 90; matriz [9][8] = 90; matriz [9][9] = 90; matriz [9][10] = 90;
/*)*/matriz [10][1] = 90; matriz [10][2] = 90; matriz [10][3] = 90; matriz [10][4] = 90; matriz [10][5] = 90; matriz [10][6] = 90; matriz [10][7] = 19; matriz [10][8] = 90; matriz [10][9] = 90; matriz [10][10] = 90;
/*+*/matriz [11][1] = 20; matriz [11][2] = 90; matriz [11][3] = 90; matriz [11][4] = 90; matriz [11][5] = 90; matriz [11][6] = 90; matriz [11][7] = 90; matriz [11][8] = 90; matriz [11][9] = 90; matriz [11][10] = 90;
/*-*/matriz [12][1] = 90; matriz [12][2] = 21; matriz [12][3] = 90; matriz [12][4] = 90; matriz [12][5] = 90; matriz [12][6] = 90; matriz [12][7] = 90; matriz [12][8] = 90; matriz [12][9] = 90; matriz [12][10] = 90;
/***/matriz [13][1] = 90; matriz [13][2] = 90; matriz [13][3] = 22; matriz [13][4] = 90; matriz [13][5] = 90; matriz [13][6] = 90; matriz [13][7] = 90; matriz [13][8] = 90; matriz [13][9] = 90; matriz [13][10] = 90;
/*/*/matriz [14][1] = 90; matriz [14][2] = 90; matriz [14][3] = 90; matriz [14][4] = 23; matriz [14][5] = 90; matriz [14][6] = 90; matriz [14][7] = 90; matriz [14][8] = 90; matriz [14][9] = 90; matriz [14][10] = 90;
/*^*/matriz [15][1] = 90; matriz [15][2] = 90; matriz [15][3] = 90; matriz [15][4] = 90; matriz [15][5] = 24; matriz [15][6] = 90; matriz [15][7] = 90; matriz [15][8] = 90; matriz [15][9] = 90; matriz [15][10] = 90;
/*id*/matriz [16][1] = 90; matriz [16][2] = 90; matriz [16][3] = 90; matriz [16][4] = 90; matriz [16][5] = 90; matriz [16][6] = 90; matriz [16][7] = 90; matriz [16][8] = 25; matriz [16][9] = 90; matriz [16][10] = 90;
/*c*/matriz [17][1] = 90; matriz [17][2] = 90; matriz [17][3] = 90; matriz [17][4] = 90; matriz [17][5] = 90; matriz [17][6] = 90; matriz [17][7] = 90; matriz [17][8] = 90; matriz [17][9] = 26; matriz [17][10] = 90;
/*æ*/matriz [18][1] = 90; matriz [18][2] = 90; matriz [18][3] = 90; matriz [18][4] = 90; matriz [18][5] = 90; matriz [18][6] = 90; matriz [18][7] = 90; matriz [18][8] = 90; matriz [18][9] = 90; matriz [18][10] = 100;

pila.clear();
pila.push(E);

int fila = 0, col = 0;

if(cadena != null)
{
while(i <= tam)
{
try
{
if(pila.empty() == true)
{
fila = 18;
if(cadena.charAt(i)=='+')
col = 1;
if(cadena.charAt(i)=='-')
col = 2;
if(cadena.charAt(i)=='*')
col = 3;
if(cadena.charAt(i)=='/')
col = 4;
if(cadena.charAt(i)=='^')
col = 5;
if(cadena.charAt(i)=='(')
col = 6;
if(cadena.charAt(i)==')')
col = 7;
if(Character.isLetter(cadena.charAt(i)) || Character.isDigit(cadena.charAt(i)) || cadena.charAt(i)=='_')
col = 8;
if(Character.isDigit(cadena.charAt(i))&&i==0)
col = 9;
if(cadena.charAt(i)=='#')
col = 10;
}// fin pila.empty()
if(pila.peek()==E)
{
fila = 1;
col = 10;
}//fin pila.peek==E
if(pila.peek()==Ex)
{
fila = 2;
if(cadena.charAt(i)=='+')
col = 1;
else
if(cadena.charAt(i)=='-')
col = 2;
else
col = 10;
}//fin pila.peek==Ex
if(pila.peek()==T)
{
fila = 3;
col = 10;
}//fin pila.peek==T
if(pila.peek()==Tx)
{
fila = 4;
if(cadena.charAt(i)=='*')
col = 3;
else
if(cadena.charAt(i)=='/')
col = 4;
else
col = 10;
}//fin pila.peek==Tx
if(pila.peek()==Z)
{
fila = 5;
if(cadena.charAt(i)=='^')
col=5;
else
col=10;
}//fin pila.peek==Z
if(pila.peek()==F)
{
fila = 6;
col = 10;
}//fin pila.peek==F
if(pila.peek()==P)
{
fila = 7;
if(cadena.charAt(i)=='-')
col = 2;
else
col = 10;
}//fin pila.peek==P
if(pila.peek()==M)
{
fila = 8;
if(cadena.charAt(i)=='(')
col = 6;
else
if(Character.isLetter(cadena.charAt(i)) || Character.isDigit(cadena.charAt(i)) || cadena.charAt(i)=='_')
col = 8;
if(Character.isDigit(cadena.charAt(i)))
col = 9;
}//fin pila.peek==M
if(pila.peek()==p)
{
fila = 9;
if(cadena.charAt(i)=='(')
col = 6;
else
col = 10;
}//fin pila.peek==p (
if(pila.peek()==q)
{
fila = 10;
if(cadena.charAt(i)==')')
col = 7;
else
col = 10;
}//fin pila.peek==q )
if(pila.peek()==s)
{
fila = 11;
if(cadena.charAt(i)=='+')
col = 1;
else
col = 10;
}//fin pila.peek==s +
if(pila.peek()==r)
{
fila = 12;
if(cadena.charAt(i)=='-')
col = 2;
else
col = 10;
}//fin pila.peek==q )
if(pila.peek()==m)
{
fila = 13;
if(cadena.charAt(i)=='*')
col = 3;
else
col = 10;
}//fin pila.peek==m *
if(pila.peek()==d)
{
fila = 14;
if(cadena.charAt(i)=='/')
col = 4;
else
col = 10;
}//fin pila.peek==d /
if(pila.peek()==x)
{
fila = 15;
if(cadena.charAt(i)=='^')
col = 5;
else
col = 10;
}//fin pila.peek==x ^
if(pila.peek()==id)
{
fila = 16;
if(cadena.charAt(i)=='+')
col = 1;
if(cadena.charAt(i)=='-')
col = 2;
if(cadena.charAt(i)=='*')
col = 3;
if(cadena.charAt(i)=='/')
col = 4;
if(cadena.charAt(i)=='^')
col = 5;
if(cadena.charAt(i)=='(')
col = 6;
if(cadena.charAt(i)==')')
col = 7;
if(Character.isLetter(cadena.charAt(i)) || Character.isDigit(cadena.charAt(i)) || cadena.charAt(i)=='_')
col = 8;
if(Character.isDigit(cadena.charAt(i))&&i==0)
col = 9;
if(cadena.charAt(i)=='#')
col = 10;
}//fin pila.peek==id
if(pila.peek()==c)
{
fila = 17;
if(Character.isDigit(cadena.charAt(i)))
col = 9;
else
col = 10;
}//fin pila.peek==c

if(matriz[fila][col] == 2)
{
pila.pop();
pila.push(Ex);
pila.push(T);
}//fin matriz == 2
if(matriz[fila][col] == 3)
{
pila.pop();
pila.push(Ex);
pila.push(T);
pila.push(s);
}//fin matriz == 3
if(matriz[fila][col] == 4)
{
pila.pop();
pila.push(Ex);
pila.push(T);
pila.push(r);
}//fin matriz == 4
if(matriz[fila][col] == 5)
{
pila.pop();
}//fin matriz == 5
if(matriz[fila][col] == 6)
{
pila.pop();
pila.push(Tx);
pila.push(F);
}//fin matriz == 6
if(matriz[fila][col] == 7)
{
pila.pop();
pila.push(Tx);
pila.push(F);
pila.push(m);
}//fin matriz == 7
if(matriz[fila][col] == 8)
{
pila.pop();
pila.push(Tx);
pila.push(F);
pila.push(d);
}//fin matriz == 8
if(matriz[fila][col] == 9)
{
pila.pop();
}//fin matriz == 9
if(matriz[fila][col] == 10)
{
pila.pop();
pila.push(Z);
pila.push(P);
}//fin matriz == 10;
if(matriz[fila][col] == 11)
{
pila.pop();
pila.push(F);
pila.push(x);
}//fin matriz == 11;
if(matriz[fila][col] == 12)
{
pila.pop();
}//fin matriz == 12
if(matriz[fila][col] == 13)
{
pila.pop();
pila.push(P);
pila.push(r);
}//fin matriz == 13
if(matriz[fila][col] == 14)
{
pila.pop();
pila.push(M);
}//fin matriz == 14
if(matriz[fila][col] == 15)
{
pila.pop();
pila.push(q);
pila.push(E);
pila.push(p);
}//fin matriz == 15
if(matriz[fila][col] == 16)
{
pila.pop();
id = epp.analizador(cadena,i);
i = epp.contador();
if(id==null)
{
col = 0;
break;
}
else
pila.push(id);
}//fin matriz == 16
if(matriz[fila][col] == 17)
{
pila.pop();
c = epp.constante(cadena,i);
i = epp.contador();
pila.push(c);
}//fin matriz == 17
if(matriz[fila][col] == 18)
{
pila.pop();
i++;
}//fin matriz == 18
if(matriz[fila][col] == 19)
{
pila.pop();
i++;
}//fin matriz == 19
if(matriz[fila][col] == 20)
{
pila.pop();
i++;
}//fin matriz == 20
if(matriz[fila][col] == 21)
{
pila.pop();
i++;
}//fin matriz == 21
if(matriz[fila][col] == 22)
{
pila.pop();
i++;
}//fin matriz == 22
if(matriz[fila][col] == 23)
{
pila.pop();
i++;
}//fin matriz == 23
if(matriz[fila][col] == 24)
{
pila.pop();
i++;
}//fin matriz == 24
if(matriz[fila][col] == 25)
{
pila.pop();
i++;
}//fin matriz == 25
if(matriz[fila][col] == 26)
{
pila.pop();
i++;
}//fin matriz == 26
while(h%tam-1)% es igual al signo mayor que
{
cad = cad+cadena.charAt(h);
h++;
}//fin while r % tam-1 %=signo mayor que
}//fin try
catch(java.util.EmptyStackException e){}
finally
{
if(matriz[fila][col]==100 && pila.empty()==true)
{
System.out.println(cad+"\t\tCadena Aceptada");
res = "Cadena aceptada";
break;
}
if(col == 0)
{
System.out.println(cad+"\t\tCadena No Aceptada");
res = "Cadena No aceptada";
break;
}
if(matriz[fila][col] == 90)
{
System.out.println(cad+"\t\tCadena No Aceptada");
res = "Cadena No aceptada";
break;
}
}//fin finally
}//fin while(i%=tam)%=signo mayor que
}//fin if
else
System.out.println(palabra+"\t\tLa Cadena contiene elementos ajenos al alfabeto");

return res;

}//fin Pila


}//fin clase

jueves, 22 de octubre de 2009

Automata de Examen =]

Instruccion:
Lenguaje sobre {0,1} en el que las palabras no vacias empiezen o terminen con 0.

Diagrama:


Tabla de Transiciones


Lo procedemos hacer como el anterior en el java class agregamos el siguiente codigo:

public class cod {
/**
*
* @author Gus
*/
public String st(String pal)
{
String nuca=pal+'&';
String resul=null;
int val=nuca.length();

int tt [][]=new int [4][4];
//[0] [1] fc[&]
tt[0][0]=2; tt[0][1]=1; tt[0][2]=100;
tt[1][0]=3; tt[1][1]=1; tt[1][2]=100;
tt[2][0]=2; tt[2][1]=2; tt[2][2]=200;
tt[3][0]=2; tt[3][1]=1; tt[3][2]=200;
int est=0,col=0;
try
{
for(int a=0; a*val; a++) //* signo menor que
{
if((nuca.charAt(a)=='0'))
{
col=0;
est=tt[est][col];
}
if((nuca.charAt(a))=='1')
{
col=1;
est=tt[est][col];
}


if(nuca.charAt(a)=='&')
{
nuca=pal;
col=2;
if(tt[est][col]==200)
{

resul="Palabra Valida";
}
else

resul="Palabra Invalida";
}
}
}
catch (ArrayIndexOutOfBoundsException exc){}
return resul;

}


}

y al boton del applet le agregamos el siguiente codigo:

JOptionPane.showMessageDialog(null,jTextField1.getText());
cod co = new cod();
jTextField2.setText(co.st(jTextField1.getText()));

Resultado



Segundo Automata (Tarea) ñ_ñ

Empezamos por

ER(-|l)(l|n|-)*

Lo que quiere decir el lenguaje regular es que el automata tiene que inicar con guion o letra y porteriormente con letra, numero o guion las veces que se desee.

Diagrama


Tabla de Tansiciones:



Este codigo el maestro lo pidio que lo hicieramos con un applet

Primer paso. El proyecto es igual como los que hemos hecho
segundo paso. Le damos clic derecho al paquete new y si no encontramos la opcion de JApplet Form, tenemos que darle en other, swing GUI Forms, JApplet Form, finish.

Tercer paso. Lo que hacemos aqui en el applet es que empezamos a arrastrar 2 label, 2 cajas de texto y un boton



Cuarto paso. Una vez creado la ventana del applet lo que procedemos hacer es agregar un java class en el cual va ir el siguiente codigo:

package autpak;

/**
*
* @author EsMy PrInCeSs
*/
public class automatiux {
public String pt(String pal)
{
String nuca=pal+'&';
String valor=null;
int val=nuca.length();

int tt [][]=new int [3][4];
//[a-z] [0-9] - fc[&]
tt[0][0]=1; tt[0][1]=2; tt[0][2]=1; tt[0][3]=100;
tt[1][0]=1; tt[1][1]=1; tt[1][2]=1; tt[1][3]=200;
tt[2][0]=2; tt[2][1]=2; tt[2][2]=2; tt[2][3]=100;
int est=0,col=0;
try
{
for(int a=0; a*val; a++) *= al signo menor que
{
if(Character.isLetter(nuca.charAt(a)))
{
col=0;
est=tt[est][col];
}
if(Character.isDigit(nuca.charAt(a)))
{
col=1;
est=tt[est][col];
}
if(nuca.charAt(a)=='-')
{
col=2;
est=tt[est][col];
}

if(nuca.charAt(a)=='&')
{
nuca=pal;
col=3;
if(tt[est][col]==200)
{

valor="Palabra Valida";
}
else

valor="Palabra Invalida";
}
}
}catch (ArrayIndexOutOfBoundsException exc){}
return valor;
}
}


Quinto paso. Lo que hacemos en la ventana del applet es programar el boton, le damos doble clic al boton y le ponemos el siguiente codigo:

JOptionPane.showMessageDialog(null,jTextField1.getText());
automatiux au = new automatiux();
jTextField2.setText(au.pt(jTextField1.getText()));

a pero eso si lo que nos debemos de serciorar es que tus jTextField sean los del numero que correspondan.




Primer Automata ñ_ñ

Holaaaa este es un trabajo que nos dejaron para la materia de Teoria de Computacion y aqui esta el codigo del primer automata.



Primero que nada abrimos el NetBeans en este caso en lo personal yo utilize el NetBeans IDE 6.5.1 .



Creamos un nuevo proyecto con el nombre que ustedes gusten y le deshabilitan las opciones de create main class y la de set as main project, le asignamos el nombre que nosotros querramos y le damos finish.



posteriormente lo que hacemos es en el pauqte que tenemos del proyecto le damos new y en la opcion de java package.



despies de hacer el paquete le damos clic derecho, new java class.



y este es el codigo:


package automat;
mport java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
*
* @author Gus
*/
public class lenguaje_1 {
public static void main(String args[]) throws IOException
{
String cad;


try
{

BufferedReader entrada=new BufferedReader(new FileReader("lenguaje.txt"));
while((cad=entrada.readLine())!=null){
read(cad);
}

}
catch(FileNotFoundException e)
{
System.out.println("No se encuentra el archivo");
}
}
public static void read(String pa)
{
String nuca=pa+'&';
int lar=nuca.length();

int tt [][]=new int [7][5];
//[a-z] [0-9] + * FC(&)
tt[0][0]=1; tt[0][1]=1; tt[0][2]=3; tt[0][3]=3; tt[0][4]=90;
tt[1][0]=4; tt[1][1]=5; tt[1][2]=2; tt[1][3]=2; tt[1][4]=100;
tt[2][0]=1; tt[2][1]=1; tt[2][2]=6; tt[2][3]=6; tt[2][4]=90;
tt[3][0]=3; tt[3][1]=3; tt[3][2]=3; tt[3][3]=3; tt[3][4]=90;
tt[4][0]=4; tt[4][1]=4; tt[4][2]=4; tt[4][3]=4; tt[4][4]=90;
tt[5][0]=5; tt[5][1]=5; tt[5][2]=5; tt[5][3]=5; tt[5][4]=90;
tt[6][0]=6; tt[6][1]=6; tt[6][2]=6; tt[6][3]=6; tt[6][4]=90;

int est=0,col=0;
try
{
for(int a=0;a*lar;a++)el *significa menor que
{
if(Character.isLetter(nuca.charAt(a)))
{
col=0;
est=tt[est][col];
}
if(Character.isDigit(nuca.charAt(a)))
{
col=1;
est=tt[est][col];
}
if(nuca.charAt(a)=='+')
{
col=2;
est=tt[est][col];
}
if(nuca.charAt(a)=='*')
{
col=3;
est=tt[est][col];
}
if(nuca.charAt(a)=='&')
{
nuca=pa;
col=4;
if(tt[est][col]==100)
{
System.out.print(nuca+" Palabra Valida");
}
else
System.out.print(nuca +" Palabra Invalida");
}
}
}catch (ArrayIndexOutOfBoundsException exc){}
}

}

sábado, 26 de septiembre de 2009

TUTORIAL DE CÓMO HACER Y AGREGAR UN APPLET EN UNA PAGINA WEB

Un applet es un componente de una aplicación que se ejecuta en el contexto de otro programa en otras palabras , por ejemplo un navegador web. El applet debe ejecutarse en un contenedor, que lo proporciona un programa anfitrión, mediante un plugin.

¿Cómo hacemos un applet?

· Primero que el applet que desarrollamos lo hicimos con el IDE NetBeans
· Le damos clic en file
· New project
· Java
· Java application(le damos next)
· Le ponemos el nombre que nosotros querramos en este caso nosotros le pusimos applet
· Abajo aparecen dos opciones con palomitas le quitamos la que dice create main class
· Y le damos finish
· Damos clic en la carpeta de source packages.
· Después donde dice default package le damos clic derecho y seleccionamos la opción de new
· Y seleccionamos la opción de java class.
· En class name le ponemos el nnombre de holamundo y procedemos a darle finish.
· Procedemos a borrarle todo lo que hay y le pegamos este código:

import java.awt.Graphics;
import java.applet.Applet;
public class holamundo extends Applet {
public void paint( Graphics g ) {
g.drawString( "Holaaaa Mundoooo",25,25 ) ;
}
}
·

  • Y le damos en la opción de run que aparece en la parte de arriva y le damos donde dice run main project, o también con la tecla de mayúscula mas f6.
    · Ya que lo hayamos ejecutado nos vamos a la carpeta donde tenemos aguardado el proyecto.
    · En este caso la carpeta que creamos se llama applet
    · Despues del damos a la carpeta de build
    · Carpeta de calsses
    · Y copiamos el archivo que de llama holamundo.class y lo pegamos en la carpeta en la que vamos a a guardar el archivo donde vamos hacer la pagina web.


    Para crear la pagina web abrimos un bloc de notas y dentro de el ponemos el siguiente codigo:



  • Esto es lo que aparece en nustra pagina web




domingo, 30 de agosto de 2009

Complejidad de los algoritmos

QUE ES LA COMPLEJIDAD DE LOS ALGORITMOS COMPUTACIONALES

La teoría de la complejidad computacional es la rama de la teoría de la computación que estudia, de manera teórica, los recursos requeridos durante el cómputo de un algoritmo para resolver un problema. Los recursos comúnmente estudiados son el tiempo (mediante una aproximación al número y tipo de pasos de ejecución de un algoritmo para resolver un problema) y el espacio (mediante una aproximación a la cantidad de memoria utilizada para resolver un problema).


DIFERERNTES TIPOS DE COMPLEJIDAD

La complejidad temporal de un problema es el número de pasos que toma resolver una instancia de un problema, a partir del tamaño de la entrada utilizando el algoritmo más eficiente a disposición. Intuitivamente, si se toma una instancia con entrada de longitud n que puede resolverse en n² pasos, se dice que ese problema tiene una complejidad en tiempo de n². Por supuesto, el número exacto de pasos depende de la máquina en la que se implementa, del lenguaje utilizado y de otros factores. Para no tener que hablar del costo exacto de un cálculo se utiliza la notación O. Cuando un problema tiene costo en tiempo O(n²) en una configuración de computador y lenguaje dado, este costo será el mismo en todos los computadores, de manera que esta notación generaliza la noción de coste independientemente del equipo utilizado.
Los problemas de decisión se clasifican en conjuntos de complejidad comparable llamados clases de complejidad.
La clase de complejidad P es el conjunto de los problemas de decisión que pueden ser resueltos en una máquina determinista en tiempo polinómico, lo que corresponde intuitivamente a problemas que pueden ser resueltos aún en el peor de sus casos.
La clase de complejidad NP es el conjunto de los problemas de decisión que pueden ser resueltos por una máquina no determinista en tiempo polinómico. Esta clase contiene muchos problemas que se desean resolver en la práctica, incluyendo el problema de satisfacibilidad booleana y el problema del viajante, un camino Hamiltoniano para recorrer todos los vértices una sola vez. Todos los problemas de esta clase tienen la propiedad de que su solución puede ser verificada efectivamente.


¿COMO SE MIDE LA COMPLEJIDAD?

Un algoritmo será mas eficiente comparado con otro, siempre que consuma menos recursos, como el tiempo y espacio de memoria necesarios para ejecutarlo.
La eficiencia de un algoritmo puede ser cuantificada con las siguientes medidas de complejidad:

Complejidad Temporal o Tiempo de ejecución: Tiempo de cómputo necesario para ejecutar algún programa.
Complejidad Espacial: Memoria que utiliza un programa para su ejecución, La eficiencia en memoria de un algoritmo indica la cantidad de espacio requerido para ejecutar el algoritmo; es decir, el espacio en memoria que ocupan todas las variables propias al algoritmo. Para calcular la memoria estática de un algoritmo se suma la memoria que ocupan las variables declaradas en el algoritmo. Para el caso de la memoria dinámica, el cálculo no es tan simple ya que, este depende de cada ejecución del algoritmo.
Este análisis se basa en las Complejidades Temporales, con este fin, para cada problema determinaremos una medida N, que llamaremos tamaño de la entrada o número de datos a procesar por el programa, intentaremos hallar respuestas en función de dicha N.
El concepto exacto que cuantifica N dependerá de la naturaleza del problema, si hablamos de un array se puede ver a N como el rango del array, para una matriz, el número de elementos que la componen; para un grafo, podría ser el número de nodos o arcos que lo arman, no se puede establecer una regla para N, pues cada problema acarrea su propia lógica y complejidad.

Tiempo de Ejecución

El tiempo de Ejecución de un programa se mide en función de N, lo que designaremos como T(N).
Esta función se puede calcular físicamente ejecutando el programa acompañados de un reloj, o calcularse directamente sobre el código, contando las instrucciones a ser ejecutadas y multiplicando por el tiempo requerido por cada instrucción.

Bibliografía

http://www.monografias.com/trabajos27/complejidad-algoritmica/complejidad-algoritmica.shtml#complej
http://es.wikipedia.org/wiki/Complejidad_computacional
http://www.slideshare.net/joemmanuel/complejidad-computacional