private void button8_Click(object sender, EventArgs e) { try { //创建文件流,将DFA写入文件 FileStream fs = new FileStream('DFA.txt', FileMode.Create); StreamWriter sw = new StreamWriter(fs);

    //写入开始符
    sw.WriteLine('开始符:' + startState + ';');

    //写入终结符
    string endStatesStr = '';
    foreach (int state in endStates)
    {
        endStatesStr += state + ';';
    }
    sw.WriteLine('终结符:' + endStatesStr);

    //写入最大状态数和符号集
    sw.WriteLine('最大状态数:' + maxStateNum);
    string symbolsStr = '';
    foreach (char symbol in symbols)
    {
        symbolsStr += symbol + ';';
    }
    sw.WriteLine('符号集:' + symbolsStr);

    //写入状态转移表
    for (int i = 0; i < maxStateNum; i++)
    {
        for (int j = 0; j < symbols.Length; j++)
        {
            int nextState = transitionTable[i, j];
            if (nextState != -1)
            {
                sw.WriteLine(i + '	' + symbols[j] + '	' + nextState);
            }
        }
    }

    sw.Close();
    fs.Close();

    MessageBox.Show('DFA文件保存成功!');
}
catch (Exception ex)
{
    MessageBox.Show('DFA文件保存失败:' + ex.Message);    
}

}

private void button6_Click(object sender, EventArgs e) { try { //读取DFA文件 FileStream fs = new FileStream('DFA.txt', FileMode.Open); StreamReader sr = new StreamReader(fs);

    //读取开始符
    string startStateLine = sr.ReadLine();
    startState = int.Parse(startStateLine.Split(':')[1].TrimEnd(';'));

    //读取终结符
    string endStatesLine = sr.ReadLine();
    string[] endStatesArr = endStatesLine.Split(':')[1].Split(';');
    endStates = new List<int>();
    foreach (string stateStr in endStatesArr)
    {
        if (!string.IsNullOrEmpty(stateStr))
        {
            endStates.Add(int.Parse(stateStr));
        }
    }

    //读取最大状态数和符号集
    string maxStateNumLine = sr.ReadLine();
    maxStateNum = int.Parse(maxStateNumLine.Split(':')[1]);
    string symbolsLine = sr.ReadLine();
    symbols = symbolsLine.Split(':')[1].TrimEnd(';').ToCharArray();

    //初始化状态转移表
    transitionTable = new int[maxStateNum, symbols.Length];
    for (int i = 0; i < maxStateNum; i++)
    {
        for (int j = 0; j < symbols.Length; j++)
        {
            transitionTable[i, j] = -1;
        }
    }

    //读取状态转移表
    string transitionLine;
    while ((transitionLine = sr.ReadLine()) != null)
    {
        string[] transitionArr = transitionLine.Split('	');
        int currentState = int.Parse(transitionArr[0]);
        char symbol = char.Parse(transitionArr[1]);
        int nextState = int.Parse(transitionArr[2]);
        int symbolIndex = Array.IndexOf(symbols, symbol);
        transitionTable[currentState, symbolIndex] = nextState;
    }

    sr.Close();
    fs.Close();

    //显示分析结果
    listView2.Clear();
    listView2.Columns.Add('起始状态');
    listView2.Columns.Add('接受符号');
    listView2.Columns.Add('到达状态');
    for (int i = 0; i < maxStateNum; i++)
    {
        for (int j = 0; j < symbols.Length; j++)
        {
            int nextState = transitionTable[i, j];
            if (nextState != -1)
            {
                string[] itemArr = { i.ToString(), symbols[j].ToString(), nextState.ToString() };
                listView2.Items.Add(new ListViewItem(itemArr));
            }
        }
    }
}
catch (Exception ex)
{
    MessageBox.Show('DFA文件读取失败:' + ex.Message);    
}

}


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

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