Skip to content

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

Packages

Contributors

Languages