Algortimo Automato a pilha.zip (2,1 kB)

Código:


import java.util.Scanner;
import java.util.Vector;

public class Automato_a_Pilha {

    //-----------------------------------Métodos auxiliares-------------------------------------------------
    public static String getTopoPilha(StringBuilder pilha){
        return String.valueOf(pilha.charAt(pilha.length()-1));
    }
    public static String getSimboloFita(StringBuilder fita){
        return String.valueOf(fita.charAt(0));
    }
    public static boolean equal(String sb1, String sb2){
        return sb1.equalsIgnoreCase(sb2);
    }
    public static void retiraDaPilha(StringBuilder pilha){
        pilha.deleteCharAt(pilha.length()-1);
    }
    public static void adicionaAPilha(StringBuilder pilha, String valor){
        StringBuilder aux = new StringBuilder();
        aux.append(valor);
        pilha.append(aux.reverse());
    }
    public static void retiraDaFita(StringBuilder fita){
        fita.deleteCharAt(0);
    }
    public static Producao getProducao(Vector p, int i){
        return (Producao)p.get(i);
    }
    //-------------------------------------------FIM-------------------------------------------------

    public static void main(String[] args) {

        //-------------------------------------Variáveis------------------------------------------
        Scanner input = new Scanner(System.in);

        StringBuilder pilha;                //pilha utilizada pelo autômato
        StringBuilder fita;                 //fita de entrada que conterá a cadeia
        String cadeia;                                //cadeia a ser lida
        String varEsp;                                //variável especial da pilha

        int Nproducoes;                                //número de produções de entrada
        int Nestados;                                //número de estados
        int estadoI;                                //estado inicial
        int estadoF;                                //estado final
        int indice;                                //variável auxiliar para leitura
        int Inc;
   
        Producao prod;                                //variável auxiliar
        String simboloFita;                            //variável auxiliar
        String topoPilha;                            //variável auxiliar
        boolean removeu;                            //variável auxiliar

        //----------------------------------FIM-----------------------------------------------------------


        //-----------------------------------Leitura da entrada de dados--------------------------
        /*
        Exemplo de entrada:

                    2            número de estados
                    5            número de produções

                    0            estado inicial
                    2            estado final

                    0 a 0 0 10    produção: (q0, a, 0)->(q0, 10)
                    0 a 1 0 11    ...
                    0 b 1 1 @    ...
                    1 b 1 1 @    ...
                    1 @ 0 2 @    produção: (q0, @, 0)->(q2, @)    obs: o síbolo '@' significa transição vazia(lâmbida)

                    0            variável especial da pilha

                    ab            cadeia a ser testada
           
        */

        Nestados = input.nextInt();
        Nproducoes = input.nextInt();
        Inc = input.nextInt();
           
        estadoF = input.nextInt();

        Vector estado[] = new Vector[Nestados];

        for(int i=0; i