示例#1
0
        public Automaton ConvertToDFA()
        {
            List <State>      NewListStates      = new List <State>();
            List <Transition> NewListTransitions = new List <Transition>();
            State             Sink = new State("Sink");

            foreach (State s in ListStates)
            {
                s.GetReachableState(ListAlphabets, ListTransitions);
            }
            if (ListTransitions.Exists(x => x.GetLeftState().IsInitial&& x.GetSymbol().Label == "_"))
            {
                return(ConvertToDFAWithEpsilonMove(NewListStates, NewListTransitions, Sink));
            }
            else
            {
                return(ConvertToDFAWithoutEpsilonMove(NewListStates, NewListTransitions, Sink));
            }
        }
示例#2
0
 private bool isDFA()
 {
     if (ListTransitions.Exists(x => x.GetSymbol().Label == "_"))
     {
         return(false);
     }
     foreach (Alphabet alp in ListAlphabets)
     {
         List <Transition> list_transitions_contain_alp = ListTransitions.FindAll(x => x.GetSymbol().Label == alp.Character);
         List <State>      list_states = new List <State>();
         foreach (Transition trans in list_transitions_contain_alp)
         {
             list_states.Add(trans.GetLeftState());
         }
         bool are_2lists_equal = (list_states.All(ListStates.Contains) && list_states.Count == ListStates.Count);
         if (!are_2lists_equal)
         {
             return(false);
         }
     }
     return(true);
 }