LR 语法分析表展示:WinForms C# 代码示例
代码1是一个WinForms窗体中的事件处理方法,当点击按钮5时会触发该方法,方法中的代码实现了LR语法分析表的展示功能。
private void button5_Click(object sender, EventArgs e)
{
listView2.Clear();
LR.Table[][] table;
table = lr.GET_ANA();
int xlen = table.GetLength(0);
int ylen = table[1].Length;
listView2.Columns.Clear();
listView2.Items.Clear();
listView2.View = View.Details;
listView2.Columns.Add(" ");
for (int i = 0; i < lr.Echar.Count; i++)//添加表头
{
string text = lr.Echar[i].ToString();
listView2.Columns.Add(text, 58);
}
for (int i = 0; i < lr.Nchar.Count; i++)//添加表头
{
string text = lr.Nchar[i].ToString();
listView2.Columns.Add(text, 58);
}
for (int i = 0; i < xlen; i++)
{
ListViewItem li = new ListViewItem(i.ToString());
for (int j = 0; j < ylen; j++)
{
string st = "";
if (table[i][j].error)
st = "-";
else if (table[i][j].type == 'A')
st = "AC";
else
st = table[i][j].type.ToString() + table[i][j].id.ToString();
li.SubItems.Add(st);
}
listView2.Items.Add(li);
}
listView2.GridLines = true;
}
代码2是一个公共方法,返回LR语法分析表的二维数组,其中LRAna[i][j]代表语法分析表中第i行第j列的内容。
public Table[][] GET_ANA()
{
LRAnaly();
RStr_ANA += "\r\nLR0分析表:\r\n ";
int i;
for (i = 0; i < Echar.Count; i++)
{
RStr_ANA += Echar[i].ToString() + " ";
}
for (i = 0; i < Nchar.Count; i++)
{
RStr_ANA += Nchar[i].ToString() + " ";
}
RStr_ANA += "\r\n";
for (i = 0; i < proitemset.Count; i++)
{
RStr_ANA += i.ToString() + " ";
for (int j = 0; j < Echar.Count + Nchar.Count; j++)
{
if (LRAna[i][j].error)
{
RStr_ANA += " " + " ";
}
else if (i == 1 && j == Echar.Count - 1)
{
RStr_ANA += "AC" + " ";
}
else if (LRAna[i][j].type != 'N')
{
RStr_ANA += LRAna[i][j].type.ToString() + LRAna[i][j].id.ToString() + " ";
}
else
RStr_ANA += LRAna[i][j].id.ToString() + " ";
}
RStr_ANA += "\r\n";
}
return LRAna;
}
具体原理步骤如下:
- LR语法分析表的生成需要先进行LR语法分析,得到LR分析表中的项目集、状态转移和动作表等信息。
- 代码2中的LRAnaly()方法实现了LR语法分析,并生成了LR分析表中的项目集、状态转移和动作表等信息。
- GET_ANA()方法调用LRAnaly()方法,然后将LR分析表中的信息转化为一个二维数组LRAna。
- 代码1中的button5_Click方法通过调用GET_ANA()方法,获取LRAna数组,并将其展示在一个ListView控件中。
- 在展示过程中,先清空ListView控件中的内容,然后根据LR分析表中的终结符和非终结符信息,动态添加表头。
- 然后遍历LRAna数组,将数组中的内容逐个添加到ListView控件的Item和SubItem中,最终完成LR语法分析表的展示。
上述代码示例展示了如何使用C# WinForms代码生成和展示LR语法分析表。通过这些代码,你可以更好地理解LR分析器的实现原理,并能够将LR分析器应用到你的项目中。
原文地址: https://www.cveoy.top/t/topic/oIet 著作权归作者所有。请勿转载和采集!