Информация об изменениях

Сообщение Список переходов в ДКА от 30.09.2025 19:40

Изменено 01.10.2025 20:06 Marty

Список переходов в ДКА
Здравствуйте!

Наверное, в "Философию", хотя, вопрос всё же вполне практический.

Ковыряю генератор ДКА. Думаю, как описывать переходы между состояниями. Пока надумал примерно так:

Синтаксис описания переходов:

СписокИсхСостояний : СписокСобытий -> ЦелевоеСостояние [? ДопУсловие] [- Описание];
где
  СписокИсхСостояний - Состояние1 [, Состояние2 [, Состояние3... ] ]
  СостояниеN         - */Состояние/!Состояние
  СписокСобытий      - Событие1 [, Событие2 [, Событие3... ] ]
  СобытиеN           - */Событие/!Событие

'*' - означает любое состояние, для которого не задано перехода.
'!' (отрицание) - используется совместно с состоянием '*', и явно исключает
    генерацию перехода из этого состояния.

Аналогичная семантика используется при описании списка событий.


Ничего не забыл?

Вопрос — как сравнивать такие записи? И надо ли сравнивать? По идее, переходы могут пересекаться по условиям, и это нельзя. И хочется сразу отсечь проблемы. Или оставить на потом?

Для начала надо отсортировать по состояниям и переходам, сохраняя относительный порядок у переходов одного типа.

Сначала идут все переходы, у которых нет "звездочек" в исходных состояниях и в событиях перехода.
Потом — те переходы, у которых есть "звездочка", но есть исключения из звездочки, состояния/события с отрицанием (тут вопрос, что идёт раньше, "звездочка" в исх состояниях или "звездочка" в событиях?)
Потом — те переходы, у которых только одна звездочка.

Когда отсортировали, разбиваем эти сложные описания переходов на примитивные, когда у нас только одно исходное состояние и только одно событие перехода.
Потом применяем "звездочки" с исключениями.
Потом применяем чистые "звездочки".

Предложения, пожелания, критика?
Список переходов в ДКА
Здравствуйте!

Наверное, в "Философию", хотя, вопрос всё же вполне практический.

Ковыряю генератор ДКА. Думаю, как описывать переходы между состояниями. Пока надумал примерно так:

Синтаксис описания переходов:

СписокИсхСостояний : СписокСобытий [? ДопУсловие] -> ЦелевоеСостояние [? ДопУсловие] [: СписокДействий] [- Описание];
где
  СписокИсхСостояний - Состояние1 [, Состояние2 [, Состояние3... ] ]
  СостояниеN         - * / Состояние / !Состояние
  СписокСобытий      - Событие1 [, Событие2 [, Событие3... ] ]
  СобытиеN           - * / Событие / !Событие
  СписокДействий     - Действие1 [, Действие2 [, Действие3... ] ]

'*' - означает любое состояние, для которого не задано перехода.
'!' (отрицание) - используется совместно с состоянием '*', и явно исключает
    генерацию перехода из этого состояния.

Аналогичная семантика используется при описании списка событий.

ДопУсловие - логическое выражение, состоящее из предикатов, операций '&', '|', '!'
и группроующих скобок.
ДопУсловие может располагаться либо после списка событий, либо после целевого состояния,
но только в одном из этих мест.


Ничего не забыл?

Вопрос — как сравнивать такие записи? И надо ли сравнивать? По идее, переходы могут пересекаться по условиям, и это нельзя. И хочется сразу отсечь проблемы. Или оставить на потом?

Для начала надо отсортировать по состояниям и переходам, сохраняя относительный порядок у переходов одного типа.

Сначала идут все переходы, у которых нет "звездочек" в исходных состояниях и в событиях перехода.
Потом — те переходы, у которых есть "звездочка", но есть исключения из звездочки, состояния/события с отрицанием (тут вопрос, что идёт раньше, "звездочка" в исх состояниях или "звездочка" в событиях?)
Потом — те переходы, у которых только одна звездочка.

Когда отсортировали, разбиваем эти сложные описания переходов на примитивные, когда у нас только одно исходное состояние и только одно событие перехода.
Потом применяем "звездочки" с исключениями.
Потом применяем чистые "звездочки".

Предложения, пожелания, критика?