private void button6_Click(object sender, EventArgs e)
{
    // 获取所有终结符和非终结符
    terminals = new List<string>();
    nonterminals = new List<string>();
    foreach (var item in production)
    {
        if (!nonterminals.Contains(item.Key))
            nonterminals.Add(item.Key);
        foreach (var prod in item.Value)
        {
            foreach (var s in prod)
            {
                if (IsTerminal(s) && !terminals.Contains(s.ToString()))
                    terminals.Add(s.ToString());
                else if (!IsTerminal(s) && !nonterminals.Contains(s.ToString()))
                    nonterminals.Add(s.ToString());
            }
        }
    }
    terminals.Add("#");

    // 初始化预测分析表
    table = new Dictionary<string, Dictionary<string, string>>();
    foreach (var nonterm in nonterminals)
    {
        table.Add(nonterm, new Dictionary<string, string>());
        foreach (var term in terminals)
        {
            table[nonterm].Add(term, "");
        }
    }

    // 填充预测分析表
    GetSelect(production, firsts, follows);
    
    
    // 输出预测分析表到 listView3 中
    listView3.Columns.Clear();
    listView3.Items.Clear();
    listView3.View = View.Details;

    // 添加第一列
    listView3.Columns.Add("", 40);

    // 添加终结符列
    foreach (var item in terminals)
    {
        listView3.Columns.Add(item, 40);
    }


    // 填充表格
    foreach (var nonterm in nonterminals)
    {
        ListViewItem item = new ListViewItem(nonterm);
        foreach (var term in terminals)
        {
            if (!string.IsNullOrEmpty(table[nonterm][term]))
                item.SubItems.Add("->" + table[nonterm][term]);
            else
                item.SubItems.Add("");
        }
        listView3.Items.Add(item);
    }
    
}

该代码示例将预测分析表中非空元素前面添加 "->",例如 "->+TB"、"->$"、"->TB" 等形式,使表格内容更加清晰易懂。

代码主要修改部分:

// 填充表格
foreach (var nonterm in nonterminals)
{
    ListViewItem item = new ListViewItem(nonterm);
    foreach (var term in terminals)
    {
        if (!string.IsNullOrEmpty(table[nonterm][term]))
            item.SubItems.Add("->" + table[nonterm][term]);
        else
            item.SubItems.Add("");
    }
    listView3.Items.Add(item);
}

在填充表格时,如果 table[nonterm][term] 不为空,则在前面加上 "->",方便用户识别非空元素。

通过添加 "->",可以使预测分析表更加清晰易读,提高用户体验。

C# 预测分析表填充优化 - 在非空元素前添加 "" title="C# 预测分析表填充优化 - 在非空元素前添加 "->"" loading="lazy">

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

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