public ArrayList<String> simulate(String input) {
    ArrayList<String> strings = new ArrayList<String>();
    strings.add("Simulación:");
    long init = System.nanoTime();
    if (nfa.simulate(input)) {
      strings.add("Tiempo: " + (System.nanoTime() - init) + "ns");
      strings.add("Thomson: SÍ");
    } else {
      strings.add("Tiempo: " + (System.nanoTime() - init) + "ns");
      strings.add("Thomson: NO");
    }
    strings.add("");

    init = System.nanoTime();
    if (nfaToDfa.simulate(input)) {
      strings.add("Tiempo: " + (System.nanoTime() - init) + "ns");
      strings.add("Subconjuntos: SÍ");
    } else {
      strings.add("Tiempo: " + (System.nanoTime() - init) + "ns");
      strings.add("Subconjuntos: NO");
    }
    strings.add("");

    init = System.nanoTime();
    if (dfa.simulate(input)) {
      strings.add("Tiempo: " + (System.nanoTime() - init) + "ns");
      strings.add("DFA directo: SÍ");
    } else {
      strings.add("Tiempo: " + (System.nanoTime() - init) + "ns");
      strings.add("DFA directo: NO");
    }
    strings.add("");
    return strings;
  }
 public void build(String rgx) throws Exception {
   nfa = nfaBuilder.build(rgx);
   nfa.writeFile("thomson.txt");
   nfaToDfa = nfa.toDfa();
   nfaToDfa.writeFile("subset.txt");
   dfa = dfaBuilder.build(rgx);
   dfa.writeFile("direct.txt");
 }