public Automaton or(Automaton left, Automaton right) { Automaton afn = new Automaton(); Estado actual_begin = new Estado(0); actual_begin.setTransitions(new Transition(actual_begin, right.getBegin(), Automaton.EPSILON)); afn.addEstados(actual_begin); afn.setBegin(actual_begin); int i = 0; for (i = 0; i < left.getEstados().Count(); i++) { Estado aux = left.getEstados().ElementAt(i); aux.setId(i + 1); afn.addEstados(aux); } for (int j = 0; j < right.getEstados().Count(); j++) { Estado aux = right.getEstados().ElementAt(j); aux.setId(i + 1); afn.addEstados(aux); i++; } Estado actual_end = new Estado(left.getEstados().Count() + right.getEstados().Count() + 1); afn.addEstados(actual_end); afn.addEstadosAceptacion(actual_end); Estado last_begin = left.getBegin(); LinkedList <Estado> last_end_left = left.getEstadosAceptacion(); LinkedList <Estado> last_end_right = right.getEstadosAceptacion(); actual_begin.getTransitions().AddLast(new Transition(actual_begin, last_begin, Automaton.EPSILON)); for (int k = 0; k < last_end_left.Count(); k++) { last_end_left.ElementAt(k).getTransitions().AddLast(new Transition(last_end_left.ElementAt(k), actual_end, Automaton.EPSILON)); } for (int k = 0; k < last_end_left.Count(); k++) { last_end_right.ElementAt(k).getTransitions().AddLast(new Transition(last_end_right.ElementAt(k), actual_end, Automaton.EPSILON)); } return(afn); }
public Automaton cerradura_kleene(Automaton afn) { //Definir un nuevo automata con su estado inicial Automaton kleene = new Automaton(); /*Se marca el estado inicial como "actual" debido a que el automata recibido por parametro tambien * posee sus estados inicial y final */ Estado actual_begin = new Estado(0); kleene.addEstados(actual_begin); kleene.setBegin(actual_begin); //Actualizar los indicadores de estado del afn recibido for (int i = 0; i < afn.getEstados().Count(); i++) { Estado aux = afn.getEstados().ElementAt(i); for (int j = 0; j < aux.getTransitions().Count(); j++) { aux.getTransitions().ElementAt(j).getBegin().setId(aux.getTransitions().ElementAt(j).getBegin().getId() + 1); } aux.setId(i + 1); kleene.addEstados(aux); } Estado actual_end = new Estado(afn.getEstados().Count() + 1); kleene.addEstados(actual_end); kleene.addEstadosAceptacion(actual_end); Estado last_begin = afn.getBegin(); LinkedList <Estado> last_end = afn.getEstadosAceptacion(); actual_begin.getTransitions().AddLast(new Transition(actual_begin, last_begin, Automaton.EPSILON)); actual_begin.getTransitions().AddLast(new Transition(actual_begin, actual_end, Automaton.EPSILON)); for (int i = 0; i < last_end.Count(); i++) { last_end.ElementAt(i).getTransitions().AddLast(new Transition(last_end.ElementAt(i), last_begin, Automaton.EPSILON)); last_end.ElementAt(i).getTransitions().AddLast(new Transition(last_end.ElementAt(i), actual_end, Automaton.EPSILON)); } return(kleene); }
public Automaton and(Automaton left, Automaton right) { Automaton afn = new Automaton(); int i = 0; for (i = 0; i < right.getEstados().Count(); i++) { Estado aux = right.getEstados().ElementAt(i); aux.setId(i); if (i == 0) { afn.setBegin(aux); } if (i == right.getEstados().Count() - 1) { for (int j = 0; j < right.getEstadosAceptacion().Count(); j++) { //aux.setTransitions(new Transition((Estado)right.getEstadosAceptacion().ElementAt(j), left.getBegin(), Automaton.EPSILON)); foreach (Transition t in left.getBegin().getTransitions()) { //t.setBegin(aux); aux.setTransitions(new Transition((Estado)right.getEstadosAceptacion().ElementAt(j), t.getEnd(), t.getSimbol())); } } } afn.addEstados(aux); } for (int j = 1; j < left.getEstados().Count(); j++) { Estado aux = left.getEstados().ElementAt(j); aux.setId(i); if (j == left.getEstados().Count() - 1) { afn.addEstadosAceptacion(aux); } afn.addEstados(aux); i++; } return(afn); }