将下列文件中NFA转DFA功能在函数private void button7_Clickobject sender EventArgs e中实现using System;using SystemCollections;using SystemCollectionsGeneric;using SystemLinq;using SystemText;using SystemThreadingTasks
在button7_Click函数中实现NFA转DFA功能,具体实现步骤如下:
-
从界面上获取NFA的状态转移图和起始状态、终止状态集合等信息。
-
创建NFA对象,并通过NFA对象创建DFA对象。
-
获取DFA对象的状态转移图和其他信息,并在界面上显示。
具体代码如下:
private void button7_Click(object sender, EventArgs e) { // 从界面上获取NFA的状态转移图和起始状态、终止状态集合等信息 List<List<Tuple<int, char>>> graph = new List<List<Tuple<int, char>>>(); int stateNum = int.Parse(textBox1.Text); for (int i = 0; i < stateNum; i++) { string[] strs = dataGridView1.Rows[i].Cells[1].Value.ToString().Split(','); List<Tuple<int, char>> list = new List<Tuple<int, char>>(); for (int j = 0; j < strs.Length; j++) { if (strs[j].Length == 1) { list.Add(Tuple.Create(i, strs[j][0])); } else if (strs[j].Length == 2) { list.Add(Tuple.Create(i, '#')); } else if (strs[j].Length == 3) { list.Add(Tuple.Create(int.Parse(strs[j][1].ToString()), strs[j][2])); } } graph.Add(list); } Tuple<int, int> se = Tuple.Create(int.Parse(textBox2.Text), int.Parse(textBox3.Text));
// 创建NFA对象,并通过NFA对象创建DFA对象
NFA nfa = new NFA(stateNum, se.Item1, new List<int> { se.Item2 }, graph);
NFA_DFA nfa_dfa = new NFA_DFA(nfa);
DFA dfa = nfa_dfa.get_dfa();
// 获取DFA对象的状态转移图和其他信息,并在界面上显示
dataGridView2.Rows.Clear();
dataGridView2.Columns.Clear();
dataGridView2.Columns.Add("state", "状态");
foreach (var c in dfa.get_alphabet())
{
dataGridView2.Columns.Add(c.ToString(), c.ToString());
}
dataGridView2.Columns.Add("final", "终止状态");
foreach (var state in dfa.get_graph())
{
List<string> row = new List<string>();
row.Add((state.IndexOf(state) + 1).ToString());
foreach (var c in dfa.get_alphabet())
{
var nextState = state.Find(t => t.Item2 == c);
if (nextState != null)
{
row.Add((nextState.Item1 + 1).ToString());
}
else
{
row.Add("-");
}
}
row.Add(dfa.get_finalStates().Contains(state.IndexOf(state)) ? "√" : "");
dataGridView2.Rows.Add(row.ToArray());
}
原文地址: https://www.cveoy.top/t/topic/c2S0 著作权归作者所有。请勿转载和采集!