private static void writeDFA(DFA dfa, Writer out) throws IOException {
    Character[] alphabet = dfa.alphabet().toArray(new Character[0]);
    State[] states = dfa.allStates().toArray(new State[0]);

    out.write("Start: ");
    out.write(dfa.startState().toString());
    out.write("\n");
    out.write("Final: ");
    for (State state : dfa.finalStates()) {
      out.write("\t");
      out.write(state.toString());
    }
    out.write("\n");
    out.write("-");
    for (Character character : alphabet) {
      out.write("\t");
      out.write(character);
    }
    out.write("\n");

    for (State currState : states) {
      out.write(currState.toString());
      // out.write("\t");
      for (Character charater : alphabet) {
        out.write("\t");
        out.write(dfa.transition(currState, charater).toString());
      }
      out.write("\n");
    }
    out.write("--Tokens\n");
    for (State currState : states) {
      Stack<Token> tokens = currState.getTokens();
      out.write(currState.toString());
      while (!tokens.isEmpty()) {
        out.write("\t");
        out.write(tokens.pop().toString());
      }
      out.write("\n");
    }

    out.flush();
  }