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