lunes, 20 de junio de 2011

Analisis Sintáctico de cadenas... (EXAMEN 3 UNIDAD SOFT)

A -- > Bm | Bn | aC

B -- >  b | bB

C -- > c | cC


import javax.swing.JOptionPane;
public class GramaticaExamen {
    public int pos;
    private char cad[];
    private int t;
    public void estableceCad(String c){
        cad = c.toCharArray();
        t = c.length();
    }
    public boolean evalua(){
        try{
            pos=0;
            if(cad[0] == 'a' || cad[0] == 'b'){
                if(cad[0] == 'a'){
                    if( evaluaC() ){                       
                        return true;                       
                    }
                    return false;
                }
                else{
                    if(evaluaB()){
                        if( (pos == t-1 ) && (cad[pos] == 'n' || cad[pos] == 'm'))
                            return true;
                        return false;
                    }
                    return false;
                }               
            }
            return false;
        }
        catch(ArrayIndexOutOfBoundsException ytba){
            System.out.println("Problema"+ytba.getMessage());
            return false;
        }
    }
    public boolean  evaluaC(){
        pos++;       
        while( pos < t && cad[pos] == 'c' )
            pos++;
        if(pos > 1 && pos == t)
                return true;
        return false;
    }
    public boolean evaluaB(){
        while( pos < t && cad[pos] == 'b' )
            pos++;
        if(pos == t-1){
            return true;
        }
        return false;
    }
    public static void main(String[] args) {
        GramaticaExamen e = new GramaticaExamen();
        try{
            while(true){
                e.pos = 0;
                e.estableceCad(JOptionPane.showInputDialog(null,"Ingrese la cadena a verificar","Entrada Abelo003",JOptionPane.PLAIN_MESSAGE));
                if(e.evalua())
                    JOptionPane.showMessageDialog(null,"Cadena CORRECTA","OK!!!!",JOptionPane.INFORMATION_MESSAGE);
                else
                    JOptionPane.showMessageDialog(null,"Cadena INCORRECTA","MAL!!!!",JOptionPane.WARNING_MESSAGE);
            }
        }
        catch(NullPointerException tg){
        }
    }
}


// ESPERO LES SIRVA PARA PREPARARSE PARA SU EXAMEN, SUERTE, GRACIAS POR SUS COMENTARIOS

2 comentarios: