private void button8_Click(object sender, EventArgs e) { // 获取DFA的开始符和终结符 string startSymbol = listView1.Items[0].SubItems[0].Text; string endSymbols = ""; for(int i = 0; i < listView1.Items[1].SubItems.Count; i++) { endSymbols += listView1.Items[1].SubItems[i].Text; if(i != listView1.Items[1].SubItems.Count - 1) { endSymbols += ";"; } }

// 获取DFA的最大状态数和符号集
int maxStateNum = int.Parse(listView2.Items[2].SubItems[0].Text);
string symbolSet = listView2.Items[3].SubItems[0].Text;

// 将DFA的转移表写入文件
using (StreamWriter sw = new StreamWriter("DFA.txt"))
{
    // 写入开始符和终结符
    sw.WriteLine("开始符:" + startSymbol + ";");
    sw.WriteLine("终结符:" + endSymbols + ";");

    // 写入最大状态数和符号集
    sw.WriteLine("最大状态数:" + maxStateNum);
    sw.WriteLine("符号集:" + symbolSet + ";");

    // 写入转移表
    for (int i = 0; i < listView2.Items.Count; i++)
    {
        string startState = listView2.Items[i].SubItems[0].Text;
        string symbol = listView2.Items[i].SubItems[1].Text;
        string nextState = listView2.Items[i].SubItems[2].Text;
        sw.WriteLine(startState + "\t" + symbol + "\t" + nextState);
    }
}

MessageBox.Show("文件保存成功!");

}

private void button6_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "DFA文件|*.txt"; openFileDialog.Title = "打开DFA文件"; if (openFileDialog.ShowDialog() == DialogResult.OK) { // 读取文件内容 string[] lines = File.ReadAllLines(openFileDialog.FileName);

    // 获取开始符和终结符
    string startSymbol = lines[0].Substring(lines[0].IndexOf(":") + 1, lines[0].Length - lines[0].IndexOf(":") - 2);
    string[] endSymbols = lines[1].Substring(lines[1].IndexOf(":") + 1, lines[1].Length - lines[1].IndexOf(":") - 2).Split(';');

    // 获取最大状态数和符号集
    int maxStateNum = int.Parse(lines[2].Substring(lines[2].IndexOf(":") + 1));
    string symbolSet = lines[3].Substring(lines[3].IndexOf(":") + 1, lines[3].Length - lines[3].IndexOf(":") - 2);

    // 清空listView2容器
    listView2.Items.Clear();

    // 添加起始状态、接受符号、到达状态三列
    listView2.Columns.Add("起始状态", 100, HorizontalAlignment.Center);
    listView2.Columns.Add("接受符号", 100, HorizontalAlignment.Center);
    listView2.Columns.Add("到达状态", 100, HorizontalAlignment.Center);

    // 添加转移表内容
    for (int i = 4; i < lines.Length; i++)
    {
        string[] line = lines[i].Split('\t');
        ListViewItem item = new ListViewItem(line[0]);
        item.SubItems.Add(line[1]);
        item.SubItems.Add(line[2]);
        listView2.Items.Add(item);
    }

    MessageBox.Show("文件读取成功!");
}

}

C# 使用DFA文件实现状态机:保存和读取DFA文件

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

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