miércoles, 13 de enero de 2010

Analizador Lexicoooooo

Gramatica de D





este es el automata, la expresion regular y la tabla de transiciones





codigo del analizador


package pack;

import java.io.*;

/**
*
* @author PrInCeSsItA
*/
public class analizadord {
/*public static void main(String args[]) throws IOException
{
String pal;
try
{

BufferedReader p=new BufferedReader(new FileReader("intp.txt"));
while((pal=p.readLine())!=null){
st(pal);
}

}
catch(FileNotFoundException e)
{
System.out.println("Error de archivo");
}
}*/
public String st(String pal)
{
String nuca=pal;//+'$';
int val=nuca.length();
String valor=null;

int tt [][]=new int [5][28];
//[a-z] / { } * n(0-9) [ ] ( ) +
tt[0][0]=1; tt[0][1]=1; tt[0][2]=1; tt[0][3]=1; tt[0][4]=1; tt[0][5]=2; tt[0][6]=2; tt[0][7]=2; tt[0][8]=2; tt[0][9]=2; tt[0][10]=2;
tt[1][0]=1; tt[1][1]=1; tt[1][2]=1; tt[1][3]=1; tt[0][4]=1; tt[1][5]=1; tt[1][6]=1; tt[1][7]=1; tt[1][8]=1; tt[1][9]=1; tt[1][10]=1;
tt[2][0]=2; tt[2][1]=2; tt[2][2]=2; tt[2][3]=2; tt[0][4]=2; tt[2][5]=2; tt[2][6]=2; tt[2][7]=2; tt[2][8]=2; tt[2][9]=2; tt[2][10]=2;

// - = ~ _ ? " : . ; <
tt[0][11]=2; tt[0][12]=2; tt[0][13]=2; tt[0][14]=2; tt[0][15]=2; tt[0][16]=2; tt[0][17]=2; tt[0][18]=2; tt[0][19]=2; tt[0][20]=2;
tt[1][11]=1; tt[1][12]=1; tt[1][13]=1; tt[1][14]=1; tt[1][15]=1; tt[1][16]=1; tt[1][17]=1; tt[1][18]=1; tt[1][19]=1; tt[1][20]=1;
tt[2][11]=2; tt[2][12]=2; tt[2][13]=2; tt[2][14]=2; tt[2][15]=2; tt[2][16]=2; tt[2][17]=2; tt[2][18]=2; tt[2][19]=2; tt[2][20]=2;

// > , ^ & | # fc[$]
tt[0][21]=2; tt[0][22]=2; tt[0][23]=2; tt[0][24]=2; tt[0][25]=2; tt[0][26]=2; tt[0][27]=2;
tt[1][21]=1; tt[1][22]=1; tt[1][23]=1; tt[1][24]=1; tt[1][25]=1; tt[1][26]=1; tt[1][27]=1;
tt[2][21]=2; tt[2][22]=2; tt[2][23]=2; tt[2][24]=2; tt[2][25]=2; tt[2][26]=2; tt[2][27]=2;
/*Hola mundo*/
int est=0,col=0;
try
{
for(int a=0; a {
if (nuca.charAt(a) == ' ' || nuca.charAt(a) == '\n') continue;
if( nuca.charAt(a) >='a' && nuca.charAt(a) <='z' || nuca.charAt(a) >='A' && nuca.charAt(a) <='Z' )
{
col=0;
est=tt[est][col];
}
else if(nuca.charAt(a)=='/')
{
col=1;
est=tt[est][col];
}
else if(nuca.charAt(a)=='{')
{
col=2;
est=tt[est][col];
}
else if(nuca.charAt(a)=='}')
{
col=3;
est=tt[est][col];
}
else if(nuca.charAt(a)=='*')
{
col=4;
est=tt[est][col];
}
else if(nuca.charAt(a) >='0' && nuca.charAt(a) <='9' )
{
col=5;
est=tt[est][col];
}
else if(nuca.charAt(a)=='[')
{
col=6;
est=tt[est][col];
}
else if(nuca.charAt(a)==']')
{
col=7;
est=tt[est][col];
}
else if(nuca.charAt(a)=='(')
{
col=8;
est=tt[est][col];
}
else if(nuca.charAt(a)==')')
{
col=9;
est=tt[est][col];
}

else if(nuca.charAt(a)=='+')
{
col=10;
est=tt[est][col];
}
else if(nuca.charAt(a)=='-')
{
col=11;
est=tt[est][col];
}

else if(nuca.charAt(a)=='=')
{
col=12;
est=tt[est][col];
}

else if(nuca.charAt(a)=='~')
{
col=13;
est=tt[est][col];
}
else if(nuca.charAt(a)=='_')
{
col=14;
est=tt[est][col];
}
else if(nuca.charAt(a)=='?')
{
col=15;
est=tt[est][col];
}
else if(nuca.charAt(a)=='"')
{
col=16;
est=tt[est][col];
}

else if(nuca.charAt(a)==':')
{
col=17;
est=tt[est][col];
}
else if(nuca.charAt(a)=='.')
{
col=18;
est=tt[est][col];
}
else if(nuca.charAt(a)==';')
{
col=19;
est=tt[est][col];
}
else if(nuca.charAt(a)=='<')
{
col=20;
est=tt[est][col];
}
else if(nuca.charAt(a)=='>')
{
col=21;
est=tt[est][col];
}
else if(nuca.charAt(a)==',')
{
col=22;
est=tt[est][col];
}
else if(nuca.charAt(a)=='^')
{
col=23;
est=tt[est][col];
}
else if(nuca.charAt(a)=='&')
{
col=24;
est=tt[est][col];
}
else if(nuca.charAt(a)=='|')
{
col=25;
est=tt[est][col];
}
else if(nuca.charAt(a)=='#')
{
col=26;
est=tt[est][col];
}
else {

est=2;

}
if( est != 1 )
{System.out.println("Palabra no aceptada");
valor = "No es palabra valida";
}
else
{System.out.println("Palabra Valida");
valor = "Palabra Aceptada";
}
/*if(nuca.charAt(a)=='$')
{
nuca=pal;
col=27;

if(tt[est][col]==200)
{
//System.out.print(nuca +"\t Palabra valida\n");
valor="Palabra valida";
}
if(tt[est][col]==100)
{
//System.out.print(nuca +"\t Palabra valida\n");
valor="Palabra invalida";
}*/




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


}


Applet "Codigo del boton"

analizadord an = new analizadord();
//jTextField1.setText(an.st(jTextArea1.getText()));
jTextField1.setText(an.st(jTextArea1.getText()));

Examen

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