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