public <S, E, T1, T2, NFA extends Nfa<S>> NFA create(Production<E, T1> production, FollowerFunction<E> ff, Function<E, T2> tokenFunc, NfaFactory<NFA, S, ? super T2> factory, T2 start, T2 stop) { Map<E, S> states = Maps.newHashMap(); NFA nfa = factory.create(start, stop); states.put(null, nfa.getStop()); create(production, nfa, nfa.getStart(), ff.getStarts(production.getRoot()), ff, tokenFunc, factory, states); return nfa; }
public <S, E, T1, T2, P extends Nfa<S>> P create(Production<E, T1> production, FollowerFunction<E> ff, Function<E, T2> tokenFunc, NfaFactory<P, S, ? super T2> factory, T2 start, T2 stop) { Map<E, S> states = Maps.newLinkedHashMap(); P nfa = factory.create(start, stop); states.put(null, nfa.getStop()); create(production, nfa, nfa.getStart(), ff.getStarts(production.getRoot()), ff, tokenFunc, factory, states); return nfa; }
public <SRCSTATE, DSTSTATE, P extends Nfa<DSTSTATE>> P create(Nfa<SRCSTATE> source, NfaFactory<P, DSTSTATE, SRCSTATE> factory) { Map<SRCSTATE, DSTSTATE> src2dst = Maps.newLinkedHashMap(); P result = factory.create(source.getStart(), source.getStop()); src2dst.put(source.getStop(), result.getStop()); src2dst.put(source.getStart(), result.getStart()); List<DSTSTATE> dstFollower = Lists.newArrayList(); for (SRCSTATE srcFollower : source.getFollowers(source.getStart())) dstFollower.add(create(source, result, srcFollower, factory, src2dst)); factory.setFollowers(result, result.getStart(), dstFollower); return result; }
public <SRCSTATE, DSTSTATE, NFA extends Nfa<DSTSTATE>> NFA create(Nfa<SRCSTATE> source, NfaFactory<NFA, DSTSTATE, SRCSTATE> factory) { Map<SRCSTATE, DSTSTATE> src2dst = Maps.newHashMap(); NFA result = factory.create(source.getStart(), source.getStop()); src2dst.put(source.getStop(), result.getStop()); src2dst.put(source.getStart(), result.getStart()); List<DSTSTATE> dstFollower = Lists.newArrayList(); for (SRCSTATE srcFollower : source.getFollowers(source.getStart())) dstFollower.add(create(source, result, srcFollower, factory, src2dst)); factory.setFollowers(result, result.getStart(), dstFollower); return result; }