12,998,785 members (64,973 online)
Article
alternative version

#### Stats

20.3K views
22 bookmarked
Posted 23 Apr 2009

# Moore machine with C#

, 23 Apr 2009
 Rate this:
A simple Moore machine implemented in C#.

## Introduction

Some time ago, I had to solve a synchronization problem using serial ports for communication with mobile phones. I solved this with an implementation of a Moore machine.

## Background

What is a Moore machine and what is a finite state machine? A finite state machine can be visualized by a graph. Each node is a state . Only one state can be active at a time, whereas time is actually irrelevant. If the state machine's active state is , it receives the input character (words, symbols, messages, a.s.o.), there is a transition function defined, then the machine changes its active state to .

The Moore machine and other finite state machines (e.g., Mealy machines) are well documented on Wikipedia:

## Using the code

Here is a very simple usage example:

using System;

namespace visusNET.FiniteStateMachine
{
public class Test
{
public static void Main()
{
string[] sigma = new string[] { "ABC", "XYZ", "123" };

State state1 = new State(State1, "State 1");
State state2 = new State(State2, "State 2");
State state3 = new State(State3, "State 3");
State[] S = { state1, state2, state3 };

TransitionFunction delta = new TransitionFunction();

delta.AddTransition(state1, sigma[0], state2); // state1 --ABC--> state2
delta.AddTransition(state2, sigma[1], state3); // state2 --XYZ--> state3
delta.AddTransition(state3, sigma[2], state1); // state3 --123--> state1

MooreMachine machine = new MooreMachine(sigma, S, state1, delta);
machine.Delay = 1000;
machine.Interval = 5000;

machine.Analyze();

while (true)
{
machine.SetInput("ABC");
machine.SetInput("XYZ");
machine.SetInput("123");
}
}

public static void State1()
{
Console.WriteLine("State 1 is running...");
}

public static void State2()
{
Console.WriteLine("State 2 is running...");
}

public static void State3()
{
Console.WriteLine("State 3 is running...");
}
}
}

And this is the (verbose) output:

Checking State 1 with ABC... Found
Checking State 2 with XYZ... Found
Checking State 3 with 123... Found
This Moore-Machine is a partially-specified deterministic finite state machine.
Following transitions are missing:
(State 1, "XYZ") -> undefined
(State 1, "123") -> undefined
(State 2, "ABC") -> undefined
(State 2, "123") -> undefined
(State 3, "ABC") -> undefined
(State 3, "XYZ") -> undefined
State 1 is running...
Got input: XYZ
State 1 is running...
Got input: ABC
State 2 is running...
Got input: 123
State 2 is running...
Got input: XYZ
State 3 is running...
Got input: ABC
State 3 is running...
Got input: 123
State 1 is running...
Got input: XYZ

## Points of interest

The funny thing about this code is that I wrote it in about an hour without testing it. It worked at first go.

## History

• Version 1.0 - 23/04/2009.

## Share

 Software Developer Germany
No Biography provided