예제 #1
0
        public static void Test1()
        {
            HashSet<char> terms = new HashSet<char>();
            terms.Add('+');
            terms.Add('e');
            terms.Add('*');
            terms.Add('(');
            terms.Add(')');
            terms.Add('a');
            HashSet<char> nonTerms = new HashSet<char>();
            nonTerms.Add('S');
            nonTerms.Add('A');
            nonTerms.Add('B');
            nonTerms.Add('C');
            nonTerms.Add('D');
            Pair<char, string> p1 = new Pair<char, string>('S', "BA");
            Pair<char, string> p2 = new Pair<char, string>('A', "+BA");
            Pair<char, string> p3 = new Pair<char, string>('A', "e");
            Pair<char, string> p4 = new Pair<char, string>('B', "DC");
            Pair<char, string> p5 = new Pair<char, string>('C', "*DC");
            Pair<char, string> p6 = new Pair<char, string>('C', "e");
            Pair<char, string> p7 = new Pair<char, string>('D', "(S)");
            Pair<char, string> p8 = new Pair<char, string>('D', "a");

            List<Pair<char, string>> rules = new List<Pair<char, string>>();
            rules.Add(p1);
            rules.Add(p2);
            rules.Add(p3);
            rules.Add(p4);
            rules.Add(p5);
            rules.Add(p6);
            rules.Add(p7);
            rules.Add(p8);

            first_1 f = new first_1(terms, nonTerms, rules);
            f.find_FIRST();

            f.Output_Grammar();
            Console.WriteLine();
            f.Output_FIRST();
        }
예제 #2
0
        private void button2_Click(object sender, EventArgs e)
        {
            int k = Convert.ToInt32(textBox8.Text);

            if (k <= 0 || k > 3)
            {
                string message = "Введите k = 1, 2 или 3!";
                string caption = "Неверный ввод k";
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                DialogResult result;

                // Displays the MessageBox.

                result = MessageBox.Show(message, caption, buttons);
                return;
            }

            button2.Enabled = false;

            dataGridView2.Visible = true;

            HashSet<char> terms = new HashSet<char>();
            for (int i = 0; i < textBox2.Text.Length; i++)
                terms.Add(textBox2.Text[i]);

            HashSet<char> nonTerms = new HashSet<char>();
            for (int i = 0; i < textBox4.Text.Length; i++)
                nonTerms.Add(textBox4.Text[i]);

            List<Pair<char, string>> rules = new List<Pair<char, string>>();
            int countRow = Convert.ToInt32(textBox7.Text);
            for (int i = 0; i < countRow; i++)
            {
                char start = Convert.ToChar(dataGridView1[0, i].Value);
                string end = dataGridView1[1, i].Value.ToString();
                Pair<char, string> p = new Pair<char, string>(start, end);
                rules.Add(p);
            }

            switch (k)
            {
                case 1:
                    {
                        first_1 first = new first_1(terms, nonTerms, rules);
                        first.find_FIRST();
                        Output_FIRST(k, first.dic_first);
                        break;
                    }
                case 2:
                    {
                        first_2 first = new first_2(terms, nonTerms, rules);
                        first.find_FIRST();
                        Output_FIRST(k, first.dic_first);
                        break;
                    }
                case 3:
                    {
                        first_3 first = new first_3(terms, nonTerms, rules);
                        first.find_FIRST();
                        Output_FIRST(k, first.dic_first);
                        break;
                    }
                default:
                    {
                        break;
                    }
            }

            button3.Enabled = true;
        }