C# 实现 DFA 文件读取和 NFA 文件生成功能
private void button5_Click(object sender, EventArgs e) { // 获取起始符和终结符 string startSymbol = listView1.Items[0].SubItems[0].Text; string endSymbols = ""; foreach (ListViewItem item in listView1.Items) { if (item.SubItems[1].Text != "#" ) { endSymbols += item.SubItems[1].Text + ";"; } } endSymbols = endSymbols.TrimEnd(';');
// 获取最大状态数和符号集
int maxStateNum = int.Parse(listView1.Items[listView1.Items.Count - 1].SubItems[2].Text);
string symbolSet = listView1.Items[0].SubItems[1].Text + ";" + listView1.Items[1].SubItems[1].Text;
// 生成 NFA 文件
using (StreamWriter sw = new StreamWriter("NFA.txt"))
{
sw.WriteLine("开始符:" + startSymbol + ";");
sw.WriteLine("终结符:" + endSymbols + ";");
sw.WriteLine("最大状态数:" + maxStateNum.ToString() + ";");
sw.WriteLine("符号集:" + symbolSet + ";");
foreach (ListViewItem item in listView1.Items)
{
sw.WriteLine(item.SubItems[0].Text + "\t" + item.SubItems[1].Text + "\t" + item.SubItems[2].Text);
}
}
}
private void button6_Click(object sender, EventArgs e) { // 读取 DFA 文件 string[] lines = File.ReadAllLines("DFA.txt"); string startSymbol = lines[0].Substring(lines[0].IndexOf(":") + 1).TrimEnd(';'); string[] endSymbols = lines[1].Substring(lines[1].IndexOf(":") + 1).Split(';'); int maxStateNum = int.Parse(lines[2].Substring(lines[2].IndexOf(":") + 1).TrimEnd(';')); string symbolSet = lines[3].Substring(lines[3].IndexOf(":") + 1).TrimEnd(';');
// 显示分析结果
listView2.Columns.Add("起始状态");
listView2.Columns.Add("接受符号");
listView2.Columns.Add("到达状态");
foreach (string symbol in symbolSet.Split(';'))
{
listView2.Columns.Add(symbol);
}
for (int i = 4; i < lines.Length; i++)
{
string[] parts = lines[i].Split('\t');
ListViewItem item = new ListViewItem(parts[0]);
item.SubItems.Add(parts[1]);
item.SubItems.Add(parts[2]);
for (int j = 0; j < symbolSet.Split(';').Length; j++)
{
item.SubItems.Add(parts[j + 3]);
}
listView2.Items.Add(item);
}
}
原文地址: https://www.cveoy.top/t/topic/nsfE 著作权归作者所有。请勿转载和采集!