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

}

C# 实现 DFA 文件读取和 NFA 文件生成功能

原文地址: https://www.cveoy.top/t/topic/nsfE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录