private void write_hang(int serial, List <int> state_stack, SymbolStack sysk, string css, string source_text, string shuoming) { ListViewItem lvi = new ListViewItem(); lvi.Text = serial.ToString(); //序列 string tmp_state = ""; for (int i = 0; i < state_stack.Count; i++) { tmp_state = tmp_state + state_stack[i].ToString() + " "; } lvi.SubItems.Add(tmp_state); lvi.SubItems.Add(sysk.sys_string()); lvi.SubItems.Add(css); lvi.SubItems.Add(source_text); lvi.SubItems.Add(shuoming); listView3.Items.Add(lvi); }
private void button6_Click(object sender, EventArgs e) { SymbolStack sysk = new SymbolStack(); List <int> state_stack = new List <int>(); listView3.Items.Clear(); string source_text = textBox2.Text.Trim() + '#'; Boolean jieshu = false; Boolean flag_wan = false; int serial = 0; int lie = 0; sysk.Push('#'); state_stack.Add(0); write_hang(serial, state_stack, sysk, "", source_text, "初始状态"); while (!(jieshu)) { serial++; string shuoming = ""; string css = ""; char shou_char = source_text[0]; for (int a = 0; a < char_form.Count; a++) { if (shou_char == char_form[a]) { lie = a; break; } } string ff = erwei[state_stack[state_stack.Count - 1]][lie]; if (ff == null) { flag_wan = true; break; } else if (ff[0] == 'S') { ff = ff.Remove(0, 1); state_stack.Add(Convert.ToInt16(ff)); sysk.Push(shou_char); source_text = source_text.Remove(0, 1); shuoming = ff + "移进状态栈" + shou_char.ToString() + "移进符号栈"; } else if (ff[0] == 'a') { shuoming = "接受"; jieshu = true; } else if (ff[0] == 'r') { ff = ff.Remove(0, 1); int ba = Convert.ToInt16(ff); int vtl = ItemC[ba].VT.Length; css = ItemC[ba].VN + "->" + ItemC[ba].VT; for (int ide = 0; ide < vtl; ide++) { sysk.Pop(); state_stack.RemoveAt(state_stack.Count - 1); } sysk.Push(ItemC[ba].VN); for (int a = 0; a < char_form.Count; a++) { if (ItemC[ba].VN == char_form[a]) { lie = a; break; } } state_stack.Add(Convert.ToInt16(erwei[state_stack[state_stack.Count - 1]][lie])); shuoming = "规约"; } else { flag_wan = true; break; //MessageBox.Show("分析失败,不是该文法的句子!"); } write_hang(serial, state_stack, sysk, css, source_text, shuoming); } if (flag_wan) { MessageBox.Show("分析失败,不是该文法的句子!"); } }