private void BuilditemFamily() { bool changed = true; while (changed) { changed = false; for (int i = 0; i < itemsets.Count; i++) { List items = itemsets[i].Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (string symbol in symbols) { List newItems = new List(); foreach (string item in items) { string[] parts = item.Split(' '); int dotIndex = Array.IndexOf(parts, "."); if (dotIndex != -1 && dotIndex < parts.Length - 1 && parts[dotIndex + 1] == symbol) { string newItem = item.Replace(". " + symbol, symbol + " ."); if (!newItems.Contains(newItem)) { newItems.Add(newItem); } } } if (newItems.Count > 0) { string newState = GetState(newItems); if (!states.Contains(newState)) { states.Add(newState); itemsets.Add(newState); changed = true; } int index = states.IndexOf(newState); if (!gotoTable.ContainsKey(i + "," + symbol)) { gotoTable.Add(i + "," + symbol, new List()); } if (!gotoTable[i + "," + symbol].Contains(index.ToString())) { gotoTable[i + "," + symbol].Add(index.ToString()); } } } } }

private Liststring productions = new Liststring; 存储文法产生式 private Liststring symbols = new Liststring; 存储文法符号 private Liststring states = new Liststring; 存储状态 private Liststring

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

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