Пример #1
0
 public Movimiento(string id, Token.TIPO tipo)
 {
     this.id   = id;
     this.tipo = tipo;
     mueve     = new List <int>();
     edomov    = new EstadoAFD(-1);
 }
Пример #2
0
        public int encontrarMovimiento(string lexema, EstadoAFD e)
        {
            int t = 0;

            while (t < e.getMovimiento().Count)
            {
                if (e.getMov(t).getId().Equals(lexema))
                {
                    return(t);
                }
                t++;
            }
            return(t);
        }
Пример #3
0
        public void crearTransiciones(SubAFN afn, Stack <object[]> simbolos)
        {
            EstadoAFD nuevo = new EstadoAFD(0);

            nuevo.setCerradura(0);
            estados.Add(nuevo);
            for (int e = 0; e < estados.Count; e++)
            {
                for (int i = 0; i < estados[e].getCerraduras().Count; i++)
                {
                    Estado est = afn.getEstado(estados[e].getCerradura(i)); //entra al estado que indica la cerradura
                    if (estados[e].getCerradura(i) == afn.getFinal().getId())
                    {
                        estados[e].setAcepta();
                    }
                    foreach (TransicionThompson t in est.getTransiciones())
                    {
                        if (t.getLexema().Equals("ε") && !estados[e].encontrarC(t.getFinal().getId()))
                        {
                            estados[e].setCerradura(t.getFinal().getId());
                            if (t.getFinal().getId().Equals(afn.getFinal().getId()))
                            {
                                estados[e].setAcepta();
                            }
                        }
                        else if (!t.getLexema().Equals("ε"))
                        {
                            int m = encontrarMovimiento(t.getLexema(), estados[e]);
                            if (m == estados[e].getMovimiento().Count) //si el mover con dicho simbolo no existe
                            {
                                Movimiento mov = new Movimiento(t.getLexema(), encontrarSimbolo(simbolos, t.getLexema()));
                                mov.getMov().setCerradura(t.getFinal().getId());
                                mov.setMove(t.getFinal().getId());
                                estados[e].setMovimiento(mov);
                            }
                            else // si ya existe, se agrega a que otro estado se puede mover con la misma letra
                            {
                                estados[e].getMov(m).getMov().setCerradura(t.getFinal().getId());
                                estados[e].getMov(m).setMove(t.getFinal().getId());
                                estados[e].getMov(m).getMov().getCerraduras().Sort();
                            }
                        }
                    }
                }
                estados[e].getCerraduras().Sort();
                int edo = encontrarEstado(estados[e].getCerraduras(), e);
                if (edo != e)
                {
                    estados.RemoveAt(e);
                    e--;
                }
                else
                {
                    for (int t = 0; t < estados[e].getMovimiento().Count; t++)
                    {
                        int m = encontrarMovEstado(estados[e].getMov(t).getMoves(), e);
                        if (m != -1)
                        {
                            estados[e].getMov(t).getMov().setId(m);
                        }
                        else
                        {
                            EstadoAFD n = estados[e].getMov(t).getMov();
                            n.setId(estados.Count);
                            estados.Add(n);
                        }
                    }
                }
            }
        }
Пример #4
0
 public void setEdoMov(EstadoAFD mov)
 {
     this.edomov = mov;
 }