Skip to content

biveraxe/IoTScenario

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IoTScenario

Песочница для отладки механизма сценариев для проекта IoT Manager https://github.com/IoTManagerProject/IoTManager Сценарии позволяют выполнять математические и логические операции с доступными значениями от датчиков в системе и выполнять действия предусмотренные модулями в зависимости от условий. Алгоритм обработки сценариев основан на использовании подхода формирования Abstract Syntax Tree (Абстрактное Синтаксическое Дерево или Дерево Парсинга) на основе лексического и синтаксического анализа текстового представления. Это дает возможность сформировать дерево бинарных объектов для постоянного пересчета параметров с прямым доступ к переменным и функциям системы и модулей без медленного повторного текстового анализа. Код основан на примерах из цикла статей "LLVM Tutorial" https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl01.html

Запуск

Для выполнения тестов достаточно запустить файл run.cmd. Сценарий загрузится и выполнится автоматически из файла scenario.txt. В консоли программа выведет для каждого узла дерева соответствующие значения, по которым можно понять верность выполнения сценария. Замечание: Т.к. данный код будет работать совместно с другой системой, то для отладки существует только одна переменная имитирующая элемент конфигурации IoTManager. Это значит, что любая переменная иил вызов команды будет возвращать всегда одно и тоже значение. Для вызова команды - число 20, для значения переменной - число 0

Синтаксис

  • Поддерживаются текстовые "строка" и числовые 42 значения констант в тексте. В сценариях существует два типа данных (float и String). Какой тип данных будет иметь переменная или возвращаемое значение функции зависит от модуля, который содержит эти данные.
  • Возможно использовать бинарные операции сравнения: ==, !=, <, <=, >, >= , арифметические: +, -, *, / и присваивание =. Деление на ноль возможно, но результат будет большое число. Пока нет скобок для расстановки приоритетов. Но действуют приоритеты для операций:
    = - 1;  
    == - 3;  // ==
    != - 4;  // !=
    <= - 5;  // <=
    >= - 6;  // >=
    < - 10;
    > - 10;
    + - 20;
    - - 20;
    / - 35;
    * - 40;  // highest.
  • Комбинация констант и бинарных операций формирует выражение. Каждое выражение должно заканчиваться точкой с запятой ; если в одном блоке кода {} присутствует несколько выражений.
  • Базовый элемент сценария - это конструкция IF () THEN {} ELSE {}. esle - не обязателен, {} - не обязательны для одного выражения.
  • После IF должно следовать условие внутри (). В условии могут применяться бинарные операторы, числовые и строковые константы, переменные или вызовы функций.
  • После THEN или ELSE могут идти одно выражение или {} для объединения нескольких выражений.
  • В выражениях возможно использовать вызовы функций модуля с передачей параметров в формате: ID.ИмяФункции(Параметр1, Параметр2, ...). Параметры могут быть как числовые так и строковые. Число параметров не ограничено и обусловлено возможностями модуля, который отвечает за объект с идентификатором ID. Возможен вызов функции без указания имени. в данной версии возвращаемое значение всегда будет число 20, если не указаны параметры, иначе значение первого параметра
  • # - комментарий

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors