Class NfaUtil
- java.lang.Object
-
- org.eclipse.xtext.util.formallang.NfaUtil
-
public class NfaUtil extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceNfaUtil.BacktrackHandler<S,RESULT>protected static classNfaUtil.BacktrackingItem<RESULT,S>protected static classNfaUtil.GetToken<E,T>static classNfaUtil.MappedComparator<S,COMPARABLE extends java.lang.Comparable<COMPARABLE>>static classNfaUtil.NFAFactory<S>static classNfaUtil.NFAImpl<S>
-
Constructor Summary
Constructors Constructor Description NfaUtil()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <S,RESULT>
java.util.List<RESULT>backtrack(Nfa<S> nfa, RESULT initial, NfaUtil.BacktrackHandler<S,RESULT> handler)<S,ITERABLE extends java.lang.Iterable<? extends S>>
booleancanReach(Nfa<S> nfa, com.google.common.base.Predicate<S> matcher)<S,ITERABLE extends java.lang.Iterable<? extends S>>
booleancanReach(Nfa<S> nfa, S state, com.google.common.base.Predicate<S> matcher)<S,ITERABLE extends java.lang.Iterable<? extends S>>
booleancanReachFinalState(Nfa<S> nfa, S state)<S> java.util.Set<S>collect(Nfa<S> nfa)protected <S> voidcollect(Nfa<S> nfa, S state, java.util.Set<S> visited)protected <S> voidcollectDistancesForm(Nfa<S> nfa, S from, int distance, java.util.Map<S,java.lang.Integer> distances, com.google.common.base.Predicate<S> matches)protected <S> voidcollectedInverseMap(Nfa<S> nfa, S state, java.util.Map<S,java.util.List<S>> inverseMap, java.util.Set<S> visited)protected <S> voidcollectFollowers(Nfa<S> nfa, S owner, java.util.Set<S> result, java.util.Set<S> visited, com.google.common.base.Predicate<S> filter)<SRCSTATE,DSTSTATE,P extends Nfa<DSTSTATE>>
Pcreate(Nfa<SRCSTATE> source, NfaFactory<P,DSTSTATE,SRCSTATE> factory)protected <SRCSTATE,DSTSTATE,P extends Nfa<DSTSTATE>>
DSTSTATEcreate(Nfa<SRCSTATE> source, P result, SRCSTATE src, NfaFactory<P,DSTSTATE,SRCSTATE> factory, java.util.Map<SRCSTATE,DSTSTATE> src2dst)<E,T>
Nfa<E>create(Production<E,T> production, FollowerFunction<E> ff, E start, E stop)<S,E,T,P extends Nfa<S>>
Pcreate(Production<E,T> production, FollowerFunction<E> ff, NfaFactory<P,S,? super T> factory)<S,E,T1,T2,P extends Nfa<S>>
Pcreate(Production<E,T1> production, FollowerFunction<E> ff, com.google.common.base.Function<E,T2> tokenFunc, NfaFactory<P,S,? super T2> factory, T2 start, T2 stop)protected <S,E,T1,T2,P extends Nfa<S>>
voidcreate(Production<E,T1> production, P nfa, S state, java.lang.Iterable<E> followerElements, FollowerFunction<E> followerFunc, com.google.common.base.Function<E,T2> tokenFunc, NfaFactory<P,S,? super T2> factory, java.util.Map<E,S> ele2state)<S> java.util.Map<S,java.lang.Integer>distanceFromStateMap(Nfa<S> nfa, com.google.common.base.Predicate<S> matches)<S> java.util.Map<S,java.lang.Integer>distanceToFinalStateMap(Nfa<S> nfa)<S> java.util.Map<S,java.lang.Integer>distanceToStateMap(Nfa<S> nfa, com.google.common.base.Predicate<S> matches)<S> booleanequalsIgnoreOrder(Nfa<S> nfa1, Nfa<S> nfa2)<S> booleanequalsIgnoreOrder(Nfa<S> nfa1, Nfa<S> nfa2, com.google.common.base.Function<S,? extends java.lang.Object> keyFunc)<S> booleanequalsIgnoreOrder(Nfa<S> nfa1, Nfa<S> nfa2, S s1, S s2, com.google.common.base.Function<S,? extends java.lang.Object> keyFunc, java.util.Set<S> visited)<S> Nfa<S>filter(Nfa<S> nfa, com.google.common.base.Predicate<S> filter)<S> java.util.Set<S>filterFollowers(Nfa<S> nfa, java.lang.Iterable<S> followers, com.google.common.base.Predicate<S> filter)<S> Sfind(Nfa<S> nfa, com.google.common.base.Predicate<S> matcher)<S,ITERABLE extends java.lang.Iterable<? extends S>>
Sfind(Nfa<S> nfa, java.lang.Iterable<S> starts, com.google.common.base.Predicate<S> matcher)protected <S> Sfind(Nfa<S> nfa, S state, com.google.common.base.Predicate<S> matcher, java.util.Set<S> visited)<S> java.util.Map<S,java.util.Set<S>>findCycles(Nfa<S> nfa)A cycle is represented by the set of all nodes on that cycle.<S> voidfindCycles(Nfa<S> nfa, IAcceptor<java.util.List<S>> cycleAcceptor)protected <S> voidfindCycles(Nfa<S> nfa, S node, IAcceptor<java.util.List<S>> cycleAcceptor, java.util.Map<S,java.lang.Integer> dfsMark, java.util.LinkedList<S> dfsStack)<S> java.util.Set<S>findFirst(Nfa<S> nfa, java.lang.Iterable<S> starts, com.google.common.base.Predicate<S> match)<S> inthashCodeIgnoreOrder(Nfa<S> nfa, com.google.common.base.Function<S,? extends java.lang.Object> keyFunc)returns the sum of all edge-hashes.<S> java.lang.StringidentityString(Nfa<S> nfa, com.google.common.base.Function<S,java.lang.String> idFunc)<S> Nfa<S>inverse(Nfa<S> nfa)<S> voidremoveOrphans(Nfa<S> nfa)<S extends java.lang.Comparable<S>>
Nfa<S>sort(Nfa<S> nfa)<S> Nfa<S>sort(Nfa<S> nfa, java.util.Comparator<S> comparator)<S,COMP extends java.lang.Comparable<COMP>>
Nfa<S>sort(Nfa<S> nfa, java.util.Map<S,COMP> comparator)
-
-
-
Method Detail
-
backtrack
public <S,RESULT> java.util.List<RESULT> backtrack(Nfa<S> nfa, RESULT initial, NfaUtil.BacktrackHandler<S,RESULT> handler)
-
canReach
public <S,ITERABLE extends java.lang.Iterable<? extends S>> boolean canReach(Nfa<S> nfa, com.google.common.base.Predicate<S> matcher)
-
canReach
public <S,ITERABLE extends java.lang.Iterable<? extends S>> boolean canReach(Nfa<S> nfa, S state, com.google.common.base.Predicate<S> matcher)
-
canReachFinalState
public <S,ITERABLE extends java.lang.Iterable<? extends S>> boolean canReachFinalState(Nfa<S> nfa, S state)
-
collect
public <S> java.util.Set<S> collect(Nfa<S> nfa)
-
collect
protected <S> void collect(Nfa<S> nfa, S state, java.util.Set<S> visited)
-
collectDistancesForm
protected <S> void collectDistancesForm(Nfa<S> nfa, S from, int distance, java.util.Map<S,java.lang.Integer> distances, com.google.common.base.Predicate<S> matches)
-
collectedInverseMap
protected <S> void collectedInverseMap(Nfa<S> nfa, S state, java.util.Map<S,java.util.List<S>> inverseMap, java.util.Set<S> visited)
-
collectFollowers
protected <S> void collectFollowers(Nfa<S> nfa, S owner, java.util.Set<S> result, java.util.Set<S> visited, com.google.common.base.Predicate<S> filter)
-
create
protected <SRCSTATE,DSTSTATE,P extends Nfa<DSTSTATE>> DSTSTATE create(Nfa<SRCSTATE> source, P result, SRCSTATE src, NfaFactory<P,DSTSTATE,SRCSTATE> factory, java.util.Map<SRCSTATE,DSTSTATE> src2dst)
-
create
public <SRCSTATE,DSTSTATE,P extends Nfa<DSTSTATE>> P create(Nfa<SRCSTATE> source, NfaFactory<P,DSTSTATE,SRCSTATE> factory)
-
create
public <E,T> Nfa<E> create(Production<E,T> production, FollowerFunction<E> ff, E start, E stop)
-
create
public <S,E,T,P extends Nfa<S>> P create(Production<E,T> production, FollowerFunction<E> ff, NfaFactory<P,S,? super T> factory)
-
create
public <S,E,T1,T2,P extends Nfa<S>> P create(Production<E,T1> production, FollowerFunction<E> ff, com.google.common.base.Function<E,T2> tokenFunc, NfaFactory<P,S,? super T2> factory, T2 start, T2 stop)
-
create
protected <S,E,T1,T2,P extends Nfa<S>> void create(Production<E,T1> production, P nfa, S state, java.lang.Iterable<E> followerElements, FollowerFunction<E> followerFunc, com.google.common.base.Function<E,T2> tokenFunc, NfaFactory<P,S,? super T2> factory, java.util.Map<E,S> ele2state)
-
distanceFromStateMap
public <S> java.util.Map<S,java.lang.Integer> distanceFromStateMap(Nfa<S> nfa, com.google.common.base.Predicate<S> matches)
-
distanceToFinalStateMap
public <S> java.util.Map<S,java.lang.Integer> distanceToFinalStateMap(Nfa<S> nfa)
-
distanceToStateMap
public <S> java.util.Map<S,java.lang.Integer> distanceToStateMap(Nfa<S> nfa, com.google.common.base.Predicate<S> matches)
-
hashCodeIgnoreOrder
public <S> int hashCodeIgnoreOrder(Nfa<S> nfa, com.google.common.base.Function<S,? extends java.lang.Object> keyFunc)
returns the sum of all edge-hashes. An edge-hash is computed as precedingStateKey.hashCode * (followingStateKey.hashCode + 1). Adding 1 ensures the direction of edges is considered. Disadvantage of this implementation: it calls keyFunc and key.hashCode twice on each state.
-
equalsIgnoreOrder
public <S> boolean equalsIgnoreOrder(Nfa<S> nfa1, Nfa<S> nfa2, com.google.common.base.Function<S,? extends java.lang.Object> keyFunc)
-
equalsIgnoreOrder
public <S> boolean equalsIgnoreOrder(Nfa<S> nfa1, Nfa<S> nfa2, S s1, S s2, com.google.common.base.Function<S,? extends java.lang.Object> keyFunc, java.util.Set<S> visited)
-
identityString
public <S> java.lang.String identityString(Nfa<S> nfa, com.google.common.base.Function<S,java.lang.String> idFunc)
-
filterFollowers
public <S> java.util.Set<S> filterFollowers(Nfa<S> nfa, java.lang.Iterable<S> followers, com.google.common.base.Predicate<S> filter)
-
find
public <S,ITERABLE extends java.lang.Iterable<? extends S>> S find(Nfa<S> nfa, java.lang.Iterable<S> starts, com.google.common.base.Predicate<S> matcher)
-
find
public <S> S find(Nfa<S> nfa, com.google.common.base.Predicate<S> matcher)
-
find
protected <S> S find(Nfa<S> nfa, S state, com.google.common.base.Predicate<S> matcher, java.util.Set<S> visited)
-
findFirst
public <S> java.util.Set<S> findFirst(Nfa<S> nfa, java.lang.Iterable<S> starts, com.google.common.base.Predicate<S> match)
-
removeOrphans
public <S> void removeOrphans(Nfa<S> nfa)
-
sort
public <S,COMP extends java.lang.Comparable<COMP>> Nfa<S> sort(Nfa<S> nfa, java.util.Map<S,COMP> comparator)
-
findCycles
public <S> java.util.Map<S,java.util.Set<S>> findCycles(Nfa<S> nfa)
A cycle is represented by the set of all nodes on that cycle. The return value maps each node that is on a cycle to the corresponding set. Multiple cycles that are connected via a node are treated as a single cycle.
-
-