public TableItem GetAction(TableIndex i) { if (this.dic.ContainsKey(i)) { return this.dic[i]; } else { throw new Exception("查询分析表结果为ERROR"); } }
public void add(TableIndex i, TableItem a) { if (dic.ContainsKey(i)) { if (dic[i].Equals(a)) return; else throw new Exception("写入分析表冲突,该文法不是LR(1)文法"); } else { dic.Add(i, a); } }
private void BindTableView() { TableView.GridLines = true; TableView.View = View.Details; TableView.Clear(); TableView.Columns.Add("状态", 40); for (int i = 0; i < Analysis.Va.Count; ++i) { TableView.Columns.Add(Analysis.Va[i].ToString(), 30); } for (int i = 0; i < Analysis.Vg.Count; ++i) { TableView.Columns.Add(Analysis.Vg[i].ToString(), 30); } int c = TableView.Columns.Count; for (int i = 0; i < Analysis._ItemSetMap.Count; ++i) { List<String> a = new List<string>(); a.Add(i.ToString()); for (int k = 0; k < Analysis.Va.Count; ++k) { char ch=Analysis.Va[k]; TableIndex index = new TableIndex(i, ch); if (Analysis.Table.dic.ContainsKey(index)) { TableItem item = Analysis.Table.dic[index]; if (item.ActionType == 'A') { a.Add("acc"); } else { a.Add(item.ActionType.ToString() + item.Detail.ToString()); } } else { a.Add("."); } } for (int k = 0; k < Analysis.Vg.Count; ++k) { char ch = Analysis.Vg[k]; TableIndex index = new TableIndex(i, ch); if (Analysis.Table.dic.ContainsKey(index)) { TableItem item = Analysis.Table.dic[index]; if (item.ActionType == 'A') { a.Add("acc"); } else { a.Add(item.ActionType.ToString() + item.Detail.ToString()); } } else { a.Add("."); } } ListViewItem listViewItem = new ListViewItem(a.ToArray()); TableView.Items.Add(listViewItem); } }
private void Finished(int status, Item item) { TableIndex index = new TableIndex(status, item.Symbol); if (item.Production.Right == string.Empty) { Production pro = item.Production; pro.Right = System.Configuration.ConfigurationManager.AppSettings["Empty"][0].ToString(); int i; for (i = 0; i < CFG.ProductionsMap.Count; i++) { if (CFG.ProductionsMap.Keys.ElementAt(i).Equals(pro)) { break; } } Table.add(index, new TableItem('R', CFG.ProductionsMap.Values.ElementAt(i))); } else if (item.Index>=1 && item.Production.Right[item.Index - 1] == CFG.Start) { Table.add(index, new TableItem('A', -1)); } else { Table.add(index, new TableItem('R', CFG.ProductionsMap[item.Production])); } }