Because any non-deterministic automaton can be converted to a deterministic automaton.
If you need to program a non-deterministic automaton, first convert it to a deterministic one. There is an algorithm you can use to do this, but usually it is easiest just to think a bit.
In most situations where an automaton is useful a straightforward deterministic automaton is what you need. For example, if an automaton controls a car engine, it should be clear what state follows the current state. Automobile engines do not backtrack.
Let us write a program that recognizes strings that:
The string to be tested will be a command line argument. Here is the main program:
class FSAtester
{
public static void main (String[] args)
{
String str = null;
FSAaz fsa = new FSAaz();
str = args[0];
if ( fsa.recognize( str ) )
System.out.println("The string is recognized.");
else
System.out.println("The string is rejected.");
}
}
The method recognize() of the FSAaz class
takes a String object as an argument.
It returns true or false depending
on whether the characters in the String are accepted.
Here is a sample run of the program:
C:\> java FSAtester abcdaxz The string is recognized. C:\>
Will the following string be recognized?
aabcz