private void button2_Click(object sender, EventArgs e) { string[] lines = richTextBox1.Lines; List nonTerminals = new List(); List terminals = new List(); List productions = new List(); foreach (string line in lines) { if (line.Contains("->")) { productions.Add(line); string[] parts = line.Split(new string[] { "->" }, StringSplitOptions.RemoveEmptyEntries); string left = parts[0].Trim(); if (!nonTerminals.Contains(left)) { nonTerminals.Add(left); } string[] right = parts[1].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (string symbol in right) { if (!nonTerminals.Contains(symbol) && !terminals.Contains(symbol)) { terminals.Add(symbol); } } } } LR0Parser parser = new LR0Parser(nonTerminals, terminals, productions); if (parser.IsLR0Grammar()) { MessageBox.Show("This is a LR0 grammar."); } else { MessageBox.Show("This is not a LR0 grammar."); } }

private void button4_Click(object sender, EventArgs e) { string[] lines = richTextBox1.Lines; List nonTerminals = new List(); List terminals = new List(); List productions = new List(); foreach (string line in lines) { if (line.Contains("->")) { productions.Add(line); string[] parts = line.Split(new string[] { "->" }, StringSplitOptions.RemoveEmptyEntries); string left = parts[0].Trim(); if (!nonTerminals.Contains(left)) { nonTerminals.Add(left); } string[] right = parts[1].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (string symbol in right) { if (!nonTerminals.Contains(symbol) && !terminals.Contains(symbol)) { terminals.Add(symbol); } } } } LR0Parser parser = new LR0Parser(nonTerminals, terminals, productions); List itemSets = parser.GetItemSets(); dataGridView1.Rows.Clear(); foreach (LR0ItemSet itemSet in itemSets) { dataGridView1.Rows.Add(itemSet.State, itemSet.ToString()); } }

private void button5_Click(object sender, EventArgs e) { string[] lines = richTextBox1.Lines; List nonTerminals = new List(); List terminals = new List(); List productions = new List(); foreach (string line in lines) { if (line.Contains("->")) { productions.Add(line); string[] parts = line.Split(new string[] { "->" }, StringSplitOptions.RemoveEmptyEntries); string left = parts[0].Trim(); if (!nonTerminals.Contains(left)) { nonTerminals.Add(left); } string[] right = parts[1].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (string symbol in right) { if (!nonTerminals.Contains(symbol) && !terminals.Contains(symbol)) { terminals.Add(symbol); } } } } LR0Parser parser = new LR0Parser(nonTerminals, terminals, productions); List itemSets = parser.GetItemSets(); LR0Automaton automaton = new LR0Automaton(itemSets); List symbols = new List(); symbols.AddRange(terminals); symbols.AddRange(nonTerminals); symbols.Add("$"); dataGridView2.Rows.Clear(); foreach (string symbol in symbols) { dataGridView2.Columns.Add(symbol, symbol); } for (int i = 0; i < automaton.States.Count; i++) { dataGridView2.Rows.Add(); dataGridView2.Rows[i].HeaderCell.Value = i.ToString(); for (int j = 0; j < symbols.Count; j++) { string action = automaton.GetAction(i, symbols[j]); int gotoState = automaton.GetGoto(i, symbols[j]); if (action != null) { dataGridView2.Rows[i].Cells[j].Value = action + gotoState.ToString(); } } } }


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

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