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);
                 }