Esempio n. 1
0
        public void and()
        {
            DFA <String, char> dfa = new DFA <String, char>(new char[] { 'a', 'b' }, "LR_X");

            dfa.AddTransition("LR_0", "LR_1", 'a');
            dfa.AddTransition("LR_0", "LR_2", 'b');
            dfa.AddTransition("LR_1", "LR_0", 'a');
            dfa.AddTransition("LR_1", "LR_1", 'b');
            dfa.AddTransition("LR_2", "LR_0", 'a');
            dfa.AddTransition("LR_2", "LR_2", 'b');

            dfa.StartState = "LR_0";
            dfa.EndStates.Add("LR_1");
            dfa.EndStates.Add("LR_2");

            dfa.MakePngFile("dfa.png");
            Console.WriteLine(dfa.ToString());
            Console.WriteLine("");

            // DFA 2
            DFA <String, char> dfa2 = new DFA <String, char>(dfa.Alphabet, "LR_X");

            dfa2.AddTransition("LR_0", "LR_1", 'a');
            dfa2.AddTransition("LR_0", "LR_X", 'b');
            dfa2.AddTransition("LR_1", "LR_X", 'a');
            dfa2.AddTransition("LR_1", "LR_2", 'b');
            dfa2.AddTransition("LR_2", "LR_3", 'a');
            dfa2.AddTransition("LR_2", "LR_X", 'b');
            dfa2.AddTransition("LR_3", "LR_3", 'a');
            dfa2.AddTransition("LR_3", "LR_3", 'b');
            dfa2.AddTransition("LR_X", "LR_X", 'a');
            dfa2.AddTransition("LR_X", "LR_X", 'b');

            dfa2.StartState = "LR_0";
            dfa2.EndStates.Add("LR_3");

            dfa2.MakePngFile("dfa2.png");
            Console.WriteLine(dfa2.ToString());
            Console.WriteLine("");

            // AND
            dfa.And(dfa2);
            dfa.MakePngFile("dfaAnddfa2.png");
            Console.WriteLine(dfa.ToString());
            Console.WriteLine("");
        }
Esempio n. 2
0
        public void minimalize()
        {
            // DFA 1
            DFA <String, char> dfa = new DFA <String, char>(new char[] { 'a', 'b' }, "LR_X");

            dfa.AddTransition("LR_0", "LR_1", 'a');
            dfa.AddTransition("LR_0", "LR_2", 'b');
            dfa.AddTransition("LR_1", "LR_0", 'a');
            dfa.AddTransition("LR_1", "LR_1", 'b');
            dfa.AddTransition("LR_2", "LR_0", 'a');
            dfa.AddTransition("LR_2", "LR_2", 'b');

            dfa.StartState = "LR_0";
            dfa.EndStates.Add("LR_1");
            dfa.EndStates.Add("LR_2");

            dfa.MakePngFile("dfa.png");
            Console.WriteLine(dfa.ToString());
            Console.WriteLine("");

            // Minimalise
            dfa.MinimaliseDFA();
            dfa.MakePngFile("dfaM.png");
            Console.WriteLine(dfa.ToString());
            Console.WriteLine("");
        }
Esempio n. 3
0
        private DFA <string, char> getDFA()
        {
            DFA <string, char> dfa = new DFA <string, char>(this.alphabetSource.GetTableArray(), "LR_x");

            foreach (DataGridViewRow dataRow in this.dgvTransitions.Rows)
            {
                if (dataRow.Cells[2].Value == null || dataRow.Cells[2].Value.ToString() == "")
                {
                    continue;
                }

                string from   = dataRow.Cells[0].Value.ToString();
                string to     = dataRow.Cells[1].Value.ToString();
                char   symbol = dataRow.Cells[2].Value.ToString().First();
                dfa.AddTransition(from, to, symbol);
            }

            foreach (DataGridViewRow dataRow in this.dgvStates.Rows)
            {
                if (dataRow.Cells[0].Value == null || dataRow.Cells[0].Value.ToString() == "")
                {
                    continue;
                }

                string name       = dataRow.Cells[0].Value.ToString();
                bool   startState = (((dataRow.Cells[1]).Value == null) ? false : (bool)(dataRow.Cells[1]).Value);
                bool   endState   = (((dataRow.Cells[2]).Value == null) ? false : (bool)(dataRow.Cells[2]).Value);

                if (startState)
                {
                    dfa.StartState = name;
                }
                if (endState)
                {
                    dfa.EndStates.Add(name);
                }
            }

            if (!dfa.IsMachineValid())
            {
                MessageBox.Show("Machine is not valid", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }

            tsbVerifyLanguage.Enabled = true;
            tsbToMinimalDFA.Enabled   = true;
            //tsbToNot.Enabled = true;
            tsbToPng.Enabled    = true;
            tsbToRegram.Enabled = true;
            return(dfa);
        }
Esempio n. 4
0
        public void hcVoorbeeld()
        {
            DFA <String, char> dfa = new DFA <String, char>(new char[] { 'a', 'b' }, "LR_X");

            dfa.AddTransition("LR_0", "LR_1", 'a');
            dfa.AddTransition("LR_0", "LR_2", 'b');
            dfa.AddTransition("LR_1", "LR_0", 'a');
            dfa.AddTransition("LR_1", "LR_1", 'b');
            dfa.AddTransition("LR_2", "LR_0", 'a');
            dfa.AddTransition("LR_2", "LR_2", 'b');

            dfa.StartState = "LR_0";
            dfa.EndStates.Add("LR_1");
            dfa.EndStates.Add("LR_2");

            dfa.MakePngFile("dfa.png");
            Console.WriteLine(dfa.ToString());
            Console.WriteLine("");

            Regex <String> regex = new Regex <string>(new char[] { 'a', 'b' }, "a+(ab|ba)*bab", new StringStateCreater("LR_"));

            Console.WriteLine(regex.ToString());
            Console.WriteLine("");
        }