code: public RegexMatcher compile()
      {
          if (root == null)
          {
              Scope<DFAState<T>> dfaScope = new Scope<>("org.vesalainen.regex.RegexMatcher");
              if (nfa == null)
              {
                  nfa = new NFA(dfaScope);
              }
              dfa = nfa.constructDFA(dfaScope);
              state = root = dfa.getRoot();
              Iterator<DFAState<T>> iterator = dfa.iterator();
              while (iterator.hasNext())
              {
                  DFAState<T> next = iterator.next();
                  next.createFastMap();
              }
              iterator = dfa.iterator();
              while (iterator.hasNext())
              {
                  DFAState<T> next = iterator.next();
                  next.detectUniquePath();
              }
              parser = null;
              nfaScope = null;
              nfa = null;
          }
          return this;
      }
docs: Compiles expressions
  @return