Example #1
0
        private Automaton ConvertToDFAWithEpsilonMove(List <State> states, List <Transition> transitions, State Sink)
        {
            List <State> initialStatesUsedEpsilon = new List <State>();

            ListTransitions.FindAll(x => x.GetLeftState().IsInitial&& x.GetSymbol().Label == "_").ForEach(x => initialStatesUsedEpsilon.Add(x.GetLeftState()));
            foreach (var ini_eps in initialStatesUsedEpsilon)
            {
                List <Transition> processedtransitions       = new List <Transition>();
                List <State>      epsilon_closure_of_ini_eps = ini_eps.GetEpsilonClosure(ListTransitions, processedtransitions);
                State             newini = new State($"{String.Join("", epsilon_closure_of_ini_eps)}");
                newini.IsInitial = true;
                if (epsilon_closure_of_ini_eps.Exists(x => x.IsFinal))
                {
                    newini.IsFinal = true;
                }
                states.Add(newini);
                ProcessDFA(epsilon_closure_of_ini_eps, states, transitions, Sink, newini);
            }
            return(new Automaton(ListAlphabets, states, transitions, null, null));
        }
Example #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);
 }
Example #3
0
 private List <Transition> AvailableTransition(State current)
 {
     return(ListTransitions.FindAll(x => x.GetLeftState() == current));
 }