示例#1
0
        private static RegExpress SetupAssigment2(string v)
        {
            AllStates       = new List <string>();
            Alpha           = new List <char>();
            AllStateChanges = new List <StateManager>();
            FinalStates     = new List <string>();

            GenerateFSRules(v, AllStates, Alpha, AllStateChanges, FinalStates);
            Console.WriteLine("\n\n\n\n");
            Console.WriteLine("ALLSTATES:");
            foreach (var state in AllStates)
            {
                Console.WriteLine(state);
            }
            Console.WriteLine("\nALLFINALSTATES");
            foreach (var final in FinalStates)
            {
                Console.WriteLine(final);
            }
            Console.WriteLine("\nALLSTATECHANGES");
            foreach (var change in AllStateChanges)
            {
                Console.WriteLine(change);
            }

            RegExpress DFA = new RegExpress(AllStates, Alpha, AllStateChanges, "s0", FinalStates);

            return(DFA);
        }
示例#2
0
        private static RegExpress SetupAssigment1()
        {
            AllStates = new List <string> {
                "s0", "s1", "s2"
            };                                                 ///// Alle states der findes.
            Alpha = new List <char> {
                'l', 'i', 'e', 'p', 'o'
            };                                                  //////////Alphabet || Sigma
            // l = Login
            // i = List Items
            // e = Edit Items
            // p = post item
            // o = logout
            AllStateChanges = new List <StateManager>() //// Laver alle statechanges (Hvad sker der når man går fra en state til en anden)
            {
                new StateManager("s0", 'l', "s1"),      //// Manually making the states
                new StateManager("s1", 'i', "s1"),
                new StateManager("s1", 'e', "s1"),
                new StateManager("s1", 'p', "s1"),
                new StateManager("s1", 'o', "s2"),
            };
            FinalStates = new List <string> {
                "s2"
            };                                                                                     /// Opretter final state, de states som et udtryk kan slutte på.

            RegExpress DFA = new RegExpress(AllStates, Alpha, AllStateChanges, "s0", FinalStates); /// Opretter Finite State Automaton

            return(DFA);
        }
示例#3
0
        static void Main(string[] args)
        {
            /// Hvis dette program skal vurderes, foreslår jeg at der kigged på metoden SetupAssigment1 først, for at forstå hvordan jeg har sat en Deterministic Finite State machine op! OPS: RegExpress klassen skulle nok have hede Finite State Machine og StateManager skulle nok have hedet StateChange
            /// og derefter kigger på assigment2 metoden til at se hvordan den genereres udfra en regular expressioN! NOTE: Generation af FSA er ikke 100% perfekt.


            ////// Task 1
            //RegExpress DFA = SetupAssigment1();
            ///// Task 2
            RegExpress DFA = SetupAssigment2("l(p|e|i)*o");

            string[] users = new string[4];

            if (DFA.Accepts(users[0] + 'l'))
            {
                users[0] = DoAction(users[0], 'l');
            }
            if (DFA.Accepts(users[0] + 'p'))
            {
                users[0] = DoAction(users[0], 'p');
            }
            if (DFA.Accepts(users[0] + 'p'))
            {
                users[0] = DoAction(users[0], 'p');
            }
            if (DFA.Accepts(users[0] + 'e'))
            {
                users[0] = DoAction(users[0], 'p');
            }
            if (DFA.Accepts(users[0] + 'o'))
            {
                users[0] = DoAction(users[0], 'o');
            }
            if (DFA.Accepts(users[1] + 'p'))
            {
                users[1] = DoAction(users[1], 'p');
            }
            Console.WriteLine("You haven't logged in yet.!\n\n");
            if (DFA.Accepts(users[1] + 'l'))
            {
                users[1] = DoAction(users[1], 'l');
            }
            if (DFA.Accepts(users[1] + 'p'))
            {
                users[1] = DoAction(users[1], 'p');
            }
            if (DFA.Accepts(users[1] + 'o'))
            {
                users[1] = DoAction(users[1], 'o');
            }
            if (DFA.Accepts(users[2] + 'l'))
            {
                users[2] = DoAction(users[2], 'l');
            }
            if (DFA.Accepts(users[2] + 'l'))
            {
                users[2] = DoAction(users[2], 'l');
            }
            Console.WriteLine("When you are logged in, you cannot login again!\n\n");
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'e'))
            {
                users[2] = DoAction(users[2], 'e');
            }
            if (DFA.Accepts(users[2] + 'i'))
            {
                users[2] = DoAction(users[2], 'i');
            }
            if (DFA.Accepts(users[2] + 'o'))
            {
                users[2] = DoAction(users[2], 'o');
            }
            if (DFA.Accepts(users[3] + 'p'))
            {
                users[3] = DoAction(users[3], 'p');
            }
            Console.WriteLine("FAIL! You haven't logged in yet!!\n\n");
            if (DFA.Accepts(users[3] + 'l'))
            {
                users[3] = DoAction(users[3], 'l');
            }
            if (DFA.Accepts(users[3] + 'p'))
            {
                users[3] = DoAction(users[3], 'e');
            }
            if (DFA.Accepts(users[3] + 'o'))
            {
                users[3] = DoAction(users[3], 'o');
            }
            if (DFA.Accepts(users[3] + 'o'))
            {
                users[3] = DoAction(users[3], 'o');
            }
            Console.WriteLine("Ilegal action!, you are not logged in, so you cannot logout\n\n");


            ///// Task 2
            //RegExpress DFA2 = SetupAssigment2("A(B|C)*D");



            Console.ReadLine();
        }