Здравствуйте, Pzz, Вы писали:
Pzz>Переходы между состояниями ДКА обычно происходят в ответ на некие события.
Так точно!
Pzz>Вопрос, что представляют из себя твои события? Потому что, например, если ДКА реализует регулярное выражения, то события умещаются в один байт, и таблицу удобно хранить в виде таблицы переходов фиксированного размера, которая индексируются этим самым байтом.
Некое абстрактное событие.
Например, для станка с ЧПУ событием может быть замыкание концевика. Может генерироваться одно событие ENDSTOP_CLOSED, и доп. условия: BEGIN_ENDSTOP, END_ENDSTOP. Тут можно одно событие разложить на два: BEGIN_ENDSTOP_CLOSED и END_ENDSTOP_CLOSED. Но есть другой вариант — у нас два концевика на одной линии, и у нас физически одно событие ENDSTOP_CLOSED. Но у нас есть доп условия: MOVING_FORWARD, MOVING_BACKWARD.
Или другой вариант. Принимаем данные по UART в МК. События например, такие: CHAR_RECEIVED, RECEIVE_TIMEOUT_FIRES. Доп условия: может быть куча для события CHAR_RECEIVED, описывающая/характеризующая принятый символ, ещё доп условие — BUFFER_IS_FULL.
M>>СписокИсхСостояний : СписокСобытий -> ЦелевоеСостояние [? ДопУсловие] [- Описание];
Pzz>У меня есть смутное ощущение, что ДопУсловие ничего содержательно не добавляет, и только усложняет твою машинерию.
Pzz>Что вообще делает твой ДКА?
Что опишешь, то и делает
Например,
ДКА для светофора