示例#1
0
        public static SortedSet <T> FindToStates <T>(ref SortedSet <T> toStates, Automaat <T> ndfa, T state, char symbol) where T : IComparable
        {
            var transitions = ndfa.GetTransitions(state, symbol);

            foreach (var trans in transitions)
            {
                if (trans.IsEpsilonTransition())
                {
                    if (symbol == Transition <T> .Epsilon)
                    {
                        toStates.Add(trans.ToState);
                        FindToStates(ref toStates, ndfa, trans.ToState, Transition <T> .Epsilon);
                    }
                    else
                    {
                        FindToStates(ref toStates, ndfa, trans.ToState, symbol);
                    }
                }
                else
                {
                    toStates.Add(trans.ToState);
                    FindToStates(ref toStates, ndfa, trans.ToState, Transition <T> .Epsilon);
                }
            }
            return(toStates);
        }
示例#2
0
        private static void FindNextState(ref Automaat <State> a, ref int counter, Automaat <T> a1, Automaat <T> a2, State s)
        {
            foreach (var c in a.GetAlphabet())
            {
                var a1State      = a1.GetTransitions(s.StateAutomaat1, c).First().ToState;
                var a2State      = a2.GetTransitions(s.StateAutomaat2, c).First().ToState;
                var newState     = default(State);
                var stateExsists = false;

                foreach (var state in a._states)
                {
                    if (!state.HaseSameStates(a1State, a2State))
                    {
                        continue;
                    }
                    newState     = state;
                    stateExsists = true;
                    break;
                }

                if (!stateExsists)
                {
                    newState = new State(++counter, a1State, a2State);
                    a.AddTransition(new Transition <State>(s, c, newState));
                    FindNextState(ref a, ref counter, a1, a2, newState);
                }
                else
                {
                    a.AddTransition(new Transition <State>(s, c, newState));
                }
            }
        }