Example #1
0
            public DFA(State initState, List <string> alphabets)
            {
                dFAStates    = new List <DFAState>();
                initialState = new DFAState(alphabets);
                initialState.states.Add(initState);
                dFAStates.Add(initialState);
                tState = new DFAState(alphabets);
                State t = new State("gt");

                tState.add(t);
                foreach (string alpha in alphabets)
                {
                    tState.transitions.Add(new DFATransition(tState, alpha));
                }
                tState.isChecked = true;
                dFAStates.Add(tState);
            }
Example #2
0
            //This method Convetrs The NFA to a DFA
            public void NtoD(DFAState state, DFA dFA)
            {
                for (int i = 0; i < state.states.Count; i++)
                {
                    for (int j = 0; j < state.states[i].transitions.Count; j++)
                    {
                        if (state.states[i].transitions[j].input == "")
                        {
                            if (!state.isExist(state.states[i].transitions[j].Goto))
                            {
                                state.states.Add(state.states[i].transitions[j].Goto);
                            }
                        }
                    }
                }


                foreach (string str in alphabets)
                {
                    if (str != "")
                    {
                        bool     backtoT     = true;
                        DFAState newDfAState = new DFAState(alphabets);
                        foreach (State s in state.states)
                        {
                            foreach (nfaTransition nt in s.transitions)
                            {
                                if (nt.input == str)
                                {
                                    backtoT = false;
                                    if (!newDfAState.isExist(nt.Goto))
                                    {
                                        newDfAState.add(nt.Goto);
                                    }
                                }
                            }
                        }
                        for (int i = 0; i < newDfAState.states.Count; i++)
                        {
                            for (int j = 0; j < newDfAState.states[i].transitions.Count; j++)
                            {
                                if (newDfAState.states[i].transitions[j].input == "")
                                {
                                    if (!newDfAState.isExist(newDfAState.states[i].transitions[j].Goto))
                                    {
                                        newDfAState.states.Add(newDfAState.states[i].transitions[j].Goto);
                                    }
                                }
                            }
                        }
                        if (backtoT)
                        {
                            state.transitions.Add(new DFATransition(dFA.tState, str));
                        }
                        else
                        {
                            if (dFA.isExist(newDfAState) == null)
                            {
                                dFA.dFAStates.Add(newDfAState);
                                state.transitions.Add(new DFATransition(newDfAState, str));
                                NtoD(newDfAState, dFA);
                            }
                            else
                            {
                                state.transitions.Add(new DFATransition(dFA.isExist(newDfAState), str));
                            }
                        }
                    }
                }
            }