private static void RecurGetReachableTransitionsInternal <T>(IRegexFSMTransition <T> transition, HashSet <IRegexFSMTransition <T> > transitions) { foreach (var t in transition.Target.Transitions) { if (transitions.Add(t) && t is IEpsilonTransition) { RegexFSMUtility.RecurGetReachableTransitionsInternal(transition, transitions); } } }
/// <summary> /// 递归获取指定转换开始无须接受输入就能经到的所有转换的集合。 /// </summary> /// <param name="transition">指定的转换。</param> /// <returns>指定转换开始无须接受输入就能经到的所有转换的集合。</returns> /// <exception cref="ArgumentNullException"><paramref name="transition"/> 的值为 null 。</exception> public static IEnumerable <IRegexFSMTransition <T> > RecurGetReachableTransitions <T>(this IRegexFSMTransition <T> transition) { if (transition == null) { throw new ArgumentNullException(nameof(transition)); } HashSet <IRegexFSMTransition <T> > transitions = new HashSet <IRegexFSMTransition <T> >(); RegexFSMUtility.RecurGetReachableTransitionsInternal(transition, transitions); return(transitions); }