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 ; }
Its too expensive to compute a single epsilong closure .