FlyWeight Finite Automata Simulator
FlyWeight Finite Automata Simulator.
The object used to operate States of the Automata.
Has just one constructor. The constructor takes StateName, InitialState and Final State parameters. StateName is required parameter. InitialState and FinalState is optional and default values of they are False.
No method defined yet.
The object used to operate Transitions of the Automata.
Has two constructors. The difference, one the constructor takes only one destination state, the other one is takes IEnumerable
destination state. Constructor parameters are TransitionSymbol, FromState, ToState. All parameters are required.
FAState
object.IEnumerable<FaState>
object.Has one constructor. It takes AutomataType and Alphabet parameters. All parameters are required.
FAState
object.IEnumerable<FaState>
object.IEnumerable<FaState>
object.IEnumerable<FaTransition>
object.FiniteAutomataType
. Can only takes DFA or NFA.IEnumerable<char>
object.FiniteAutomata
object.FiniteAutomata
object.
// Alphabet of the automata is a, b and c.
List<char> alphabet = new List<char> { 'a', 'b', 'c' };
FiniteAutomata dfaTest = new FiniteAutomata(FiniteAutomataType.DFA, alphabet);
_ = dfaTest.AddState(true); // Uses default naming convention.So q0 state created.
_ = dfaTest.AddState(); // Uses default naming convention.So q1 state created.
_ = dfaTest.AddState(isFinalState: true); // Uses default naming convention.So q2 state created.
_ = dfaTest.AddTransition('a', "q0", "q1"); // Declaration: q0, transits to q1 with 'a' transition.
_ = dfaTest.AddTransition('b', "q0", "q2"); // Declaration: q0, transits to q2 with 'b' transition.
_ = dfaTest.AddTransition('c', "q0", "q0"); // Declaration: q0, transits to q0 with 'c' transition.
_ = dfaTest.AddTransition('a', "q1", "q0"); // Declaration: q1, transits to q0 with 'a' transition.
_ = dfaTest.AddTransition('b', "q1", "q1"); // Declaration: q1, transits to q1 with 'b' transition.
_ = dfaTest.AddTransition('c', "q1", "q2"); // Declaration: q1, transits to q2 with 'c' transition.
_ = dfaTest.AddTransition('a', "q2", "q0"); // Declaration: q0, transits to q2 with 'a' transition.
_ = dfaTest.AddTransition('b', "q2", "q2"); // Declaration: q2, transits to q2b with 'b' transition.
_ = dfaTest.AddTransition('c', "q2", "q2"); // Declaration: q2, transits to q2 with 'c' transition.
private static FiniteAutomata NFABuilder()
{
// Alphabet of the automata is 0 and 1.
List<char> alphabet = new List<char> { '0', '1' };
// Create new Automata NFA with Alphabet above.
FiniteAutomata nfaTest = new FiniteAutomata(FiniteAutomataType.NFA, alphabet);
_ = nfaTest.AddState("A", isInitialState: true); // A state created.
_ = nfaTest.AddState("B"); // B state created.
_ = nfaTest.AddState("C", isFinalState: true); // C state created.
_ = nfaTest.AddTransition('0', "A", "A"); // Declaration: A, transits to A with '0' transition.
_ = nfaTest.AddTransition('1', "A", "B,C"); // Declaration: A, transits to B or C with '1' transition.
_ = nfaTest.AddTransition('0', "B", "B"); // Declaration: B, transits to B with '0' transition.
_ = nfaTest.AddTransition('1', "B", "A,C"); // Declaration: B, transits to A or C with '1' transition.
_ = nfaTest.AddTransition('0', "C", "A,B"); // Declaration: C, transits to A or B with '0' transition.
_ = nfaTest.AddTransition('1', "C", "C"); // Declaration: C, transits to C with '1' transition.
return nfaTest;
Don’t forget check automata with IsValid property. :)
FiniteAutomata automata = NFABuilder();
if (automata.IsValid)
{
// Some codes
}
You can run input on the automata with Run method.
Note: Run method contains IsValid check, so you don’t need additionally check that.
FiniteAutomata automata = NFABuilder();
bool result = automata.Run(inputString);
You can convert your NFA to DFA easily.
FiniteAutomata automata = NFABuilder();
FiniteAutomataConverter dfaConverter = new FiniteAutomataConverter();
FiniteAutomata ConvertedAutomata = dfaConverter.ConvertNFAToDFA(automata);
[Time To Completion] NFA Creation: 57 ms
[Time To Completion] NFA Validation: 0 ms
[Time To Completion] NFA Run: 35 ms
[Time To Completion] Automata Conversion: 16 ms
[Time To Completion] DFA Validation: 1 ms
[Time To Completion] DFA Run: 28 ms