Example #1
0
  /**
   * Contruye el AFD equivalente
   *
   * @return <b>AFD</b> Automata finito equivalente al AFN recibido
   */
  private AFD buildAFD() {
    for (Cerradura cerradura : cerraduras) {
      Estado origen = getState(cerradura);
      Estado destino = null;

      for (pol.una.py.model.lexico.Cerradura.Subconjunto conjunto : cerradura.getSubconjuntos()) {
        String codigoUnico = conjunto.getCodCerradura();
        // Conjunto vacio
        if (codigoUnico.equals("{}")) {
          destino = getStateError();
        } else {
          destino = getState(getCerradura(codigoUnico));
        }
        origen.addTransition(new Transicion(origen, destino, conjunto.getSymbol()));
      }
      automata.addEstado(origen);
    }
    // Puede darse el caso de que el estado inicial del AFN no sea mas un
    // estado inicial, sino un estado de aceptacion. Si no es un estado de
    // aceptacion, indicamos que es el estado inicial.
    if (!automata.getInitState().isAcceptation()) {
      automata.getInitState().setInit(true);
    }
    return automata;
  }