Automata de Pila Examen
Gramatica:
---> + -
---> * /
---> ^
---> -
---> () identificador constante
Pila:
public class pilaafd2 {
public String pila(String palabra)
{
String cadena = null, cad = "";
afdd epp = new afdd();
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;
Stack pila = new Stack();
int i = 0, tam, h = 0;
String resultado= null;
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; } if(pila.peek()==E) { fila = 1; col = 10; } if(pila.peek()==Ex) { fila = 2; if(cadena.charAt(i)=='+') col = 1; else if(cadena.charAt(i)=='-') col = 2; else col = 10; } if(pila.peek()==T) { fila = 3; col = 10; } if(pila.peek()==Tx) { fila = 4; if(cadena.charAt(i)=='*') col = 3; else if(cadena.charAt(i)=='/') col = 4; else col = 10; } if(pila.peek()==Z) { fila = 5; if(cadena.charAt(i)=='^') col=5; else col=10; } if(pila.peek()==F) { fila = 6; col = 10; } if(pila.peek()==P) { fila = 7; if(cadena.charAt(i)=='-') col = 2; else col = 10; } 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; } if(pila.peek()==p) { fila = 9; if(cadena.charAt(i)=='(') col = 6; else col = 10; } if(pila.peek()==q) { fila = 10; if(cadena.charAt(i)==')') col = 7; else col = 10; } if(pila.peek()==s) { fila = 11; if(cadena.charAt(i)=='+') col = 1; else col = 10; } if(pila.peek()==r) { fila = 12; if(cadena.charAt(i)=='-') col = 2; else col = 10; } if(pila.peek()==m) { fila = 13; if(cadena.charAt(i)=='*') col = 3; else col = 10; } if(pila.peek()==d) { fila = 14; if(cadena.charAt(i)=='/') col = 4; else col = 10; } if(pila.peek()==x) { fila = 15; if(cadena.charAt(i)=='^') col = 5; else col = 10; } 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; } if(pila.peek()==c) { fila = 17; if(Character.isDigit(cadena.charAt(i))) col = 9; else col = 10; }
if(matriz[fila][col] == 2)
{
pila.pop();
pila.push(Ex);
pila.push(T);
}
if(matriz[fila][col] == 3)
{
pila.pop();
pila.push(Ex);
pila.push(T);
pila.push(s);
}
if(matriz[fila][col] == 4)
{
pila.pop();
pila.push(Ex);
pila.push(T);
pila.push(r);
}
if(matriz[fila][col] == 5)
{
pila.pop();
}
if(matriz[fila][col] == 6)
{
pila.pop();
pila.push(Tx);
pila.push(F);
}
if(matriz[fila][col] == 7)
{
pila.pop();
pila.push(Tx);
pila.push(F);
pila.push(m);
}
if(matriz[fila][col] == 8)
{
pila.pop();
pila.push(Tx);
pila.push(F);
pila.push(d);
}
if(matriz[fila][col] == 9)
{
pila.pop();
}
if(matriz[fila][col] == 10)
{
pila.pop();
pila.push(Z);
pila.push(P);
}
if(matriz[fila][col] == 11)
{
pila.pop();
pila.push(F);
pila.push(x);
}
if(matriz[fila][col] == 12)
{
pila.pop();
}
if(matriz[fila][col] == 13)
{
pila.pop();
pila.push(P);
pila.push(r);
}
if(matriz[fila][col] == 14)
{
pila.pop();
pila.push(M);
}
if(matriz[fila][col] == 15)
{
pila.pop();
pila.push(q);
pila.push(E);
pila.push(p);
}
if(matriz[fila][col] == 16)
{
pila.pop();
id = epp.analiza(cadena,i);
i = epp.cuenta();
if(id==null)
{
col = 0;
break;
}
else
pila.push(id);
}
if(matriz[fila][col] == 17)
{
pila.pop();
c = epp.constante(cadena,i);
i = epp.cuenta();
pila.push(c);
}
if(matriz[fila][col] == 18)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 19)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 20)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 21)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 22)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 23)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 24)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 25)
{
pila.pop();
i++;
}
if(matriz[fila][col] == 26)
{
pila.pop();
i++;
}
while(h
}
}
AFD Identificador
public class afdd {
int z;
String r;
public String validador(String palabra)
{
autopilaafd app = new autopilaafd();
String caden = palabra, cadena = null;
int tam = caden.length();
int l = 0;
//char cad = 0;
while(l
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 analiza(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))==truecadena.charAt(n)=='_');
z = n-1;
}
catch(ArrayIndexOutOfBoundsException e)
{
}
res = cad;
return res;
}//fin analizador
public int cuenta(){
int i = 0;
i=z;
return i;
}
}
Grafico
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null, jTextField1.getText());
pilaafd2 pp = new pilaafd2();
afdd pi= new afdd();
jTextField2.setText(pp.pila(pi.validador(jTextField1.getText())));
}
