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