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);
        }