public Movimiento(string id, Token.TIPO tipo) { this.id = id; this.tipo = tipo; mueve = new List <int>(); edomov = new EstadoAFD(-1); }
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); }
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); } } } } }
public void setEdoMov(EstadoAFD mov) { this.edomov = mov; }