补充代码:

判别LR0文法:

private void button2_Click(object sender, EventArgs e) { BuildLR0ItemSets(); // 构造LR0项目集

if (IsLR0Grammar())
{
    MessageBox.Show("这是一个LR0文法。");
    button4.Enabled = true;
    button5.Enabled = true;
    button6.Enabled = true;
}
else
{
    MessageBox.Show("这不是一个LR0文法。");
}

}

生成项目族信息:

private void button4_Click(object sender, EventArgs e) { listView1.Columns.Clear(); listView1.Items.Clear(); listView1.View = View.Details;

// 添加列名
listView1.Columns.Add("状态", 150);
listView1.Columns.Add("项目集信息", 300);

// 添加数据
for (int i = 0; i < itemSets.Count; i++)
{
    ListViewItem item = new ListViewItem(i.ToString());
    item.SubItems.Add(itemSets[i].ToString());
    listView1.Items.Add(item);
}

listView1.GridLines = true;

}

构造LR分析表:

private void button5_Click(object sender, EventArgs e) { BuildGotoTable(); // 构造GOTO表 BuildActionTable(); // 构造ACTION表

listView2.Columns.Clear();
listView2.Items.Clear();
listView2.View = View.Details;

// 添加列名
foreach (Symbol s in symbols)
{
    listView2.Columns.Add(s.ToString(), 80);
}

// 添加数据
for (int i = 0; i < itemSets.Count; i++)
{
    ListViewItem item = new ListViewItem(i.ToString());
    foreach (Symbol s in symbols)
    {
        if (s.IsTerminal)
        {
            if (actionTable.ContainsKey(new Tuple<int, Symbol>(i, s)))
            {
                item.SubItems.Add(actionTable[new Tuple<int, Symbol>(i, s)]);
            }
            else
            {
                item.SubItems.Add("");
            }
        }
        else
        {
            if (gotoTable.ContainsKey(new Tuple<int, Symbol>(i, s)))
            {
                item.SubItems.Add(gotoTable[new Tuple<int, Symbol>(i, s)].ToString());
            }
            else
            {
                item.SubItems.Add("");
            }
        }
    }
    listView2.Items.Add(item);
}

listView2.GridLines = true;
实现构造LR0项目集的函数如BuildLR0ItemSets函数。 private void BuildLR0ItemSets 获取所有终结符和非终结符 foreach Production p in productions if !symbolsContainsnew

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

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