Документация Engee

Генерация кода для конечных автоматов

Engee поддерживает генерацию кода для блока Chart. Блок Chart позволяет описывать диаграммы состояний, графы переходов и их комбинации. Библиотека конечных автоматов Engee является эффективным инструментом разработки таких пользовательских алгоритмов для целевых устройств, где необходимо использовать сложные конструкции условий, циклов и переключателей.

В состояниях, действиях и условиях блока Chart генератором кода Engee поддерживаются следующие конструкции языка Julia:

  • Оператор if-else/elseif

  • Оператор while

  • Оператор for …​ in M:N

  • Арифметические операторы + и - (унарные и бинарные), *, /, %

  • Логические операторы &&, || и !

  • Операторы сравнения <, <=, >, >=, ==, != (поддерживаются только бинарные, с двумя операндами)

Поддерживаемые генератором кода Engee возможности блока Chart:

  • Безусловные и условные переходы

  • Входные, локальные, выходные переменные типа v (представлен типом Float64 в Julia)

  • Несколько несвязанных диаграмм состояний, графов переходов

  • Несколько инструкций, записанных в одну строку через разделитель (;) в теле действий переходов и в состояниях

  • Многострочные инструкции в состояниях

  • Группы операторов entry, during, exit, on

  • Сокращенные наименования групп операторов Chart (en, du, ex)

  • Операторы темпоральной логики after, at, before, elapsed, et, every, t, temporalCount

  • Функции floor(Int64,…​) и ceil(Int64,…​)

  • Комментирование в состояниях, теле условий и действий переходов

  • Поддержка механизма Backtracking (когда между состояниями есть промежуточные узлы)

  • Поддержка механизма суперпереходов, когда переходы между состояниями пересекают границы блоков-состояний. Это могут быть переходы между:

    • внешним состоянием и его вложенным состоянием, когда глубина вложенности больше единицы;

    • вложенными состояниями двух различных внешних состояний, не вложенных друг в друга.

  • Также поддерживаются суперпереходы по умолчанию, когда суперпереход начинается не в родительском состоянии, а приходит снаружи родительского состояния.