void fixempties ( ) { State s ; State nexts ; Arc a ; Arc nexta ; boolean progress ; /* find and eliminate empties until there are no more */ do { progress = false ; for ( s = states ; s != null ; s = nexts ) { nexts = s . next ; for ( a = s . outs ; a != null ; a = nexta ) { nexta = a . outchain ; if ( a . type == Compiler . EMPTY && unempty ( a ) ) { progress = true ; } assert nexta == null || s . no != State . FREESTATE ; } } if ( progress ) { dumpnfa ( ) ; } } while ( progress ) ; }
fixempties - get rid of EMPTY arcs