async private void DrawAnalysisSheet() { if (!(LLAnalyzer.RunFIS() is null) && !(LLAnalyzer.RunFOS() is null)) { var lls = LLAnalyzer.BuildAnalysisSheet(); // set header List <string> r = new List <string>() { "" }; lls.Item2.ToList().ForEach(t => r.Add(t.Value._attr)); Rows.Add(r); // set data lls.Item1.ToList().ForEach(t => { r = new List <string>() { t.Value._attr }; for (int col = 0; col < lls.Item2.Count; ++col) { if (lls.Item3.TryGetValue((t.Key, col), out HashSet <Grammar.Prodc> p)) { Collision = p.Count != 1; // use the first as default Grammar.Prodc cur = p.First(); string str = cur._left._attr + "→"; cur._right.ForEach(e => str += e._attr); r.Add(str); }