SoloCodigo

Programación General => Java => Mensaje iniciado por: victorwayne en Lunes 25 de Mayo de 2015, 23:26

Título: AUTÓMATA DE PILA EN JAVA
Publicado por: victorwayne en Lunes 25 de Mayo de 2015, 23:26
AQUI UN EJEMPLO MAS PARA LOS QUE BUSCAN AUTOMATAS DE PILA EN JAVA, YA QUE SON MUY  ESCASOS EN INTERNET :)
Título: Re:AUTÓMATA DE PILA EN JAVA
Publicado por: Haggen en Viernes 10 de Julio de 2015, 21:48
gracias  :smartass:
Título: Re:AUTÓMATA DE PILA EN JAVA
Publicado por: OFIR en Viernes 7 de Abril de 2017, 06:50
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: