current.add(new TraceItem<S, P>(null, start, stackItem)); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) return new TraceItem<S, P>(trace, follower, trace.stackitem); if (canPass.apply(follower)) { P push = pda.getPush(follower); if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));
current.add(new TraceItem<S, P>(null, start, stackItem)); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) return new TraceItem<S, P>(trace, follower, trace.stackitem); if (canPass.apply(follower)) { P push = pda.getPush(follower); if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));
TraceItem<S, P> result = null; for (S start : starts) { TraceItem<S, P> item = new TraceItem<S, P>(null, start, stackItem); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) { TraceItem<S, P> found = new TraceItem<S, P>(trace, follower, trace.stackitem); if (found.stackitem == null) return found; if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));
TraceItem<S, P> result = null; for (S start : starts) { TraceItem<S, P> item = new TraceItem<S, P>(null, start, stackItem); for (S follower : pda.getFollowers(trace.state)) { if (matches.apply(follower)) { TraceItem<S, P> found = new TraceItem<S, P>(trace, follower, trace.stackitem); if (found.stackitem == null) return found; if (push != null) { StackItem<P> pushed = trace.stackitem.push(push); newCurrent.add(new TraceItem<S, P>(trace, follower, pushed)); } else { P pop = pda.getPop(follower); if (trace.stackitem != null && pop == trace.stackitem.peek()) { StackItem<P> popped = trace.stackitem.pop(); newCurrent.add(new TraceItem<S, P>(trace, follower, popped)); newCurrent.add(new TraceItem<S, P>(trace, follower, trace.stackitem));