protected <S, P> TraceItem<S, P> trace(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { StackItem<P> stackItem = createStack(stack); List<TraceItem<S, P>> current = Lists.newArrayList(); Set<S> visited = Sets.newLinkedHashSet(starts);
protected <S, P> TraceItem<S, P> trace(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { StackItem<P> stackItem = createStack(stack); List<TraceItem<S, P>> current = Lists.newArrayList(); Set<S> visited = Sets.newHashSet(starts);
protected <S, P> TraceItem<S, P> traceToWithPruningStack(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { StackItem<P> stackItem = createStack(stack); List<TraceItem<S, P>> current = Lists.newArrayList(); Set<S> visited = Sets.newLinkedHashSet(starts);
protected <S, P> TraceItem<S, P> traceToWithPruningStack(Pda<S, P> pda, Iterable<S> starts, Iterator<P> stack, Predicate<S> matches, Predicate<S> canPass) { StackItem<P> stackItem = createStack(stack); List<TraceItem<S, P>> current = Lists.newArrayList(); Set<S> visited = Sets.newHashSet(starts);