miércoles, 13 de enero de 2010

Analizador Lexico PHP

Gramatica:



Gramática y expresiones:
<> : : = <>
<> : : = <>
<> : : = <>
<> : : = <> <> <> <> <>
<> <>

<> : : = if <> { <> }

<> : : = if <> { <> } else { <> }

<> : : = if <> { <> } elseif <> { <> } else { <> }
<> : : = switch <> { case 1: <> case 2: <>
case 3: <> case n: <> default: <> }

<> : : = while <> { <> }

<> : : = do { <> } while <>

<> : : = for <> <> <> { }
<> : : = <>

<> : : = <>

<> : : = <>

<> : : = <>

<> : : = vacio

<> : : = <> = <>

<> : : = $ <>

<> : : = <>

: : = <> <> <> … <> <> <> <> … <>

<> : : = <> <>

: : = <> <> <> <> <> <> <> <> <> <>

<> : : = < . > < , > < : > < ; > < - > <> < # > < ¿ > …

<> : : = > < = = ! = > = < = <> : : = AND && OR !! XOR !

: : = += - = * = / = . = =

<> : : = ++ --

: : < + > < - > < * > < / >

<> : : = <> <> <> <>

<> : : = <>

<> : : = <> <> <>


<> : : = <> <> <>
<> <> <>

<> : : = <> <> <>
<> : : = function <> ( <> ) { <> }

<> : : = <>

<> : : = <> <>


Analizador Lexico:


public class AnalisisLexico {
int contador;

public String Analizalexphp (String palabra, int lex) {


int matriz[][] = new int [5][35];
// Letter (_) Numero ( ) + * - / ^ { } " " # ! & $ < > = . , : ; ? fin de cad
matriz [0][0] = 1; matriz [0][1] = 1; matriz [0][2] = 1; matriz [0][3] = 1; matriz [0][4] = 1; matriz [0][5] = 1; matriz [0][6] = 1; matriz [0][7] = 1; matriz [0][8] = 1; matriz [0][9] = 1; matriz [0][10] = 1; matriz [0][11] = 1; matriz [0][12] = 1; matriz [0][13] = 1; matriz [0][14] = 1; matriz [0][15] = 1; matriz [0][16] = 1; matriz [0][17] = 1; matriz [0][18] = 1; matriz [0][19] = 1; matriz [0][20] = 1; matriz [0][21] = 1; matriz [0][22] = 1; matriz [0][23] = 1; matriz [0][24] = 1; matriz [0][25] = 1; matriz [0][26] = 3;
matriz [1][0] = 1; matriz [1][1] = 1; matriz [1][2] = 1; matriz [1][3] = 1; matriz [1][4] = 1; matriz [1][5] = 1; matriz [1][6] = 1; matriz [1][7] = 1; matriz [1][8] = 1; matriz [1][9] = 1; matriz [1][10] = 1; matriz [1][11] = 1; matriz [1][12] = 1; matriz [1][13] = 1; matriz [1][14] = 1; matriz [1][15] = 1; matriz [1][16] = 1; matriz [1][17] = 1; matriz [1][18] = 1; matriz [1][19] = 1; matriz [1][20] = 1; matriz [1][21] = 1; matriz [1][22] = 1; matriz [1][23] = 1; matriz [1][24] = 1; matriz [1][25] = 1; matriz [0][26] = 2;
matriz [2][0] = 2; matriz [2][1] = 2; matriz [2][2] = 2; matriz [2][3] = 2; matriz [2][4] = 2; matriz [2][5] = 2; matriz [2][6] = 2; matriz [2][7] = 2; matriz [2][8] = 2; matriz [2][9] = 2; matriz [2][10] = 2; matriz [2][11] = 2; matriz [2][12] = 2; matriz [2][13] = 2; matriz [2][14] = 2; matriz [2][15] = 2; matriz [2][16] = 2; matriz [2][17] = 2; matriz [2][18] = 2; matriz [2][19] = 2; matriz [2][20] = 2; matriz [2][21] = 2; matriz [2][22] = 2; matriz [2][23] = 2; matriz [2][24] = 2; matriz [2][25] = 2; matriz [0][26] = 2;
matriz [3][0] = 3; matriz [3][1] = 3; matriz [3][2] = 3; matriz [3][3] = 3; matriz [3][4] = 3; matriz [3][5] = 3; matriz [3][6] = 3; matriz [3][7] = 3; matriz [3][8] = 3; matriz [3][9] = 3; matriz [3][10] = 3; matriz [3][11] = 3; matriz [3][12] = 3; matriz [3][13] = 3; matriz [3][14] = 3; matriz [3][15] = 3; matriz [3][16] = 3; matriz [3][17] = 3; matriz [3][18] = 3; matriz [3][19] = 3; matriz [3][20] = 3; matriz [3][21] = 3; matriz [3][22] = 3; matriz [3][23] = 3; matriz [3][24] = 3; matriz [3][25] = 3; matriz [0][26] = 3;

String cad = palabra;
String resultado = null;


int posicion = 0;

try{


for ( lex =0 ; lex='a' && cad.charAt(lex) <='z' cad.charAt(lex) >='A' && cad.charAt(lex) <='Z' ) // es el rango para el caracter (letra), en la posicion i { posicion = matriz[posicion][0]; } else if( cad.charAt(lex) =='_' ) { posicion = matriz[posicion][1]; } else if(cad.charAt(lex) >='0' && cad.charAt(lex) <='9' ) { posicion = matriz[posicion][2]; } else if( cad.charAt(lex) =='(' ) { posicion = matriz[posicion][3]; } else if( cad.charAt(lex) ==')' ) { posicion = matriz[posicion][4]; } else if( cad.charAt(lex) =='+' ) { posicion = matriz[posicion][5]; } else if( cad.charAt(lex) =='*' ) { posicion = matriz[posicion][6]; } else if( cad.charAt(lex) =='-' ) { posicion = matriz[posicion][7]; } else if( cad.charAt(lex) =='/' ) { posicion = matriz[posicion][8]; } else if( cad.charAt(lex) =='^' ) { posicion = matriz[posicion][9]; } else if( cad.charAt(lex) =='{' ) { posicion = matriz[posicion][10]; } else if( cad.charAt(lex) =='}' ) { posicion = matriz[posicion][11]; } else if( cad.charAt(lex) =='"' ) { posicion = matriz[posicion][12]; } else if( cad.charAt(lex) =='"' ) { posicion = matriz[posicion][13]; } else if( cad.charAt(lex) =='#' ) { posicion = matriz[posicion][14]; } else if( cad.charAt(lex) =='!' ) { posicion = matriz[posicion][15]; } else if( cad.charAt(lex) =='&' ) { posicion = matriz[posicion][16]; } else if( cad.charAt(lex) =='$' ) { posicion = matriz[posicion][17]; } else if( cad.charAt(lex) =='<' ) { posicion = matriz[posicion][18]; } else if( cad.charAt(lex) =='>' )
{
posicion = matriz[posicion][19];

}
else if( cad.charAt(lex) =='=' )
{
posicion = matriz[posicion][20];

}
else if( cad.charAt(lex) =='.' )
{
posicion = matriz[posicion][21];

}
else if( cad.charAt(lex) ==',' )
{
posicion = matriz[posicion][22];

}
else if( cad.charAt(lex) ==':' )
{
posicion = matriz[posicion][23];

}
else if( cad.charAt(lex) ==';' )
{
posicion = matriz[posicion][24];

}
else if( cad.charAt(lex) =='?' )
{
posicion = matriz[posicion][25];

}

else {
posicion = 3;
break;
}

}
contador = lex - 1;

if( posicion !=1 && posicion != 2 )
{
resultado = "Existe Un Error Lexico";
}
else
{
resultado = "No hay Error Lexico";
}
}catch(ArrayIndexOutOfBoundsException e){}

return resultado;
}

}

Grafico:


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JOptionPane.showMessageDialog(null, jTextArea1.getText());
AnalisisLexico lex= new AnalisisLexico();
jTextField2.setText(lex.Analizalexphp(jTextArea1.getText(),0));
}

"Automata de pila 2"

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())));
}


Automata de pila

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;

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;

pi.clear();
pi.push(E);

int fila = 0, col = 0,x=0;

while(x
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;
}

}


AFD Identificador:


public class autoafd {
int y;
public String Analisis(String palabra, int n){

String nuevacadena=palabra+'%';
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;


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

public int cuenta(){
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()));
}