コード例 #1
0
 private void hideStateDFA1()
 {
     DFA2simState0.Hide();
     DFA2simState1.Hide();
     DFA2simState2.Hide();
     DFA2simState3.Hide();
     DFA2simState4.Hide();
     DFA2simState5.Hide();
     DFA2simState6.Hide();
     DFA2simStateEndLoop.Hide();
 }
コード例 #2
0
        private void onNext(object sender, EventArgs e)
        {
            sim = stringSimulation.ToCharArray(); //sim = stringSimulation.ToCharArray();
            switch (lblRegex.Text)
            {
                #region REGEX1
            case "Regular Expression:  (aa+bb)(a+b)* (a+b+ab+ba) (a+b+ab+ba)* (aa+bab)* (a+b+aa) (a+b+bb)*":
                if (forCTR <= stringSimulation.Length - 1)
                {
                    if (currentState == 0)
                    {
                        DFA1simState0.Show();
                        //StatusBar.Text = "The string enters start state!";
                        currentState++;
                    }

                    else if (currentState == 1)
                    {
                        if (sim[forCTR] == 'a')
                        {
                            DFA1simState0.Hide();
                            DFA1simState1a.Show();
                            lblInputChar.Text = Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "Since input is a, the string enters state 1a";
                            forCTR++;
                            currentState++;
                        }

                        else if (sim[forCTR] == 'b')
                        {
                            DFA1simState0.Hide();
                            DFA1simState1b.Show();
                            lblInputChar.Text = Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "Since input is b, the string enters state 1b";
                            forCTR++;
                            currentState++;
                        }

                        else
                        {
                            //start state only
                            lblInputChar.Text = "INVALID INPUT";
                            //StatusBar.Text = "The string is stuck in start state, and is therefore invalid";
                            btnNext.Enabled = false;
                        }
                    }

                    else if (currentState == 2)
                    {
                        if (sim[forCTR - 1] == 'a' && sim[forCTR] == 'a')
                        {
                            DFA1simState1a.Hide();
                            DFA1simState2.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "From state 1a, the input is a, therefore the string enters state 2";
                            forCTR++;
                            currentState++;
                        }

                        else if (sim[forCTR - 1] == 'b' && sim[forCTR] == 'b')
                        {
                            DFA1simState1b.Hide();
                            DFA1simState2.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "From state 1b, the input is b, therefore the string enters state 2";
                            forCTR++;
                            currentState++;
                        }

                        else if (sim[forCTR - 1] == 'a' && sim[forCTR] == 'b')
                        {
                            DFA1simState1a.Hide();
                            DFA1simState6.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "From state 1a, the input is b, the string enters a trap state, and therefore is considered invalid for the DFA";
                            lblInputChar.Text = "INVALID INPUT";
                            forCTR++;
                            currentState++;
                            btnNext.Enabled = false;
                        }

                        else if (sim[forCTR - 1] == 'b' && sim[forCTR] == 'a')
                        {
                            DFA1simState1b.Hide();
                            DFA1simState6.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "From state 1b, the input is a, the string enters a trap state, and therefore is considered invalid for the DFA";
                            lblInputChar.Text = "INVALID INPUT";
                            forCTR++;
                            currentState++;
                            btnNext.Enabled = false;
                        }

                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            //StatusBar.Text = "The string does not reach the end state, and is therefore invalid";
                            btnNext.Enabled = false;
                        }
                    }

                    else if (currentState == 3)
                    {
                        if (sim[forCTR] == 'a' || sim[forCTR] == 'b')
                        {
                            DFA1simState2.Hide();
                            DFA1simState3.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState++;
                        }

                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            //StatusBar.Text = "The string does not reach the end state, and is therefore invalid";
                            btnNext.Enabled = false;
                        }
                    }

                    else if (currentState == 4)
                    {
                        if (sim[forCTR] == 'a' || sim[forCTR] == 'b')
                        {
                            DFA1simState3.Hide();
                            DFA1simState4.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "From state 3, the input is " + sim[forCTR] + ", therefore the string enters state 4";
                            forCTR++;
                            currentState++;
                        }

                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            //StatusBar.Text = "The string does not reach the end state, and is therefore invalid";
                            btnNext.Enabled = false;
                        }
                    }

                    else if (currentState > 4)
                    {
                        if (sim[forCTR] == 'a' || sim[forCTR] == 'b')
                        {
                            DFA1simState4.Hide();
                            DFA1simStateEndLoop.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            //StatusBar.Text = "From state 4, the input is " + sim[forCTR] + ", therefore the string stays in state 4";
                            forCTR++;
                            currentState++;
                        }

                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            //StatusBar.Text = "Input is neither a or b so the string doesn't go to any state, and is therefore invalid";
                            btnNext.Enabled = false;
                        }
                    }
                }

                else
                {
                    if (currentState > 4)
                    {
                        lblInputChar.Text = "VALID INPUT";
                        //StatusBar.Text = "The string ends in the end state, and is therefore valid!";
                        btnNext.Enabled = false;
                    }

                    else if (currentState <= 4)
                    {
                        lblInputChar.Text = "INVALID INPUT";
                        // StatusBar.Text = "The string does not end in the end state, and is therefore invalid!";
                        btnNext.Enabled = false;
                    }
                    currentState++;
                }
                break;
                #endregion

                #region REGEX2
            case "Regular Expression: ((101+111+101) + (1+0+11)*) (1+0+01)* (111+000+101) (1+0)*":
                if (forCTR <= stringSimulation.Length - 1)
                {
                    if (currentState == 0)
                    {
                        DFA2simState0.Show();
                        currentState = 1;
                    }
                    else if (currentState == 1)    //starting state
                    {
                        if (sim[forCTR] == '1')
                        {
                            DFA2simState0.Hide();
                            DFA2simState1.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 2;
                        }

                        else if (sim[forCTR] == '0')
                        {
                            DFA2simState0.Hide();
                            DFA2simState1.Hide();
                            DFA2simState2.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 2;
                        }

                        else
                        {
                            //start state only
                            lblInputChar.Text = "INVALID INPUT";
                            btnNext.Enabled   = false;
                        }
                    }
                    else if (currentState == 2)
                    {
                        if (sim[forCTR - 1] == '1' && sim[forCTR] == '1')
                        {
                            DFA2simState1.Hide();
                            DFA2simState3.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 3;
                        }

                        else if (sim[forCTR - 1] == '1' && sim[forCTR] == '0')
                        {
                            DFA2simState1.Hide();
                            DFA2simState4.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 4;
                        }
                        else if (sim[forCTR - 1] == '0' && sim[forCTR] == '0')
                        {
                            DFA2simState2.Hide();
                            DFA2simState5.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 5;
                        }
                        else if (sim[forCTR - 1] == '0' && sim[forCTR] == '1')
                        {
                            DFA2simState2.Hide();
                            DFA2simState1.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 2;
                        }
                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            btnNext.Enabled   = false;
                        }
                    }
                    else if (currentState == 3)
                    {
                        if (sim[forCTR] == '1')
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState6.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 6;
                        }
                        else if (sim[forCTR] == '0')
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState4.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 4;
                        }
                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            btnNext.Enabled   = false;
                        }
                    }
                    else if (currentState == 4)
                    {
                        if (sim[forCTR] == '1')
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState4.Hide();
                            DFA2simState6.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 6;
                        }
                        else if (sim[forCTR] == '0')
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState4.Hide();
                            DFA2simState5.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 5;
                        }
                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            btnNext.Enabled   = false;
                        }
                    }
                    else if (currentState == 5)
                    {
                        if (sim[forCTR] == '1')
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState4.Hide();
                            DFA2simState5.Hide();
                            DFA2simState1.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 2;
                        }
                        else if (sim[forCTR] == '0')
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState4.Hide();
                            DFA2simState5.Hide();
                            DFA2simState6.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState = 6;
                        }
                        else
                        {
                            //STAYS WHEREVER IT IS
                            lblInputChar.Text = "INVALID INPUT";
                            btnNext.Enabled   = false;
                        }
                    }
                    else if (currentState >= 6)
                    {
                        if (sim[forCTR] == '1' || sim[forCTR] == '0')
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState4.Hide();
                            DFA2simState5.Hide();
                            DFA2simState6.Hide();
                            DFA2simStateEndLoop.Show();
                            lblInputChar.Text += Convert.ToString(sim[forCTR]);
                            forCTR++;
                            currentState++;
                        }
                        else
                        {
                            DFA2simState1.Hide();
                            DFA2simState2.Hide();
                            DFA2simState3.Hide();
                            DFA2simState4.Hide();
                            DFA2simState5.Hide();
                            DFA2simState6.Show();
                            lblInputChar.Text = "VALID INPUT";
                            btnNext.Enabled   = false;
                        }
                    }
                }
                else
                {
                    if (currentState >= 6)
                    {
                        lblInputChar.Text = "VALID INPUT";
                        btnNext.Enabled   = false;
                    }

                    else if (currentState < 6)
                    {
                        lblInputChar.Text = "INVALID INPUT";
                        btnNext.Enabled   = false;
                    }
                    currentState++;
                }

                break;
            }
        }