• Jueves 28 de Marzo de 2024, 12:44

Autor Tema:  AUTÓMATA DE PILA EN JAVA  (Leído 14374 veces)

victorwayne

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
AUTÓMATA DE PILA EN JAVA
« en: Lunes 25 de Mayo de 2015, 23:26 »
0
AQUI UN EJEMPLO MAS PARA LOS QUE BUSCAN AUTOMATAS DE PILA EN JAVA, YA QUE SON MUY  ESCASOS EN INTERNET :)
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Haggen

  • Miembro activo
  • **
  • Mensajes: 88
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re:AUTÓMATA DE PILA EN JAVA
« Respuesta #1 en: Viernes 10 de Julio de 2015, 21:48 »
0
gracias  :smartass:

OFIR

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:AUTÓMATA DE PILA EN JAVA
« Respuesta #2 en: Viernes 7 de Abril de 2017, 06:50 »
0
Hola!!
Me podrías ayudar con este tema por favor!!
Apenas estoy aprendiendo de autómatas y no sé manejar muy bien el lenguaje de java. No logre que llegara al estado de aceptación.

. Construir un autómata de pila que  reconozca secuencias de la forma 0^m1^2n0^n1^m, con m,n>0.


package apila;

import java.util.Stack;
import javax.swing.JOptionPane;

/**
 *
 * @author Gisela
 */
public class APila {
    boolean aceptado;
    Stack<String> pila=new Stack<String>();
    int cont;
    public static char [] car;
   
   
   
    public static void main(String[] args) {
        APila aut = new APila();
        String expresion;
        expresion  =JOptionPane.showInputDialog("Ingrese una secuencia 0^m1^2n0^n1^m ");
        car=expresion.toCharArray();

       
        aut.Inicio();
        if(aut.aceptado){
            JOptionPane.showMessageDialog(null, "La Expresion "+expresion+" es aceptada para la secuencia","Exito",JOptionPane.INFORMATION_MESSAGE);
            System.out.println("Cadena aceptada");
        }else{
            JOptionPane.showMessageDialog(null, "La Expresion "+expresion+" NO es aceptada para la secuencia","Fallo",JOptionPane.WARNING_MESSAGE);
            System.out.println("Cadena no Aceptada");
        }
       
       
    }
   
    private void Inicio() {
       cont=0;
       pila.push("*");
       aceptado=false;
       s0();
       
    }
   
    public void s0() {
       
   
        if(cont<car.length){
           
             switch(car[cont]) {
                 case '0':
                     //#1 Si viene 0 y hay * Replace (0*), s0, avance
                     if(pila.peek().equals("*")){
                         pila.pop();
                         pila.push(String.valueOf(car[cont]));
                         pila.push("*");
                         cont++; 
                         s0();
                     //#3 si viene 0 y hay + Desapile, s0, retenga
                     }else if(pila.peek().equals("+")){
                         pila.pop();
                         s1();
                     //#5 si viene 0 y hay 1 Desapile, s1, avance
                     }else if(pila.peek().equals("1")){
                         pila.pop();
                         cont++;
                         s1();
                     }
                     break;
                     
                 case '1':
                     //#2 Si viene 1 y hay *o un + replace (1+), s0, avance
                     if((pila.peek().equals("*"))||(pila.peek().equals("+"))){
                        pila.pop();
                        pila.push(String.valueOf(car[cont]));
                        pila.push("+");
                        cont++;       
                        s0();
                    }
                     break;
                 default:
                     break;
                 
             }
           
        }

    }
   
    public void s1(){
             

        if(cont<car.length){
            switch(car[cont]) {
                 case '0':
                   
                     //#4 Si viene 0 y hay 1 Desapile, s0, retenga   
                     if(pila.peek().equals("1")){
                         pila.pop();
                         s0();
                     }
                     break; 
                 
                 case '1':
                     //#6 Si hay 0 y viene 1 desapile, s1, avance
                      if(pila.peek().equals("0")){
                         pila.pop();
                         cont++;
                         s1(); 
                     }
                     break;
                     
                 default:
                     //Aceptacion
                     if((pila.isEmpty())&&(cont<car.length)){
                         aceptado=true;           
                     }else{
                        qError();
                        break;
                     }
             }   
           
        }
    }
   
     public void qError() {
        System.out.println("En Error");
        aceptado= false;
    }
}
 :gracias: :gracias: