Пример #1
0
        public static void Display_Table()
        {
            var terminale = Get_Terminals();

            Console.Write("    ");
            for (int i = 0; i < terminale.Count; i++)
            {
                Console.Write("   " + terminale[i] + "   ");
            }
            Console.WriteLine();


            for (int i = 0; i < Graf_List.Count; i++)
            {
                var rand = new List <String>();
                for (int t = 0; t < terminale.Count; t++)
                {
                    rand.Add("*");
                }

                for (int t = 0; t < terminale.Count; t++)
                {
                    var simbol = terminale[t];
                    if (simbol.Equals("$") && Graf_List[i].Lista_noduri[0].Equals("S'>S.,$") == true)
                    {
                        rand[terminale.IndexOf(simbol)] = "acc";
                    }
                    else if (char.IsLower(simbol.ToCharArray()[0]))
                    {
                        var item = Graf_List[i].Lista_noduri.Where(elem => elem.Split('.')[1][0].ToString().Equals(simbol.ToString())).FirstOrDefault();
                        if (item != null)
                        {
                            var new_item = Move_Dot(item, 1);
                            var indice   = Graf_List.IndexOf(Graf_List.Where(elem => elem.Lista_noduri[0].Equals(new_item)).FirstOrDefault());
                            rand[terminale.IndexOf(simbol)] = "s" + indice;
                        }
                    }
                    else if (char.IsUpper(simbol.ToCharArray()[0]))
                    {
                        var item = Graf_List[i].Lista_noduri.Where(elem => elem.Split('.')[1][0].ToString().Equals(simbol.ToString())).FirstOrDefault();
                        if (item != null)
                        {
                            var new_item = Move_Dot(item, 1);
                            var indice   = Graf_List.IndexOf(Graf_List.Where(elem => elem.Lista_noduri[0].Equals(new_item)).FirstOrDefault());
                            rand[terminale.IndexOf(simbol)] = indice.ToString();
                        }
                    }

                    foreach (var item in Graf_List[i].Lista_noduri)
                    {
                        if (item.Split('.')[1][0].Equals(',') && item.Equals("S'>S.,$") == false)
                        {
                            var after  = item.Split(',')[1].Split('/');
                            var before = item.Split('.')[0];
                            var key    = Dictionary_Grammer.Where(elem => elem.Value.Equals(before.ToString())).FirstOrDefault().Key;
                            foreach (var aft in after)
                            {
                                if (aft.ToString().Equals(simbol.ToString()))
                                {
                                    if (rand[terminale.IndexOf(simbol)].Equals("*"))
                                    {
                                        rand[terminale.IndexOf(simbol)] = "r" + (key + 1);
                                    }
                                    else
                                    {
                                        rand[terminale.IndexOf(simbol)] += ",r" + (key + 1);
                                    }
                                }
                            }
                        }
                    }
                }
                MatrixTable.Add(rand);
            }
            for (int i = 0; i < MatrixTable.Count; i++)
            {
                Console.Write(i + "   ");
                for (int j = 0; j < MatrixTable[i].Count; j++)
                {
                    Console.Write("   " + MatrixTable[i][j] + "   ");
                }
                Console.WriteLine();
            }
        }