code: public IntBitSet[] epsilonClosures() {
          int si;
          int nextSize;
          IntBitSet[] result;
          IntBitSet tmp;
          int[] size;
          boolean repeat;
  
          result = new IntBitSet[used];
          size = new int[used];
          for (si = 0; si < used; si++) {
              tmp = new IntBitSet();
              states[si].epsilonClosure(tmp);
              result[si] = tmp;
              size[si] = tmp.size();
          }
  
          do {
              repeat = false;
              for (si = 0; si < used; si++) {
                  result[si].addAllSets(result);
                  nextSize = result[si].size();
                  if (nextSize > size[si]) {
                      size[si] = nextSize;
                      repeat = true;
                  }
              }
          } while (repeat);
  
          return result;
      }
docs: Its too expensive to compute a single epsilong closure.