构造和输出预测分析表的实现方法
private void button6_Click(object sender, EventArgs e)
{
//构造预测分析表
selects = new Dictionary<string, List
//输出预测分析表
listView3.Columns.Add("非终结符", 100, HorizontalAlignment.Center);
foreach (var t in terminals)
listView3.Columns.Add(t, 50, HorizontalAlignment.Center);
ListViewItem firstitem = new ListViewItem("FIRST");
firstitem.UseItemStyleForSubItems = false;
firstitem.BackColor = Color.LightSkyBlue;
listView3.Items.Add(firstitem);
ListViewItem followitem = new ListViewItem("FOLLOW");
followitem.UseItemStyleForSubItems = false;
followitem.BackColor = Color.LightSalmon;
listView3.Items.Add(followitem);
ListViewItem selectitem = new ListViewItem("SELECT");
selectitem.UseItemStyleForSubItems = false;
selectitem.BackColor = Color.LightGreen;
listView3.Items.Add(selectitem);
foreach (var item in production.Keys)
{
ListViewItem lvi = new ListViewItem(item);
for (int i = 1; i < listView3.Columns.Count; i++)
{
lvi.SubItems.Add("");
}
foreach (var prod in production[item])
{
foreach (var s in selects[item])
{
if (s.Equals("#"))
{
foreach (var fol in follows[item])
{
if (listView3.Columns.Contains(fol))
lvi.SubItems[listView3.Columns.IndexOfKey(fol)].Text = prod;
}
}
else
{
if (listView3.Columns.Contains(s))
lvi.SubItems[listView3.Columns.IndexOfKey(s)].Text = prod;
}
}
}
listView3.Items.Add(lvi);
}
for (int i = 0; i < listView3.Items.Count; i++)
{
for (int j = 1; j < listView3.Columns.Count; j++)
{
if (listView3.Items[i].SubItems[j].Text == "")
listView3.Items[i].SubItems[j].Text = "error";
}
}
}
原文地址: https://www.cveoy.top/t/topic/fXGb 著作权归作者所有。请勿转载和采集!