public object Clone() { Automaton clon = new Automaton(); LinkedList <Estado> estados_clon = new LinkedList <Estado>(); LinkedList <Estado> end_clon = new LinkedList <Estado>(); foreach (Estado e in this.getEstados()) { Estado cln = (Estado)e.Clone(); estados_clon.AddLast(cln); } foreach (Estado e2 in this.end) { Estado cln2 = (Estado)e2.Clone(); end_clon.AddLast(cln2); } clon.begin = (Estado)begin.Clone(); clon.estados = estados_clon; clon.end = end_clon; clon.type = type; return(clon); }
public Automaton cerradura_positiva(Automaton afn_pos) { Automaton afn = new Automaton(); int i = 0; //Recorrer el automata actual for (i = 0; i < afn_pos.getEstados().Count(); i++) { //Clonar cada estado (sin sus transiciones) Estado aux = afn_pos.getEstados().ElementAt(i); Estado nuevo_estado = (Estado)aux.Clone(); if (i == 0) { afn.setBegin(nuevo_estado); } afn.addEstados(nuevo_estado); } //Recorrer el nuevo automata for (int j = 0; j < afn.getEstados().Count(); j++) { //Estado auxiliar del automata nuevo Estado e = afn.getEstados().ElementAt(j); //Estado auxiliar del automata actual Estado e2 = afn_pos.getEstados().ElementAt(j); foreach (Transition t in e2.getTransitions()) { //Agregar las transiciones del nuevo automata Transition aux = new Transition(search(afn.getEstados(), e2.getId()), search(afn.getEstados(), t.getEnd().getId()), t.getSimbol()); e.setTransitions(aux); } } for (int j = 0; j < afn_pos.getEstadosAceptacion().Count(); j++) { Estado aux = afn_pos.getEstadosAceptacion().ElementAt(j); Estado n = search(afn.getEstados(), aux.getId()); afn.addEstadosAceptacion(n); } return(afn); }