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); }
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); }
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(); }