public SubAFN crearOr(SubAFN basico1, SubAFN basico2) { SubAFN b1 = nuevo(basico1); SubAFN b2 = nuevo(basico2); SubAFN or = new SubAFN(); Estado inicial = new Estado(0); inicial.setTransicion(new TransicionThompson(inicial, b1.getInicial(), "ε")); inicial.setTransicion(new TransicionThompson(inicial, b2.getInicial(), "ε")); or.setEstado(inicial); or.setInicial(inicial); int e = 0; int basico1tam = b1.getEstados().Count; int basico2tam = b2.getEstados().Count; for (e = 0; e < basico1tam; e++) { Estado aux = b1.getEstado(e); aux.setId(e + 1); foreach (TransicionThompson t in aux.getTransiciones()) { t.getInicio().setId(e + 1); t.getFinal().setId(t.getFinal().getId() + 1); } or.setEstado(aux); } int tf = e + 1; for (int i = 0; i < basico2tam; i++) { Estado aux = b2.getEstado(i); aux.setId(e + 1); foreach (TransicionThompson t in aux.getTransiciones()) { t.getInicio().setId(e + 1); t.getFinal().setId(t.getFinal().getId() + tf); } or.setEstado(aux); e++; } Estado final = new Estado(basico1tam + basico2tam + 1); or.setFinal(final); or.setEstado(final); Estado basico1fin = b1.getFinal(); Estado basico2fin = b2.getFinal(); basico1fin.setTransicion(new TransicionThompson(basico1fin, final, "ε")); basico2fin.setTransicion(new TransicionThompson(basico2fin, final, "ε")); return(or); }
public SubAFN crearPositiva(SubAFN basico) { SubAFN b1 = new SubAFN(); foreach (Estado e in basico.getEstados()) { int en = e.getId(); Estado aux = new Estado(en); foreach (TransicionThompson t in e.getTransiciones()) { int ti = t.getInicio().getId(); Estado temp = new Estado(ti); int tf = t.getFinal().getId(); Estado temp1 = new Estado(tf); string l = t.getLexema(); aux.setTransicion(new TransicionThompson(temp, temp1, l)); } b1.setEstado(aux); } b1.setInicial(b1.getEstado(0)); b1.setFinal(b1.getEstado(b1.getEstados().Count - 1)); SubAFN kleene = this.crearKleene(basico); return(this.crearConcatenacion(b1, kleene)); }
public SubAFN crearKleene(SubAFN basico) { SubAFN b = nuevo(basico); int tam = b.getEstados().Count; SubAFN kleene = new SubAFN(); Estado inicio = new Estado(0); kleene.setEstado(inicio); kleene.setInicial(inicio); for (int i = 0; i < tam; i++) { Estado aux = b.getEstado(i); aux.setId(i + 1); foreach (TransicionThompson t in b.getEstado(i).getTransiciones()) { t.getInicio().setId(i + 1); t.getFinal().setId(t.getFinal().getId() + 1); } if (i == 0) { b.setInicial(aux); } if (i == tam - 1) { b.setFinal(aux); } kleene.setEstado(aux); } Estado fin = new Estado(tam + 1); kleene.setEstado(fin); kleene.setFinal(fin); Estado inibasico = b.getInicial(); Estado finbasico = b.getFinal(); inicio.setTransicion(new TransicionThompson(inicio, inibasico, "ε")); inicio.setTransicion(new TransicionThompson(inicio, fin, "ε")); finbasico.setTransicion(new TransicionThompson(finbasico, inibasico, "ε")); finbasico.setTransicion(new TransicionThompson(finbasico, fin, "ε")); return(kleene); }
public SubAFN crearBasico(string simbolo) { SubAFN basico = new SubAFN(); Estado ini = new Estado(0); Estado fin = new Estado(1); TransicionThompson transicion = new TransicionThompson(ini, fin, simbolo); ini.setTransicion(transicion); basico.setEstado(ini); basico.setEstado(fin); basico.setInicial(ini); basico.setFinal(fin); return(basico); }
public SubAFN nuevo(SubAFN b) { SubAFN b1 = new SubAFN(); foreach (Estado e in b.getEstados()) { int en = e.getId(); Estado aux = new Estado(en); foreach (TransicionThompson t in e.getTransiciones()) { Estado temp = new Estado(en); int tf = t.getFinal().getId(); Estado temp1 = new Estado(tf); string l = t.getLexema(); aux.setTransicion(new TransicionThompson(temp, temp1, l)); } b1.setEstado(aux); } b1.setInicial(b1.getEstado(0)); b1.setFinal(b1.getEstado(b1.getEstados().Count - 1)); return(b1); }