Primer Automata de pila
Pila:
public class pilaafd
{
{
public String comprueba(String palabra)
{
autoafd app = new autoafd();
String cadena = palabra;
String nuevacadena = null;
String E="E",ep="e",T="T",t="t", F="f", M="+", P="*", K="(", L=")";
String id = null;
Stack pi = new Stack();
String resultado= null;
int tam=cadena.length(),i=0, n=1;
{
autoafd app = new autoafd();
String cadena = palabra;
String nuevacadena = null;
String E="E",ep="e",T="T",t="t", F="f", M="+", P="*", K="(", L=")";
String id = null;
Stack pi = new Stack();
String resultado= null;
int tam=cadena.length(),i=0, n=1;
int mat [][]=new int [12][7];
// TABLA DE TRANSICIONES
mat[1][1]=90; mat[1][2]=90; mat[1][3]=90; mat[1][4]=90; mat[1][5]=90; mat[1][6]=2;
mat[2][1]=3; mat[2][2]=90; mat[2][3]=90; mat[2][4]=90; mat[2][5]=90; mat[2][6]=4;
mat[3][1]=90; mat[3][2]=90; mat[3][3]=90; mat[3][4]=90; mat[3][5]=90; mat[3][6]=5;
mat[4][1]=90; mat[4][2]=6; mat[4][3]=90; mat[4][4]=90; mat[4][5]=90; mat[4][6]=7;
mat[5][1]=90; mat[5][2]=90; mat[5][3]=8; mat[5][4]=90; mat[5][5]=9; mat[5][6]=90;
mat[6][1]=10; mat[6][2]=90; mat[6][3]=90; mat[6][4]=90; mat[6][5]=90; mat[6][6]=90;
mat[7][1]=90; mat[7][2]=11; mat[7][3]=90; mat[7][4]=90; mat[7][5]=90; mat[7][6]=90;
mat[8][1]=90; mat[8][2]=90; mat[8][3]=12; mat[8][4]=90; mat[8][5]=90; mat[8][6]=90;
mat[9][1]=90; mat[9][2]=90; mat[9][3]=90; mat[9][4]=13; mat[9][5]=90; mat[9][6]=90;
mat[10][1]=90; mat[10][2]=90; mat[10][3]=90; mat[10][4]=90; mat[10][5]=14; mat[10][6]=90;
mat[11][1]=90; mat[11][2]=90; mat[11][3]=90; mat[11][4]=90; mat[11][5]=90; mat[11][6]=100;
mat[2][1]=3; mat[2][2]=90; mat[2][3]=90; mat[2][4]=90; mat[2][5]=90; mat[2][6]=4;
mat[3][1]=90; mat[3][2]=90; mat[3][3]=90; mat[3][4]=90; mat[3][5]=90; mat[3][6]=5;
mat[4][1]=90; mat[4][2]=6; mat[4][3]=90; mat[4][4]=90; mat[4][5]=90; mat[4][6]=7;
mat[5][1]=90; mat[5][2]=90; mat[5][3]=8; mat[5][4]=90; mat[5][5]=9; mat[5][6]=90;
mat[6][1]=10; mat[6][2]=90; mat[6][3]=90; mat[6][4]=90; mat[6][5]=90; mat[6][6]=90;
mat[7][1]=90; mat[7][2]=11; mat[7][3]=90; mat[7][4]=90; mat[7][5]=90; mat[7][6]=90;
mat[8][1]=90; mat[8][2]=90; mat[8][3]=12; mat[8][4]=90; mat[8][5]=90; mat[8][6]=90;
mat[9][1]=90; mat[9][2]=90; mat[9][3]=90; mat[9][4]=13; mat[9][5]=90; mat[9][6]=90;
mat[10][1]=90; mat[10][2]=90; mat[10][3]=90; mat[10][4]=90; mat[10][5]=14; mat[10][6]=90;
mat[11][1]=90; mat[11][2]=90; mat[11][3]=90; mat[11][4]=90; mat[11][5]=90; mat[11][6]=100;
pi.clear();
pi.push(E);
pi.push(E);
int fila = 0, col = 0,x=0;
while(x
int fila=1,col=1;
while(i<=tam) { try {
if(pi.empty() == true)
{
fila = 11;
if(nuevacadena.charAt(i)=='+')
col = 1;
if(nuevacadena.charAt(i)=='*')
col = 2;
if(nuevacadena.charAt(i)=='(')
col = 3;
if(nuevacadena.charAt(i)==')')
col = 4;
if(Character.isLetter(nuevacadena.charAt(i)) Character.isDigit(nuevacadena.charAt(i)) nuevacadena.charAt(i)== '_')
col = 5;
if(nuevacadena.charAt(i)=='%')
col = 6;
}
if(pi.peek()==E)
{
fila = 1;
col = 6;
}
if(pi.peek()==ep)
{
fila = 2;
if(nuevacadena.charAt(i)=='+')
col = 1;
else
col = 6;
}
if(pi.peek()==T)
{
fila = 3;
col = 6;
}
if(pi.peek()==t)
{
fila = 4;
if(nuevacadena.charAt(i)=='*')
col = 2;
else
col = 6;
}
if(pi.peek()==F)
{
fila = 5;
if(nuevacadena.charAt(i)=='(')
col = 3;
if(Character.isLetter(nuevacadena.charAt(i)) Character.isDigit(nuevacadena.charAt(i)) nuevacadena.charAt(i)== '_')
col = 5;
}
if(pi.peek() == M)
{
fila = 6;
if(nuevacadena.charAt(i)=='+')
col = 1;
else
col = 6;
}
if(pi.peek() == P)
{
fila = 7;
if(nuevacadena.charAt(i)=='*')
col = 2;
else
col = 6;
}
if(pi.peek()==K)
{
fila = 8;
if(nuevacadena.charAt(i)=='(')
col = 3;
else
col = 6;
}
if(pi.peek()==L)
{
fila = 9;
if(nuevacadena.charAt(i)==')')
col = 4;
else
col = 6;
}
if(pi.peek()==id)
{
fila = 10;
if(nuevacadena.charAt(i)=='+')
col = 1;
if(nuevacadena.charAt(i)=='*')
col = 2;
if(nuevacadena.charAt(i)=='(')
col = 3;
if(nuevacadena.charAt(i)==')')
col = 4;
if(Character.isLetter(nuevacadena.charAt(i)) Character.isDigit(nuevacadena.charAt(i)) nuevacadena.charAt(i)== '_')
col = 5;
if(nuevacadena.charAt(i)=='%')
col = 6;
}
if(mat[fila][col] == 2)
{
pi.pop();
pi.push(ep);
pi.push(T);
}
if(mat[fila][col] == 3)
{
pi.pop();
pi.push(ep);
pi.push(T);
pi.push(M);
}
if(mat[fila][col] == 4)
{
pi.pop();
}
if(mat[fila][col] == 5)
{
pi.pop();
pi.push(t);
pi.push(F);
}
if(mat[fila][col] == 6)
{
pi.pop();
pi.push(t);
pi.push(F);
pi.push(P);
}
if(mat[fila][col] == 7)
{
pi.pop();
}
if(mat[fila][col] == 8)
{
pi.pop();
pi.push(L);
pi.push(E);
pi.push(K);
}
if(mat[fila][col] == 9)
{
pi.pop();
id = app.Analisis(palabra,i);
i = app.cuenta();
pi.push(id);
if(id.charAt(0)=='0')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='1')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='2')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='3')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='4')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='5')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='6')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='7')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='8')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='9')
{
resultado="Palabra no Aceptada";
break;
}
}
if(mat[fila][col] == 10)
{
pi.pop();
i++;
}
if(mat[fila][col] == 11)
{
pi.pop();
i++;
}
if(mat[fila][col] == 12)
{
pi.pop();
i++;
}
if(mat[fila][col] == 13)
{
pi.pop();
i++;
}
if(mat[fila][col] == 14)
{
pi.pop();
i++;
}
x=tam+1;
}
catch(java.util.EmptyStackException e)
{
}
if(mat[fila][col]==100 && pi.empty()==true)
{
resultado="Palabra Aceptada";
break;
}
if(col==0)
{
resultado="Palabra No Aceptada";
break;
}
if(mat[fila][col]==90)
{
resultado="Palabra No Aceptada";
break;
}
}
return resultado;
}
}
{
fila = 11;
if(nuevacadena.charAt(i)=='+')
col = 1;
if(nuevacadena.charAt(i)=='*')
col = 2;
if(nuevacadena.charAt(i)=='(')
col = 3;
if(nuevacadena.charAt(i)==')')
col = 4;
if(Character.isLetter(nuevacadena.charAt(i)) Character.isDigit(nuevacadena.charAt(i)) nuevacadena.charAt(i)== '_')
col = 5;
if(nuevacadena.charAt(i)=='%')
col = 6;
}
if(pi.peek()==E)
{
fila = 1;
col = 6;
}
if(pi.peek()==ep)
{
fila = 2;
if(nuevacadena.charAt(i)=='+')
col = 1;
else
col = 6;
}
if(pi.peek()==T)
{
fila = 3;
col = 6;
}
if(pi.peek()==t)
{
fila = 4;
if(nuevacadena.charAt(i)=='*')
col = 2;
else
col = 6;
}
if(pi.peek()==F)
{
fila = 5;
if(nuevacadena.charAt(i)=='(')
col = 3;
if(Character.isLetter(nuevacadena.charAt(i)) Character.isDigit(nuevacadena.charAt(i)) nuevacadena.charAt(i)== '_')
col = 5;
}
if(pi.peek() == M)
{
fila = 6;
if(nuevacadena.charAt(i)=='+')
col = 1;
else
col = 6;
}
if(pi.peek() == P)
{
fila = 7;
if(nuevacadena.charAt(i)=='*')
col = 2;
else
col = 6;
}
if(pi.peek()==K)
{
fila = 8;
if(nuevacadena.charAt(i)=='(')
col = 3;
else
col = 6;
}
if(pi.peek()==L)
{
fila = 9;
if(nuevacadena.charAt(i)==')')
col = 4;
else
col = 6;
}
if(pi.peek()==id)
{
fila = 10;
if(nuevacadena.charAt(i)=='+')
col = 1;
if(nuevacadena.charAt(i)=='*')
col = 2;
if(nuevacadena.charAt(i)=='(')
col = 3;
if(nuevacadena.charAt(i)==')')
col = 4;
if(Character.isLetter(nuevacadena.charAt(i)) Character.isDigit(nuevacadena.charAt(i)) nuevacadena.charAt(i)== '_')
col = 5;
if(nuevacadena.charAt(i)=='%')
col = 6;
}
if(mat[fila][col] == 2)
{
pi.pop();
pi.push(ep);
pi.push(T);
}
if(mat[fila][col] == 3)
{
pi.pop();
pi.push(ep);
pi.push(T);
pi.push(M);
}
if(mat[fila][col] == 4)
{
pi.pop();
}
if(mat[fila][col] == 5)
{
pi.pop();
pi.push(t);
pi.push(F);
}
if(mat[fila][col] == 6)
{
pi.pop();
pi.push(t);
pi.push(F);
pi.push(P);
}
if(mat[fila][col] == 7)
{
pi.pop();
}
if(mat[fila][col] == 8)
{
pi.pop();
pi.push(L);
pi.push(E);
pi.push(K);
}
if(mat[fila][col] == 9)
{
pi.pop();
id = app.Analisis(palabra,i);
i = app.cuenta();
pi.push(id);
if(id.charAt(0)=='0')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='1')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='2')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='3')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='4')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='5')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='6')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='7')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='8')
{
resultado="Palabra no Aceptada";
break;
}
if(id.charAt(0)=='9')
{
resultado="Palabra no Aceptada";
break;
}
}
if(mat[fila][col] == 10)
{
pi.pop();
i++;
}
if(mat[fila][col] == 11)
{
pi.pop();
i++;
}
if(mat[fila][col] == 12)
{
pi.pop();
i++;
}
if(mat[fila][col] == 13)
{
pi.pop();
i++;
}
if(mat[fila][col] == 14)
{
pi.pop();
i++;
}
x=tam+1;
}
catch(java.util.EmptyStackException e)
{
}
if(mat[fila][col]==100 && pi.empty()==true)
{
resultado="Palabra Aceptada";
break;
}
if(col==0)
{
resultado="Palabra No Aceptada";
break;
}
if(mat[fila][col]==90)
{
resultado="Palabra No Aceptada";
break;
}
}
return resultado;
}
}
AFD Identificador:
public class autoafd {
int y;
public String Analisis(String palabra, int n){
int y;
public String Analisis(String palabra, int n){
String nuevacadena=palabra+'%';
String resultado = null,cadena = "";
int arr1[][] = new int[4][5];
String resultado = null,cadena = "";
int arr1[][] = new int[4][5];
arr1[1][1]=2; arr1[1][2]=2; arr1[1][3]=3; arr1[1][4]=90;
arr1[2][1]=2; arr1[2][2]=2; arr1[2][3]=3; arr1[2][4]=100;
arr1[3][1]=2; arr1[3][2]=2; arr1[3][3]=3; arr1[3][4]=90;
arr1[2][1]=2; arr1[2][2]=2; arr1[2][3]=3; arr1[2][4]=100;
arr1[3][1]=2; arr1[3][2]=2; arr1[3][3]=3; arr1[3][4]=90;
int fila=1,col=1;
try{
do{
if(Character.isLetter(nuevacadena.charAt(n)))
{
col = 1;
fila = arr1[fila][col];
cadena=cadena+nuevacadena.charAt(n);
}
if(nuevacadena.charAt(n)=='_')
{
col = 2;
fila = arr1[fila][col];
cadena=cadena+nuevacadena.charAt(n);
}
if(Character.isDigit(nuevacadena.charAt(n)))
{
col = 3;
fila = arr1[fila][col];
cadena=cadena+nuevacadena.charAt(n);
}
if(nuevacadena.charAt(n)=='%')
{
col = 4;
fila = arr1[fila][col];
}
n++;
}while(Character.isDigit(nuevacadena.charAt(n))==trueCharacter.isLetter(nuevacadena.charAt(n))==truenuevacadena.charAt(n)=='_');
y=n-1;
}catch(ArrayIndexOutOfBoundsException e){}
resultado = cadena;
return resultado;
}
if(Character.isLetter(nuevacadena.charAt(n)))
{
col = 1;
fila = arr1[fila][col];
cadena=cadena+nuevacadena.charAt(n);
}
if(nuevacadena.charAt(n)=='_')
{
col = 2;
fila = arr1[fila][col];
cadena=cadena+nuevacadena.charAt(n);
}
if(Character.isDigit(nuevacadena.charAt(n)))
{
col = 3;
fila = arr1[fila][col];
cadena=cadena+nuevacadena.charAt(n);
}
if(nuevacadena.charAt(n)=='%')
{
col = 4;
fila = arr1[fila][col];
}
n++;
}while(Character.isDigit(nuevacadena.charAt(n))==trueCharacter.isLetter(nuevacadena.charAt(n))==truenuevacadena.charAt(n)=='_');
y=n-1;
}catch(ArrayIndexOutOfBoundsException e){}
resultado = cadena;
return resultado;
}
public int cuenta(){
int i = 0;
i=y;
return i;
}
int i = 0;
i=y;
return i;
}
}
Grafico:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null, jTextField1.getText());
pilaafd pi= new pilaafd();
jTextField2.setText(pi.comprueba(jTextField1.getText()));
}
// TODO add your handling code here:
JOptionPane.showMessageDialog(null, jTextField1.getText());
pilaafd pi= new pilaafd();
jTextField2.setText(pi.comprueba(jTextField1.getText()));
}
No hay comentarios:
Publicar un comentario