private void button2_Click(object sender, EventArgs e)
        {
            // 获取所有的符号集合
            List<string> symbols = new List<string>();
            foreach (var item in production.Keys)
            {
                if (!symbols.Contains(item))
                    symbols.Add(item);
                foreach (var prod in production[item])
                {
                    foreach (var c in prod)
                    {
                        if (!symbols.Contains(c.ToString()))
                            symbols.Add(c.ToString());
                    }
                }
            }
            // 将符号集合按照终结符和非终结符分开
            nonterminals = new List<string>();
            terminals = new List<string>();
            foreach (var s in symbols)
            {
                if (char.IsUpper(s[0]))
                    nonterminals.Add(s);
                else
                    terminals.Add(s);
            }
            listView2.Columns.Clear();
            listView2.Items.Clear();
            listView2.View = View.Details;

            // 添加第一列
            listView2.Columns.Add('', 30);

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

            // 添加非终结符行
            foreach (var item in nonterminals)
            {
                ListViewItem lvi = new ListViewItem(item);
                lvi.SubItems.Add('');
                foreach (var t in terminals)
                {
                    lvi.SubItems.Add('');
                }
                listView2.Items.Add(lvi);
            }

            // 填充表格
            foreach (var item in follows)
            {
                int row = nonterminals.IndexOf(item.Key);
                foreach (var t in terminals)
                {
                    int col = terminals.IndexOf(t);
                    if (!item.Value.Contains(t))
                        listView2.Items[row].SubItems[col + 1].Text = '0';
                    else
                        listView2.Items[row].SubItems[col + 1].Text = '1';
                }
            }
        }
C#实现语法分析:构建LL(1)分析表的Follow集可视化

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

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