Что такое конечный автомат?Конечный автомат - это сущность, которая:
1. Пребывает в одном из нескольких возможных состояний.
2. Реагирует на сообщения. Получив сообщение, может совершить действия.
3. После совершения действия может остаться в старом состоянии или перейти в новое.
Таким образом, конечный автомат лежит спокойно и ничего не делает.
Он может что-то сделать, только если получит сообщение.
Выбор действия является функцией от:
1. Текущего состояния.
2. Типа сообщения.
Конечный автомат может накапливать внутри себя какие-то данные.
Если эти данные принимают активное участие в принятии решения о том,
какое действие предпринять при получении сообщения, автомат уже
не очень конечный.
Конечные автоматы обладают чудовищной выразительной силой.
Они наглядно описывают многие сущности:
- парсеры и лексеры;
- клиент-серверное взаимодействие;
- элементы графического интерфейса;
- искусственный интеллект персонажей в компьютерных играх;
- поведение людей (см. цепи маркова);
- и многое, многое другое.
Как правильно изображать конечные автоматы на языке ДРАКОН?Илья Ермаков считает, что так:
1. Берём силуэт.
2. Каждое из состояний соответствует ветке силуэта.
3. Названия веток - это названия состояний.
4. Веток, не соответствующим состояниям, в силуэте нет.
Идея хорошая, но есть проблема.
Пребывание автомата в каком-то состоянии - это ожидание сообщения извне.
(Ожидание "символа входного алфавита".)
Но икона "Название ветки" в языке ДРАКОН не означает задержки или ожидания!По аналогии с межпроцессным взаимодействием, предлагаю использовать для
ожидания сообщений икону
Ввод.
См.
viewtopic.php?f=62&t=4275#p78554Но тем не менее идея об изображении состояний при помощи веток хороша.
С учётом этого, автомат можно изобразить так:1. Берём силуэт.
2. Каждое из состояний соответствует ветке силуэта.
3. Названия веток - это названия состояний.
4. В силуэте ЕСТЬ ветки, не соответствующие состояниям.
5. Первой иконой в ветках-состояниях является икона "Ввод".
Плюс ещё названия веток-состояний можно украсить меткой, чтобы быстро отличать их от обычных веток.
И ещё одно дополнение.Последняя ветка является особой. Она выполняется, когда автомат останавливают извне.
Хозяин автомата может завершить его работу, когда автомат находится в любом состоянии.
Для изображения этого нужно рисовать много лишних и однообразных путей в силуэте.
Чтобы избежать ненужных деталей, можно отказаться от требования,
что на последнюю ветку указывает хотя бы одна другая ветка.
Последняя ветка - это деструктор.
Прилагаю пример автомата, который разбивает текстовую строку на слова.