@Override public Iterator<DFAState<T>> iterator() { return new DiGraphIterator<>(this); }
public DiGraphIterator(X root) { next = enter(root); }
/** * @param args the command line arguments */ public static void main(String[] args) { try { DFA<Integer> dfa = Regex.createDFA("ashjkahsj(ha|kjkajdkasdj)+h|yrquiyqiwdioas|(kdajksdfh){2,3}ajkshdjkah|ajhdajsdjkahsdjkah"); DiGraphIterator<DFAState<Integer>> i = new DiGraphIterator<>(dfa.getRoot()); while (i.hasNext()) { System.err.println(i.next()); } } catch (Exception ex) { ex.printStackTrace(); } }
private void pop() { Ctx ctx = context.peek(); X x = ctx.x; if (indexOf(x) == ctx.d) { X s = stack.peek(); while (!s.equals(x)) { stack.pop(); setIndexOf(s, INFINITY); s = stack.peek(); } setIndexOf(x, INFINITY); stack.pop(); } ctx = context.pop(); }
@Override public X next() { if (next == null) { throw new NoSuchElementException(); } X n = next; next = traverse(); return n; }
private X enter(X x) { stack.push(x); int d = stack.size(); setIndexOf(x, d); Iterator<X> i = x.edges().iterator(); context.push(new Ctx(x, i, d)); return x; } private X traverse()
@Override public Iterator<NFAState<T>> iterator() { return new DiGraphIterator<>(this); }
@Override public Iterator<DFAState<T>> iterator() { return new DiGraphIterator<>(root); }
@Override public Iterator<NFAState<T>> iterator() { return new DiGraphIterator<>(first); }