#include <astl_binary.h>

// send the minimized input dfa to standard output

template <class DFA>
void minimize(DFA &A, const string &filename)
{
  load_dfa(A, filename);
  acyclic_minimization(A);
  DFA_stream output(cout);
  clone(output, dfirstmarkc(forwardc(A)));
  exit(0);
}

int main(int argc, char **argv)
{
  usage use(argv[0]);
  use.push_back("[dfa_file]");
  use.push_back("send the minimized acyclic input dfa to standard output");
  use.check(argc, argv, 0, 1);

  if (use[0] == "matrix") {
    DFA_matrix<plain, minimization_tag> A;
    minimize(A, use[1]);
  }
  if (use[0] == "map") {
    DFA_map<plain, minimization_tag> A;
    minimize(A, use[1]);
  }
  if (use[0] == "bin") {
    DFA_bin<plain, minimization_tag> A;
    minimize(A, use[1]);
  }

  cerr << argv[0] << ": " << use[0] << " type unauthorized (";
  if (use[0] == "mtf" || use[0] == "tr")
    cerr << "sorted transitions needed";
  else
    cerr << "tags needed";
  cerr << ")" << endl;
  exit(3);
}

