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


lunes, 19 de octubre de 2009

Examen!



El conjunto de las palabras en {a, b} tales que toda a est´a precedida por alguna
b, como por ejemplo “"”, “b”, “bba”, “babaa”, etc.


Este programa acepta palabras que contengan solo a y b en su lenguaje, con la unica condicion es que por cada a que coloquemos siempre debe de haber una b:





Palabras aceptadas: b, ba, bab, baba, bababa, bbabbabb etc.




No aceptadas: a, ab, abb, ababaa, abbba, etc.




Con el siguiente automata finito:







Y la Tabla de Transiciones:


Estado a b FC


1 2 3 A

2 2 2 E

3 4 3 A

4 2 3 A





public class Lexico {
public String comprueba(String palabra)
{
String nuevacadena=palabra+ '%';
int tam=nuevacadena.length();
String resultado=null;
int mat [][]=new int [5][3];

// TABLA DE TRANSICIONES

// A B FC
mat[0][0]=2; mat[0][1]=3; mat[0][2]=90;
mat[1][0]=2; mat[1][1]=2; mat[1][2]=90;
mat[2][0]=4; mat[2][1]=3; mat[2][2]=100;
mat[3][0]=2; mat[3][1]=3; mat[3][2]=100;


//comienza el ciclo, donde compara cada una de las letras de la palabra.
int reng=1, colu=0;
try
{
for(int i=0;i {
reng=reng-1;



if(nuevacadena.charAt(i)=='a')
{
colu=0;
reng=mat[reng][colu];

}

if(nuevacadena.charAt(i)=='b')
{
colu=1;
reng=mat[reng][colu];

}


if(nuevacadena.charAt(i)=='%') //Marca el fin de cadena
{
nuevacadena=palabra;
colu=2;
if(mat[reng][colu]==100)
{
resultado= "Cadena Valida";
}
else
resultado= "Cadena Invalida";

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

}


Programación del botón:


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, jTextField1.getText());
Lexico app= new Lexico();
jTextField2.setText(app.comprueba(jTextField1.getText()));
}


Tarea

Hacer el atomata finito y programa de la siguiente expresion regular:

ER (_ letra) (letra numero _)*
Ademas debe aceptar palabras reservadas como el for, while do, break.




package Javaapplet2;

import javax.swing.JOptionPane;

/**
*
* @author Carlos Alfredo
*/
public class Lexico2 {
public String comprueba(String palabra)
{
String nuevacadena=palabra+ '%';
int tam=nuevacadena.length();
String resultado=null;

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

// TABLA DE TRANSICIONES

// l N - FC
mat[1][0]=2; mat[1][1]=4; mat[1][2]=2; mat[1][3]=90;
mat[2][0]=3; mat[2][1]=3; mat[2][2]=3; mat[2][3]=100;
mat[3][0]=3; mat[3][1]=3; mat[3][2]=3; mat[3][3]=100;
mat[4][0]=4; mat[4][1]=4; mat[4][2]=4; mat[4][3]=90;


//comienza el ciclo, donde compara cada una de las letras de la palabra.
int x=0,y=0,z;

for(int i=0;i<1;i++) z="i;" z="z+1;" z="z+1;" x="1;" z="i;" z="z+1;" x="2;" z="i;" z="z+1;" z="z+1;" z="z+1;" z="z+1;" x="3;" k="k+1;}" z="i;" z="z+1;" z="z+1;" z="z+1;" z="z+1;" x="4;" ren="1," col="0;" y="0;" reng="1,colu=" i="0;i {

if(Character.isLetter(nuevacadena.charAt(i)))
{
colu=0;
reng=mat[reng][colu];
}
if(Character.isDigit(nuevacadena.charAt(i)))
{
colu=1;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='-')
{
colu=2;
reng=mat[reng][colu];
}

if(nuevacadena.charAt(i)=='%') //Marca el fin de cadena
{
nuevacadena=palabra;
colu=3;
if(mat[reng][colu]==100)
{
resultado= "Cadena Valida";
}
else
resultado= "Cadena Invalida";

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

}

Creacion del applet :

Programacion del boton:


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, jTextField1.getText());
Lexico2 app= new Lexico2();
jTextField2.setText(app.comprueba(jTextField1.getText()));
}





miércoles, 14 de octubre de 2009

Programa automata

Bueno aqui les dejo el codigo de un atomata, este solo lee palabras comenzadas con letras separadas por signos como el * y el +.


/*
* To change this template, choose Tools Templates
* and open the template in the editor.
*/

package automata;
import java.io.*;

/*
* @author Carlos Alfredo
*/

public class automata
{
public static void main(String args[]) throws IOException
{
String cadena;
String cadena2;

try
{

BufferedReader n=new BufferedReader(new FileReader("Palabra.txt")); //Aqui lee el archivo donde se almacena las palabras
while((cadena=n.readLine())!=null){
//cadena=n.readLine();
comprueba(cadena);
}

}
catch(FileNotFoundException e)
{
System.out.println("No se pudo leer el archivo");
}
}

public static void comprueba(String palabra)
{
String nuevacadena=palabra+ '%';
int tam=nuevacadena.length();

int mat [][]=new int [8][5];

// TABLA DE TRANSICIONES

// L N + * FC
mat[1][0]=2; mat[1][1]=2; mat[1][2]=4; mat[1][3]=4; mat[1][4]=90;
mat[2][0]=5; mat[2][1]=6; mat[2][2]=3; mat[2][3]=3; mat[2][4]=100;
mat[3][0]=2; mat[3][1]=2; mat[3][2]=7; mat[3][3]=7; mat[3][4]=90;
mat[4][0]=4; mat[4][1]=4; mat[4][2]=4; mat[4][3]=4; mat[4][4]=90;
mat[5][0]=5; mat[5][1]=5; mat[5][2]=5; mat[5][3]=5; mat[5][4]=90;
mat[6][0]=6; mat[6][1]=6; mat[6][2]=6; mat[6][3]=6; mat[6][4]=90;
mat[7][0]=7; mat[7][1]=7; mat[7][2]=7; mat[7][3]=7; mat[7][4]=90;

//comienza el ciclo, donde compara cada una de las letras de la palabra.
int reng=1,colu=0;
try
{
for(int i=0;i {
if(Character.isLetter(nuevacadena.charAt(i)))
{
colu=0;
reng=mat[reng][colu];
}
if(Character.isDigit(nuevacadena.charAt(i)))
{
colu=1;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='+')
{
colu=2;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='*')
{
colu=3;
reng=mat[reng][colu];
}
if(nuevacadena.charAt(i)=='%') //Marca el fin de cadena
{
nuevacadena=palabra;
colu=4;
if(mat[reng][colu]==100)
{
System.out.print(nuevacadena+"\tCadena Valida\n");
}
else
System.out.print(nuevacadena+"\tCadena Invalida\n");
}
}
}catch (ArrayIndexOutOfBoundsException exc)
{
}
}
}

domingo, 20 de septiembre de 2009

Tutorial para la cracion de un applet



Primeramente abriremos el IDE de java, en este caso yo utilice el NetBeans 6.7.1, creamos un proyecto nuevo, seleccionamos Java Application . Despues del lado derecho donde te aparece el glosario de archivos, seleccionaremos donde dice Source Packages y daremos un clic derecho, seleccionaremos New y a continuación seleccionamos el Empty Java File. Después seleccionamos y escribiremos el código correspondiente. En este caso el código fue el siguiente:
import java.awt.Graphics;
import java.applet.Applet;
public class holamundo extends Applet {
public void paint( Graphics g ) {
g.drawString( "Hola Mundo!",25,25 ) ;
}
Este código por sí mismo no funcionara correctamente ya que como no se estableció una clase principal, el programa no sabrá que es lo que debe ejecutar, por lo que deberemos agregarle este código donde realizamos la instancia.
public static void main(String args[]){
holamundo app = new holamundo();
A continuación presionamos el botón Run Main Project para compilar el proyecto, si lo hemos hecho correctamente deberá de aparecer lo siguiente en la parte inferior de nuestro proyecto:


Ahora que nuestro archivo .class ha sido creado con el Applet correspondiente es el momento de crear nuestro archivo en HTML. Primeramente nos dirigiremos hasta la carpeta donde está ubicado nuestro archivo .class para facilitarnos la ruta para enlazar los dos archivos en este caso es:
C:\Documents and Settings\Carlos Alfredo\My Documents\NetBeansProjects\lasthope\build\classes
El nombre de mi archivo .class es holamundo.class. A continuación abriremos nuestro blog de notas y escribiremos el siguiente código:



Ahora nos dirigiremos a la pestaña de archivo y selecciónanos la opción Guardar Como y guardaremos nuestro archivo en la ubicación ya antes mencionada, le asignamos un nombre al archivo y le damos la terminación .HTML.
Y listo, ejecutamos nuestro archivo de HTML y el Applet deberá funcionar correctamente.