C# LL(1) 语法分析器实现 - 句子分析
{ 'title': 'C# LL(1) 语法分析器实现 - 句子分析', 'description': '本文介绍了使用 C# 实现 LL(1) 语法分析器的代码,并提供了对句子进行分析的功能,包括单步分析和一键显示分析信息。', 'keywords': 'LL(1), 语法分析器, C#, 句子分析, 预测分析表', 'content': 'private void button7_Click(object sender, EventArgs e) { string text = textBox1.Text; Select select = new Select(productions); analyse_sentence analyse = new analyse_sentence(text, select); listView4.Items.Clear(); for(int i=0; i<analyse.result_parse.Count; i++) { ListViewItem item = new ListViewItem(new string[] { i.ToString(), analyse.result_analys[i], analyse.result_input[i], analyse.result_parse[i] }); listView4.Items.Add(item); } }
private void button8_Click(object sender, EventArgs e) { if (listView4.Items.Count > 0) { int index = listView4.SelectedItems[0].Index; if (index > 0) { index--; listView4.Items[index].Selected = true; listView4.Select(); } } }
private void button9_Click(object sender, EventArgs e) { foreach (ListViewItem item in listView4.Items) { item.Selected = true; } listView4.Select(); }
private void analyze() { // 获取文法中的非终结符集合 var nonterminals = productions.Keys;
// 构造 FIRST 集和 FOLLOW 集
Dictionary<string, List<string>> firsts = new Dictionary<string, List<string>>();
Dictionary<string, List<string>> follows = new Dictionary<string, List<string>>();
foreach (var nonterm in nonterminals)
{
GetFirst(nonterm, productions, firsts);
GetFollow(nonterm, productions, firsts, follows);
}
// 判断该文法是否是 LL(1) 文法
if (!JudgeLL1(productions, firsts, follows))
{
MessageBox.Show('该文法不是 LL(1) 文法!');
return;
}
// 构造预测分析表
GetSelect(productions, firsts, follows);
// 对输入字符串进行分析
Analyse();
}
原文地址: https://www.cveoy.top/t/topic/oBNs 著作权归作者所有。请勿转载和采集!