请将下列代码环境中怎么能找出每个项目集中的移进和规约项目给出相应代码。class SLR 产生式结点类 public class SLRNode public string Left; public string Right; public SLRNodestring Left s
找出每个项目集中的移进和规约项目的代码:
//遍历每个项目集 for (int i = 0; i < proitemset.Count; i++) { //遍历项目集中的每个项目 for (int j = 0; j < proitemset[i].Container.Count; j++) { int index = proitemset[i].Container[j]; //如果项目是移进项目 if (SLRobjNum[index].Right.IndexOf('.') < SLRobjNum[index].Right.Length - 1) { char symbol = SLRobjNum[index].Right[SLRobjNum[index].Right.IndexOf('.') + 1]; //查找是否已经存在该转移 bool exist = false; for (int k = 0; k < Pindex; k++) { if (dfa[k].from == i && dfa[k].symbol == symbol) { exist = true; break; } } //如果不存在该转移,则添加到dfa数组中 if (!exist) { int to = isexist(Goto(i, symbol)); dfa[Pindex++] = new DFA(i, symbol, to); } } //如果项目是规约项目 else if (SLRobjNum[index].Right.IndexOf('.') == SLRobjNum[index].Right.Length - 1) { //将该规约项目的序号添加到Gy_obj集合中 Gy_obj.Add(index); //将该项目集的序号添加到Gy_itemset集合中 if (!Gy_itemset.Contains(i)) { Gy_itemset.Add(i); } } }
原文地址: https://www.cveoy.top/t/topic/hrpA 著作权归作者所有。请勿转载和采集!