public <S, E, T, P extends Nfa<S>> P create(Production<E, T> production, FollowerFunction<E> ff, NfaFactory<P, S, ? super T> factory) { return create(production, ff, new GetToken<E, T>(production), factory, null, null); }
public <S, E, T, NFA extends Nfa<S>> NFA create(Production<E, T> production, FollowerFunction<E> ff, NfaFactory<NFA, S, ? super T> factory) { return create(production, ff, new GetToken<E, T>(production), factory, null, null); }
protected <SRCSTATE, DSTSTATE, NFA extends Nfa<DSTSTATE>> DSTSTATE create(Nfa<SRCSTATE> source, NFA result, SRCSTATE src, NfaFactory<NFA, DSTSTATE, SRCSTATE> factory, Map<SRCSTATE, DSTSTATE> src2dst) { DSTSTATE dst = src2dst.get(src); if (dst != null) return dst; dst = factory.createState(result, src); src2dst.put(src, dst); List<DSTSTATE> dstFollower = Lists.newArrayList(); for (SRCSTATE srcFollower : source.getFollowers(src)) dstFollower.add(create(source, result, srcFollower, factory, src2dst)); factory.setFollowers(result, dst, dstFollower); return dst; }
protected <SRCSTATE, DSTSTATE, P extends Nfa<DSTSTATE>> DSTSTATE create(Nfa<SRCSTATE> source, P result, SRCSTATE src, NfaFactory<P, DSTSTATE, SRCSTATE> factory, Map<SRCSTATE, DSTSTATE> src2dst) { DSTSTATE dst = src2dst.get(src); if (dst != null) return dst; dst = factory.createState(result, src); src2dst.put(src, dst); List<DSTSTATE> dstFollower = Lists.newArrayList(); for (SRCSTATE srcFollower : source.getFollowers(src)) dstFollower.add(create(source, result, srcFollower, factory, src2dst)); factory.setFollowers(result, dst, dstFollower); return dst; }
protected <S, E, T1, T2, P extends Nfa<S>> void create(Production<E, T1> production, P nfa, S state, Iterable<E> followerElements, FollowerFunction<E> followerFunc, Function<E, T2> tokenFunc, NfaFactory<P, S, ? super T2> factory, Map<E, S> ele2state) { List<S> sfollower = Lists.newArrayList(); for (E follower : followerElements) { S fs = ele2state.get(follower); if (fs == null) { fs = factory.createState(nfa, tokenFunc.apply(follower)); ele2state.put(follower, fs); create(production, nfa, fs, followerFunc.getFollowers(follower), followerFunc, tokenFunc, factory, ele2state); } sfollower.add(fs); } factory.setFollowers(nfa, state, sfollower); }
protected <S, E, T1, T2, NFA extends Nfa<S>> void create(Production<E, T1> production, NFA nfa, S state, Iterable<E> followerElements, FollowerFunction<E> followerFunc, Function<E, T2> tokenFunc, NfaFactory<NFA, S, ? super T2> factory, Map<E, S> ele2state) { List<S> sfollower = Lists.newArrayList(); for (E follower : followerElements) { S fs = ele2state.get(follower); if (fs == null) { fs = factory.createState(nfa, tokenFunc.apply(follower)); ele2state.put(follower, fs); create(production, nfa, fs, followerFunc.getFollowers(follower), followerFunc, tokenFunc, factory, ele2state); } sfollower.add(fs); } factory.setFollowers(nfa, state, sfollower); }
public <E, T> Nfa<E> create(Production<E, T> production, FollowerFunction<E> ff, E start, E stop) { return create(production, ff, Functions.<E> identity(), new NFAFactory<E>(), start, stop); }
public <E, T> Nfa<E> create(Production<E, T> production, FollowerFunction<E> ff, E start, E stop) { return create(production, ff, Functions.<E> identity(), new NFAFactory<E>(), start, stop); }
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; }
protected Nfa<ProdElement> getParameterNfa(String syntax) { AssignedProduction prod = new AssignedProduction(syntax); FollowerFunctionImpl<ProdElement, String> ff = new FollowerFunctionImpl<ProdElement, String>(prod); ProdElement start = prod.new ProdElement(ElementType.TOKEN); ProdElement stop = prod.new ProdElement(ElementType.TOKEN); Nfa<ProdElement> result = new NfaUtil().create(prod, ff, start, stop); return result; }
public Nfa<ISemState> getNFA(EObject context, EClass type) { Pair<EObject, EClass> key = Tuples.create(context, type); Nfa<ISemState> nfa = resultCache.get(key); if (nfa != null) return nfa; NfaUtil util = new NfaUtil(); SynAbsorberNfaAdapter synNfa = new SynAbsorberNfaAdapter(pdaProvider.getPDA(context, type)); // System.out.println(new NfaFormatter().format(synNfa)); Map<ISynAbsorberState, Integer> distanceMap = util.distanceToFinalStateMap(synNfa); nfa = util.create(util.sort(synNfa, distanceMap), new SemStateFactory()); // util.sortInplace(nfa, distanceMap); if (type != null) initContentValidationNeeded(type, nfa); initRemainingFeatures(nfa.getStop(), util.inverse(nfa), Sets.<ISemState> newHashSet()); initOrderIDs(nfa); // System.out.println(new NfaFormatter().format(nfa)); resultCache.put(key, nfa); return nfa; }