AUTÓMATAS EN JAVA (VALIDACIÓN DE GRAMÁTICAS - POO)

CREACIÓN DE AUTÓMATAS PARA LA VALIDACIÓN DE GRAMÁTICAS

AUTÓMATA N°1 (GRAMATICA (ab)):

package Clases;

//@author Systatem Technology
//http://www.systatem.com

public class Automata1 {
    private char[] carac; //Vector que contenera la cadena
    private int cont; //indice del vector
    private boolean flag ; //Afirma o Niega la gramatica de la cadena
 
    //Proceso (capturaCadena), trae una cadena ingresada desde tu interfaz grafica
    //y lo convierte en un vector (en este caso 'carac')
    public void capturaCadena(String cad){
        carac = cad.toCharArray();//Convierte la cadena a un vector de tipo 'CHAR'
    }
 
    public void Inicio(){
        if (carac[0]=='a') { //Verifica que el primer caracter de la cadena se 'a'
            cont = 0;
            X();//Inicia el proceso X
        }else{
            qError();//Niega la gramatica de la cadena
        }
    }
 
    private void X(){
        //Condiciona que el indice del vector se menor al tamaño del mismo
        //Si la condicion es verda entra al proceso
        if (cont<carac.length) {
            //Condiciona el vector que contiene la cadena en su indice actual que se igual a el caracter 'a'
            //Si la condicion es verdadera el indice del vector incrementa en 1 y vuelve a repetir el mismo proceso
            //Si la condicion es Falsa y el vector en indice actual es igual al caracter 'b', el indice del
            //vector incrementa en 1 y se va al proceso T (Finalizacion del automata)
            if (carac[cont]=='a') {
                cont ++;
                X();//Regresa al proceso X
            }else if(carac[cont]=='b'){
                cont ++;
                T(); //Inicia el proceso de Finalizacion
            }else{
                qError();//Proceso que niega la gramatica de la cadena no es (a^n)(b)
            }
        }
    }
   
    //El proceso T finaliza el automata: Afirmando o negando si la gramatica de la
    //cadena ingresada es (a^n)(b)
    private void T(){
        flag = true ;//Inicia flag con verdadero
        if (cont == carac.length) {
            flag = true;//Afirma la gramatica de la cadena
        }else{
            flag = false;//Niega la gramatica de la cadena
        }
    }
 
    private void qError() {
        flag = false;//Niega la cadena
    }
    public boolean Flag(){
        return flag;//retorna el valor de Flag
    }

}

INTERFAZ GRÁFICA


AUTÓMATA N°2 (GRAMATICA (a bn c)):


package Clases;

/**
 * @author Systatem Technology
 * http://www.systatem.com
 */
public class Automata5 {
    private char[] car;//Vector tipo char que contenera la cadena
    private boolean flag; //afirmara y negara si la gramatica de la cadena ingresada es (a^n)(b)(c)
    private int con;//indice del vector
    public void capturarCadena(String cad){
        car = cad.toCharArray();//convierte la cadena en un vector de caracteres
    }
    public void Inicio(){
        if (car[0]=='a') {//verifica que el indice inicial del vector sea 'a'
            X();
            con = 0; //incia el indice en 0
        }else{
            flag = false; //Niega la gramatica de la cadena
        }
    }

    private void X() {
        //Condiciona que el indice del vector se menor a el tamaño del vector
        //Si se cumple la condicion, eentra a la siguiente condicion y
        //Si no se cumple la condicion entra al proceso qError
        if (con<car.length) {
            //Condiciona que el vector en idice actual sea 'a'
            //Si esto es verda, el indice del vector incrementa y engtra al proceso S
            //Si no Finaliza el automata entrando al proceso(F)
            if (car[con]=='a') {
                con ++;
                S();
            }else{
                F();
            }
        }else{
            qError();//Finaliza el automata
        }
    }

    private void S() {
        //Condiciona que el indice del vector sea menor al tamaño del vector
        if (con<car.length) {
            //Condiciona que el vector en su indice actual sea 'b'
            //Si es verdad el indice incrementa en 1 y regresa al mismo proceso S
            //Si no es asi condiciona que el vector en su indice actual sea 'c'
            //Si esta nueva condicion es verdad el indice incrementa en 1 y finaliza
            //el automata con el proceso F
            //Y si estas dos condiones son falsas entra al proceso qError
            if (car[con]=='b') {
                con ++;
                S();
            }else if(car[con]=='c'){
                con ++;
                F();
            }else{
                qError();
            }
        }
    }
 
    //Proceso F: verifica que el indice del vector se igual al tamaño del vector
    private void F() {
        flag = true;
        if (con == car.length) {
            flag = true;//Afirma que la gramatica de la cadena ingresada es (a)(b^n)(c)
        }else{
            flag = false;//Niega que la gramatica de la cedana ingresada es (a)(b^n)(c)
        }
    }
    //qError: Nos dice que la gramatica de la cadena ingresada no es (a)(b^n)(c)
    private void qError(){
        System.err.println("En error");
        flag = false;
    }
    public boolean Val(){
        return flag;
    }
}

INTERFAZ GRÁFICA




DESCARGAR EJEMPLO






Relacionados

2 comentarios

  1. alguien que me ayude con el siguiente automa en java el automata tiene que validar ceros y unos en en el estado q0 estan los ceros en caso de aver un uno avansa al estado q1, pero en el estado q1 tiene que aver un ciclo de unos

    ResponderEliminar
  2. no me corre el programa 2

    ResponderEliminar

Estadisticas

  • Días en línea
  • Entradas
  • Comentarios