Недетерминированное состояние машины понимания - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать DSL для своего проекта iOS.
Для этого я планирую построить Semantic Model в форме State Machine.(Терминология взята из книги Фаулера о DSL).
Основная идея: State Machine кодируется как набор states и transitions между ними, и затем могут быть написаны некоторые модульные тесты, чтобы проверить, приводит ли some_action к some_state1 систему к some_state2.

Проблема в том, что в моем приложении много фоновых потоков, поэтому в данный момент в State Machine может быть активным более одного состояния.

Я читал, что такие конечные автоматы Nondeterministic finite automaton, пролистал вики-страницу, но для меня это выглядит слишком теоретически.

Вот пример конечного автомата:

s8 можно активировать только тогда, когда он получил t7 и t8, это означает, что он должен «ждать».

enter image description here


Вопросы:
1. Есть ли что-то вроде "wait" в конечных автоматах?
2. Может быть, это не NFA, а два конечных автомата?Меня должно волновать, как назвать такую ​​семантическую модель вообще?
3. Можно ли реализовать s8 с некоторым фоновым потоком, который принимает уведомления от s4 и s7 и активируется только тогда, когда оба они отправили уведомления (это означает, что модульный тест не пройден, когдатайм-аут достигнут, и тогда этот тайм-аут должен быть упомянут где-то в модели)?

1 Ответ

0 голосов
/ 23 февраля 2019

Взгляните на ортогональных областей в иерархическом автомате состояний, это должно сделать то, что вы ищете.

Создайте новое состояние с двумя дочерними областями: первая область, содержащая s1, s2, s3, s4 и новое конечное состояние (цель t8);вторая область, содержащая s5, s6, s7 и новое конечное состояние (цель t7).Затем добавьте новый переход из нового состояния в s8.

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

...