как эту схеиму перевести в код. Это DFA ( Детерминированные конечные автоматы )
Смотрите.
Для начала, вам нужно построить класс, описывающий состояние DFA. Что в нём есть? Список переходов, плюс признак того, заключительное ли это состояние.
Переходы проще всего кодировать словарём, отображающим символ входного алфавита на новое состояние. Символы входного алфавита закодируем как char.
Получаем:
class State
{
public string Name;
public Dictionary<char, State> Transitions;
public bool IsAcceptState;
}
(я добавил ещё и имя, хотя оно по сути не нужно).
Вам нужно создать узлы, и связать их в таблицу состояний. Узлы будут наподобие такого:
State q4 = new State()
{
Name = "Q4",
IsAcceptState = false,
Transitions = new Dictionary<char, State>()
{
['0'] = q2 // если приходит 0, переходим в состояние q2
}
};
(подумайте, как сделать так, чтобы первый узел мог ссылаться в таблице переходов на второй!)
Теперь, вам нужно определить класс для самого автомата, который содержит список состояний, и начальное состояние (это делайте сами, тут просто). Затем, что есть результат пробега DFA по строке? В конце мы либо оказываемся в финальном, либо в нефинальном состоянии. Ещё машина может остановиться, если перехода из какого-то состояние нет. Это удобно закодировать типом данных bool?.
Сам код пробега (интерпретатор конечного автомата) получается очень простым.
public bool? Run(IEnumerable<char> s)
{
State current = InitialState;
foreach (var c in s) // цикл по всем символам
{
current = current.Transitions[c]; // меняем состояние на то, в которое у нас переход
if (current == null) // если его нет, возвращаем признак ошибки
return null;
// иначе переходим к следующему
}
return current.IsAcceptState; // результат true если в конце финальное состояние
}
Все части картины есть, собирайте!
Сборка персонального компьютера от Artline: умный выбор для современных пользователей