Esempio n. 1
0
 public TableItem GetAction(TableIndex i)
 {
     if (this.dic.ContainsKey(i))
     {
         return this.dic[i];
     }
     else
     {
         throw new Exception("查询分析表结果为ERROR");
     }
 }
Esempio n. 2
0
 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]));
     }
 }