jueves, 14 de enero de 2010

Automata de Pila que analisa las letras a b c

package analizador;

// Automata de Pila que analiza las letras abc

import java.io.*;

import java.util.Stack;

/**

*

* @author Edson

*/

public class analizador {

public static void main(String args[]) throws IOException

{

String cadena;

try

{

BufferedReader n=new BufferedReader(new FileReader("cadenas.txt"));

while((cadena=n.readLine())!=null){

comprueba(cadena);

}

}

catch(FileNotFoundException e)

{

System.out.println("No se encuentra el archivo");

}

}

public static void comprueba(String palabra)

{

String cadena=palabra+'#';

String S="S",a="a",b="b",c="c";

Stack pila = new Stack();

int tam=cadena.length(),i=0;

int matriz [][]=new int [6][5];

// a b c FC

matriz[1][1]=1; matriz[1][2]=2; matriz[1][3]=3; matriz[1][4]=90;

matriz[2][1]=4; matriz[2][2]=90; matriz[2][3]=90; matriz[2][4]=90;

matriz[3][1]=90; matriz[3][2]=5; matriz[3][3]=90; matriz[3][4]=90;

matriz[4][1]=90; matriz[4][2]=90; matriz[4][3]=6; matriz[4][4]=90;

matriz[5][1]=90; matriz[5][2]=90; matriz[5][3]=90; matriz[5][4]=100;

pila.clear();

pila.push(S);

int fila=0,col=0;

do

{

try{

if(pila.empty()==true)

{

fila=5;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==S)

{

fila=1;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==a)

{

fila=2;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==b)

{

fila=3;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==c)

{

fila=4;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(matriz[fila][col]==1)

{

pila.pop();

pila.push(a);

pila.push(S);

pila.push(a);

}

if(matriz[fila][col]==2)

{

pila.pop();

pila.push(b);

pila.push(S);

pila.push(b);

}

if(matriz[fila][col]==3)

{

pila.pop();

pila.push(c);

}

if(matriz[fila][col]==4)

{

pila.pop();

i++;

}

if(matriz[fila][col]==5)

{

pila.pop();

i++;

}

if(matriz[fila][col]==6)

{

pila.pop();

i++;

}

}catch(java.util.EmptyStackException e){

if(matriz[fila][col]==100 && pila.empty()==true)

System.out.println("Cadena Aceptada");

if(matriz[fila][col]==90 && pila.empty()==true)

System.out.println("Cadena No Aceptada");

break;

}

}while(i

}//fin comprueba

}//fin clase

// CODIGO PILA

package pila;

/**

*

* @author Edson

*/

public class Pila {

int tope=-1;

int vec[];

Pila(int max)

{

vec=new int [max];

}

public boolean llena()

{

if (tope==vec.length-1)

return true;

else

return false;

}

public boolean vacia()

{

if (tope==-1)

return true;

else

return false;

}

public void push(int dato)

{

if (llena()== true)

System.out.println("Overflow");

else

if (tope==-1)

{

tope=0;

vec[tope]=dato;

}

else

{

tope++;

vec[tope]=dato;

}

}

public int pop()

{

int aux;

if (vacia()==true)

{

System.out.println("La pila esta vacia");

return -1;

}

else

{

aux=vec[tope];

tope--;

}

return aux;

}

public void Imprime_Datos()

{

if(vacia()==true)

{

System.out.println("La pila esta vacia, ingrese datos primero:");

}

else

for(int Contador=0;Contador

System.out.println("Los valores de la pila son:"+vec[Contador]);

}

}

No hay comentarios:

Publicar un comentario