VS使用C#语言实现正规式到NFA到DFA再到MFA的过程其中listView1中是读入的只有起始状态、接受符号、到达状态三列的NFA文件并在label3中显示初始状态集label4中显示终止状态集现在需要实现private void button7_Clickobject sender EventArgs e使用子集构造算法使得在lisview2中生成只有起始状态、接受符号、到达状态三列的DFA
private void button7_Click(object sender, EventArgs e) { // 获取NFA文件中的起始状态、接受符号、到达状态 List<string[]> nfaList = new List<string[]>(); for (int i = 0; i < listView1.Items.Count; i++) { string[] row = new string[3]; row[0] = listView1.Items[i].SubItems[0].Text; row[1] = listView1.Items[i].SubItems[1].Text; row[2] = listView1.Items[i].SubItems[2].Text; nfaList.Add(row); }
// 构造NFA对象
NFA nfa = new NFA(nfaList);
// 使用子集构造算法生成DFA文件
DFA dfa = nfa.ToDFA();
// 在listView2中显示DFA文件
listView2.Items.Clear();
foreach (string state in dfa.States)
{
foreach (string symbol in dfa.Symbols)
{
string[] row = new string[3];
row[0] = state;
row[1] = symbol;
row[2] = string.Join(",", dfa.GetNextState(state, symbol));
listView2.Items.Add(new ListViewItem(row));
}
}
// 在label5中显示初始状态集
label5.Text = string.Join(",", dfa.StartState);
// 在label7中显示终止状态集
label7.Text = string.Join(",", dfa.AcceptStates);
原文地址: https://www.cveoy.top/t/topic/cZqE 著作权归作者所有。请勿转载和采集!