mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 11:59:12 +03:00
не рабочая версия
This commit is contained in:
3
data_svelte/scenario.json
Normal file
3
data_svelte/scenario.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"scen": ""
|
||||||
|
}
|
||||||
@@ -63,7 +63,7 @@ void setup() {
|
|||||||
asyncUdpInit();
|
asyncUdpInit();
|
||||||
|
|
||||||
//загрузка сценария
|
//загрузка сценария
|
||||||
iotScen.loadScenario("/scenario.txt");
|
iotScen.loadScenario("/scenario.json");
|
||||||
// создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке
|
// создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке
|
||||||
IoTItems.push_back((IoTItem *)new externalVariable("{\"id\":\"onStart\",\"val\":1,\"int\":60}"));
|
IoTItems.push_back((IoTItem *)new externalVariable("{\"id\":\"onStart\",\"val\":1,\"int\":60}"));
|
||||||
generateEvent("onStart", "");
|
generateEvent("onStart", "");
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|||||||
sendFileToWs("/items.json", num, 1024);
|
sendFileToWs("/items.json", num, 1024);
|
||||||
sendFileToWs("/widgets.json", num, 1024);
|
sendFileToWs("/widgets.json", num, 1024);
|
||||||
sendFileToWs("/config.json", num, 1024);
|
sendFileToWs("/config.json", num, 1024);
|
||||||
sendFileToWs("/scenario.txt", num, 1024);
|
sendFileToWs("/scenario.json", num, 1024);
|
||||||
standWebSocket.sendTXT(num, settingsFlashJson);
|
standWebSocket.sendTXT(num, settingsFlashJson);
|
||||||
}
|
}
|
||||||
//**сохранение**//
|
//**сохранение**//
|
||||||
@@ -73,7 +73,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|||||||
clearConfigure();
|
clearConfigure();
|
||||||
Serial.println("Start config");
|
Serial.println("Start config");
|
||||||
configure("/config.json");
|
configure("/config.json");
|
||||||
iotScen.loadScenario("/scenario.txt");
|
iotScen.loadScenario("/scenario.json");
|
||||||
}
|
}
|
||||||
//**сохранение**//
|
//**сохранение**//
|
||||||
if (headerStr == "/tuoyal|") {
|
if (headerStr == "/tuoyal|") {
|
||||||
@@ -81,13 +81,9 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
|
|||||||
}
|
}
|
||||||
//**сохранение**//
|
//**сохранение**//
|
||||||
if (headerStr == "/oiranecs|") {
|
if (headerStr == "/oiranecs|") {
|
||||||
if (length - headerLenth == 0) {
|
writeFileUint8tByFrames("scenario.json", payload, length, headerLenth, 256);
|
||||||
SerialPrint("i", "WS", "Scenario file empty");
|
iotScen.loadScenario("/scenario.json");
|
||||||
writeFile("/scenario.txt", "");
|
|
||||||
} else {
|
|
||||||
writeFileUint8tByFrames("scenario.txt", payload, length, headerLenth, 256);
|
|
||||||
iotScen.loadScenario("/scenario.txt");
|
|
||||||
}
|
|
||||||
// создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке
|
// создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке
|
||||||
IoTItems.push_back((IoTItem*)new externalVariable("{\"id\":\"onStart\",\"val\":1,\"int\":60}"));
|
IoTItems.push_back((IoTItem*)new externalVariable("{\"id\":\"onStart\",\"val\":1,\"int\":60}"));
|
||||||
generateEvent("onStart", "");
|
generateEvent("onStart", "");
|
||||||
|
|||||||
@@ -9,23 +9,28 @@
|
|||||||
|
|
||||||
bool isIotScenException; // признак исключения и попытки прекратить выполнение сценария заранее
|
bool isIotScenException; // признак исключения и попытки прекратить выполнение сценария заранее
|
||||||
|
|
||||||
|
|
||||||
// Лексический анализатор возвращает токены [0-255], если это неизвестны,
|
// Лексический анализатор возвращает токены [0-255], если это неизвестны,
|
||||||
// иначе одну из известных единиц кода
|
// иначе одну из известных единиц кода
|
||||||
enum Token {
|
enum Token {
|
||||||
tok_eof = -1,
|
tok_eof = -1,
|
||||||
|
|
||||||
// операнды (первичные выражения: идентификаторы, числа)
|
// операнды (первичные выражения: идентификаторы, числа)
|
||||||
tok_identifier = -4, tok_number = -5, tok_string = -3,
|
tok_identifier = -4,
|
||||||
|
tok_number = -5,
|
||||||
|
tok_string = -3,
|
||||||
|
|
||||||
// двухсимвольные операторы бинарных операций
|
// двухсимвольные операторы бинарных операций
|
||||||
tok_equal = -2, tok_notequal = -9, tok_lesseq = -10, tok_greateq = -11,
|
tok_equal = -2,
|
||||||
|
tok_notequal = -9,
|
||||||
|
tok_lesseq = -10,
|
||||||
|
tok_greateq = -11,
|
||||||
|
|
||||||
// управление
|
// управление
|
||||||
tok_if = -6, tok_then = -7, tok_else = -8
|
tok_if = -6,
|
||||||
|
tok_then = -7,
|
||||||
|
tok_else = -8
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Abstract Syntax Tree (Абстрактное Синтаксическое Дерево или Дерево Парсинга)
|
// Abstract Syntax Tree (Абстрактное Синтаксическое Дерево или Дерево Парсинга)
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
@@ -40,6 +45,7 @@ bool ExprAST::hasEventIdName(String eventIdName) {return false;} // по умо
|
|||||||
/// NumberExprAST - Класс узла выражения для числовых литералов (Например, "1.0").
|
/// NumberExprAST - Класс узла выражения для числовых литералов (Например, "1.0").
|
||||||
class NumberExprAST : public ExprAST {
|
class NumberExprAST : public ExprAST {
|
||||||
IoTValue Val;
|
IoTValue Val;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NumberExprAST(float val) { Val.valD = val; }
|
NumberExprAST(float val) { Val.valD = val; }
|
||||||
|
|
||||||
@@ -53,8 +59,12 @@ public:
|
|||||||
/// StringExprAST - Класс узла выражения для строковых литералов (Например, "Example with spaces and quotes").
|
/// StringExprAST - Класс узла выражения для строковых литералов (Например, "Example with spaces and quotes").
|
||||||
class StringExprAST : public ExprAST {
|
class StringExprAST : public ExprAST {
|
||||||
IoTValue Val;
|
IoTValue Val;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
StringExprAST(String val) { Val.isDecimal = false; Val.valS = val;}
|
StringExprAST(String val) {
|
||||||
|
Val.isDecimal = false;
|
||||||
|
Val.valS = val;
|
||||||
|
}
|
||||||
|
|
||||||
IoTValue *exec() {
|
IoTValue *exec() {
|
||||||
if (isIotScenException) return nullptr;
|
if (isIotScenException) return nullptr;
|
||||||
@@ -76,8 +86,10 @@ public:
|
|||||||
|
|
||||||
int setValue(IoTValue *val) {
|
int setValue(IoTValue *val) {
|
||||||
if (!ItemIsLocal) Item = findIoTItem(Name);
|
if (!ItemIsLocal) Item = findIoTItem(Name);
|
||||||
if (Item) Item->setValue(*val);
|
if (Item)
|
||||||
else return 0;
|
Item->setValue(*val);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -117,11 +129,16 @@ public:
|
|||||||
if (isIotScenException) return nullptr;
|
if (isIotScenException) return nullptr;
|
||||||
String printStr = "";
|
String printStr = "";
|
||||||
|
|
||||||
if (Op == tok_equal) printStr = "==";
|
if (Op == tok_equal)
|
||||||
else if (Op == tok_notequal) printStr = "!=";
|
printStr = "==";
|
||||||
else if (Op == tok_lesseq) printStr = "<=";
|
else if (Op == tok_notequal)
|
||||||
else if (Op == tok_greateq) printStr = ">=";
|
printStr = "!=";
|
||||||
else printStr = printStr + (char)Op;
|
else if (Op == tok_lesseq)
|
||||||
|
printStr = "<=";
|
||||||
|
else if (Op == tok_greateq)
|
||||||
|
printStr = ">=";
|
||||||
|
else
|
||||||
|
printStr = printStr + (char)Op;
|
||||||
|
|
||||||
// Serial.printf("Call from BinaryExprAST: %s\n", printStr.c_str());
|
// Serial.printf("Call from BinaryExprAST: %s\n", printStr.c_str());
|
||||||
|
|
||||||
@@ -167,8 +184,10 @@ public:
|
|||||||
val.valD = lhs->valD * rhs->valD;
|
val.valD = lhs->valD * rhs->valD;
|
||||||
break;
|
break;
|
||||||
case '/':
|
case '/':
|
||||||
if (rhs->valD != 0) val.valD = lhs->valD / rhs->valD;
|
if (rhs->valD != 0)
|
||||||
else val.valD = 3.4E+38;
|
val.valD = lhs->valD / rhs->valD;
|
||||||
|
else
|
||||||
|
val.valD = 3.4E+38;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '|':
|
case '|':
|
||||||
@@ -185,8 +204,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!lhs->isDecimal || !rhs->isDecimal) {
|
if (!lhs->isDecimal || !rhs->isDecimal) {
|
||||||
if (lhs->isDecimal) lhsStr = lhs->valD; else lhsStr = lhs->valS;
|
if (lhs->isDecimal)
|
||||||
if (rhs->isDecimal) rhsStr = rhs->valD; else rhsStr = rhs->valS;
|
lhsStr = lhs->valD;
|
||||||
|
else
|
||||||
|
lhsStr = lhs->valS;
|
||||||
|
if (rhs->isDecimal)
|
||||||
|
rhsStr = rhs->valD;
|
||||||
|
else
|
||||||
|
rhsStr = rhs->valS;
|
||||||
switch (Op) {
|
switch (Op) {
|
||||||
case tok_equal:
|
case tok_equal:
|
||||||
val.valD = compStr(lhsStr, rhsStr);
|
val.valD = compStr(lhsStr, rhsStr);
|
||||||
@@ -216,7 +241,6 @@ public:
|
|||||||
|
|
||||||
return true; // str1 == str2;
|
return true; // str1 == str2;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// CallExprAST - Класс узла выражения для вызова команды.
|
/// CallExprAST - Класс узла выражения для вызова команды.
|
||||||
@@ -239,8 +263,10 @@ public:
|
|||||||
|
|
||||||
if (Cmd == "exit" || Callee == "exit") { // если системная команда, то выполняем и выходим
|
if (Cmd == "exit" || Callee == "exit") { // если системная команда, то выполняем и выходим
|
||||||
IoTValue *tmp;
|
IoTValue *tmp;
|
||||||
if (Args.size() > 0 && Args[0]) tmp = Args[0]->exec();
|
if (Args.size() > 0 && Args[0])
|
||||||
else SerialPrint("i", "SysExt", "Exit");
|
tmp = Args[0]->exec();
|
||||||
|
else
|
||||||
|
SerialPrint("i", "SysExt", "Exit");
|
||||||
if (tmp) SerialPrint("i", "SysExt", "Exit = '" + tmp->valS + "'");
|
if (tmp) SerialPrint("i", "SysExt", "Exit = '" + tmp->valS + "'");
|
||||||
|
|
||||||
isIotScenException = true;
|
isIotScenException = true;
|
||||||
@@ -255,8 +281,10 @@ public:
|
|||||||
for (unsigned int i = 0; i < Args.size(); i++) {
|
for (unsigned int i = 0; i < Args.size(); i++) {
|
||||||
if (Args[i] == nullptr) return nullptr;
|
if (Args[i] == nullptr) return nullptr;
|
||||||
IoTValue *tmp = Args[i]->exec();
|
IoTValue *tmp = Args[i]->exec();
|
||||||
if (tmp != nullptr) ArgsAsIoTValue.push_back(*tmp);
|
if (tmp != nullptr)
|
||||||
else return nullptr; //ArgsAsIoTValue.push_back(zeroIotVal);
|
ArgsAsIoTValue.push_back(*tmp);
|
||||||
|
else
|
||||||
|
return nullptr; // ArgsAsIoTValue.push_back(zeroIotVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = Item->execute(Cmd, ArgsAsIoTValue); // вызываем команду из модуля напрямую с передачей всех аргументов
|
ret = Item->execute(Cmd, ArgsAsIoTValue); // вызываем команду из модуля напрямую с передачей всех аргументов
|
||||||
@@ -275,7 +303,6 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Для сокращения количества преобразований используем числовые коды для фиксации названия системной функции,
|
// Для сокращения количества преобразований используем числовые коды для фиксации названия системной функции,
|
||||||
// которые поддерживает прошивка
|
// которые поддерживает прошивка
|
||||||
enum SysOp {
|
enum SysOp {
|
||||||
@@ -402,23 +429,41 @@ class SysCallExprAST : public ExprAST {
|
|||||||
public:
|
public:
|
||||||
SysCallExprAST(const String &callee, std::vector<ExprAST *> &args)
|
SysCallExprAST(const String &callee, std::vector<ExprAST *> &args)
|
||||||
: Callee(callee), Args(args) {
|
: Callee(callee), Args(args) {
|
||||||
if (Callee == "reboot") operation = sysop_reboot; else
|
if (Callee == "reboot")
|
||||||
if (Callee == "digitalRead") operation = sysop_digitalRead; else
|
operation = sysop_reboot;
|
||||||
if (Callee == "analogRead") operation = sysop_analogRead; else
|
else if (Callee == "digitalRead")
|
||||||
if (Callee == "digitalWrite") operation = sysop_digitalWrite; else
|
operation = sysop_digitalRead;
|
||||||
if (Callee == "digitalInvert") operation = sysop_digitalInvert; else
|
else if (Callee == "analogRead")
|
||||||
if (Callee == "deepSleep") operation = sysop_deepSleep; else
|
operation = sysop_analogRead;
|
||||||
if (Callee == "getTime") operation = sysop_getTime; else
|
else if (Callee == "digitalWrite")
|
||||||
if (Callee == "getHours") operation = sysop_getHours; else
|
operation = sysop_digitalWrite;
|
||||||
if (Callee == "getMinutes") operation = sysop_getMinutes; else
|
else if (Callee == "digitalInvert")
|
||||||
if (Callee == "getSeconds") operation = sysop_getSeconds; else
|
operation = sysop_digitalInvert;
|
||||||
if (Callee == "getMonth") operation = sysop_getMonth; else
|
else if (Callee == "deepSleep")
|
||||||
if (Callee == "getDay") operation = sysop_getDay; else
|
operation = sysop_deepSleep;
|
||||||
if (Callee == "getIP") operation = sysop_getIP; else
|
else if (Callee == "getTime")
|
||||||
if (Callee == "mqttPub") operation = sysop_mqttPub; else
|
operation = sysop_getTime;
|
||||||
if (Callee == "gethhmm") operation = sysop_gethhmm; else
|
else if (Callee == "getHours")
|
||||||
if (Callee == "gethhmmss") operation = sysop_gethhmmss; else
|
operation = sysop_getHours;
|
||||||
if (Callee == "getTime") operation = sysop_getTime; else
|
else if (Callee == "getMinutes")
|
||||||
|
operation = sysop_getMinutes;
|
||||||
|
else if (Callee == "getSeconds")
|
||||||
|
operation = sysop_getSeconds;
|
||||||
|
else if (Callee == "getMonth")
|
||||||
|
operation = sysop_getMonth;
|
||||||
|
else if (Callee == "getDay")
|
||||||
|
operation = sysop_getDay;
|
||||||
|
else if (Callee == "getIP")
|
||||||
|
operation = sysop_getIP;
|
||||||
|
else if (Callee == "mqttPub")
|
||||||
|
operation = sysop_mqttPub;
|
||||||
|
else if (Callee == "gethhmm")
|
||||||
|
operation = sysop_gethhmm;
|
||||||
|
else if (Callee == "gethhmmss")
|
||||||
|
operation = sysop_gethhmmss;
|
||||||
|
else if (Callee == "getTime")
|
||||||
|
operation = sysop_getTime;
|
||||||
|
else
|
||||||
operation = sysop_notfound;
|
operation = sysop_notfound;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,8 +477,10 @@ public:
|
|||||||
for (unsigned int i = 0; i < Args.size(); i++) {
|
for (unsigned int i = 0; i < Args.size(); i++) {
|
||||||
if (Args[i] == nullptr) return nullptr;
|
if (Args[i] == nullptr) return nullptr;
|
||||||
IoTValue *tmp = Args[i]->exec();
|
IoTValue *tmp = Args[i]->exec();
|
||||||
if (tmp != nullptr) ArgsAsIoTValue.push_back(*tmp);
|
if (tmp != nullptr)
|
||||||
else return nullptr;
|
ArgsAsIoTValue.push_back(*tmp);
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sysExecute(operation, ArgsAsIoTValue); // вызываем функцию интерпретатор с передачей всех аргументов
|
ret = sysExecute(operation, ArgsAsIoTValue); // вызываем функцию интерпретатор с передачей всех аргументов
|
||||||
@@ -460,7 +507,8 @@ public:
|
|||||||
: Cond(cond), Then(then), Else(_else) {
|
: Cond(cond), Then(then), Else(_else) {
|
||||||
if (IDNames) {
|
if (IDNames) {
|
||||||
_IDNames = *IDNames;
|
_IDNames = *IDNames;
|
||||||
} else _IDNames = "";
|
} else
|
||||||
|
_IDNames = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasEventIdName(String eventIdName) {
|
bool hasEventIdName(String eventIdName) {
|
||||||
@@ -534,12 +582,10 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Lexer (Лексический анализатор)
|
// Lexer (Лексический анализатор)
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
|
||||||
char IoTScenario::getLastChar() {
|
char IoTScenario::getLastChar() {
|
||||||
strIterator++;
|
strIterator++;
|
||||||
return strFromFile->charAt(strIterator - 1);
|
return strFromFile->charAt(strIterator - 1);
|
||||||
@@ -547,7 +593,6 @@ public:
|
|||||||
|
|
||||||
/// gettok - Возвращает следующий токен из стандартного потока ввода.
|
/// gettok - Возвращает следующий токен из стандартного потока ввода.
|
||||||
int IoTScenario::gettok() {
|
int IoTScenario::gettok() {
|
||||||
|
|
||||||
// Пропускаем пробелы.
|
// Пропускаем пробелы.
|
||||||
while (isspace(LastChar))
|
while (isspace(LastChar))
|
||||||
LastChar = getLastChar();
|
LastChar = getLastChar();
|
||||||
@@ -607,7 +652,8 @@ public:
|
|||||||
if (LastChar == '=') {
|
if (LastChar == '=') {
|
||||||
LastChar = getLastChar();
|
LastChar = getLastChar();
|
||||||
return tok_equal;
|
return tok_equal;
|
||||||
} else return '=';
|
} else
|
||||||
|
return '=';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LastChar == '!') {
|
if (LastChar == '!') {
|
||||||
@@ -615,7 +661,8 @@ public:
|
|||||||
if (LastChar == '=') {
|
if (LastChar == '=') {
|
||||||
LastChar = getLastChar();
|
LastChar = getLastChar();
|
||||||
return tok_notequal;
|
return tok_notequal;
|
||||||
} else return '!';
|
} else
|
||||||
|
return '!';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LastChar == '<') {
|
if (LastChar == '<') {
|
||||||
@@ -623,7 +670,8 @@ public:
|
|||||||
if (LastChar == '=') {
|
if (LastChar == '=') {
|
||||||
LastChar = getLastChar();
|
LastChar = getLastChar();
|
||||||
return tok_lesseq;
|
return tok_lesseq;
|
||||||
} else return '<';
|
} else
|
||||||
|
return '<';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LastChar == '>') {
|
if (LastChar == '>') {
|
||||||
@@ -631,7 +679,8 @@ public:
|
|||||||
if (LastChar == '=') {
|
if (LastChar == '=') {
|
||||||
LastChar = getLastChar();
|
LastChar = getLastChar();
|
||||||
return tok_greateq;
|
return tok_greateq;
|
||||||
} else return '>';
|
} else
|
||||||
|
return '>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// В противном случае просто возвращаем символ как значение ASCII
|
// В противном случае просто возвращаем символ как значение ASCII
|
||||||
@@ -640,12 +689,10 @@ public:
|
|||||||
return ThisChar;
|
return ThisChar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Parser (Парсер или Синтаксический Анализатор)
|
// Parser (Парсер или Синтаксический Анализатор)
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
|
||||||
/// CurTok/getNextToken - Предоставляет простой буфер токенов. CurTok - это текущий
|
/// CurTok/getNextToken - Предоставляет простой буфер токенов. CurTok - это текущий
|
||||||
/// токен, просматриваемый парсером. getNextToken получает следующий токен от
|
/// токен, просматриваемый парсером. getNextToken получает следующий токен от
|
||||||
/// лексического анализатора и обновляет CurTok.
|
/// лексического анализатора и обновляет CurTok.
|
||||||
@@ -665,8 +712,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Error* - Это небольшие вспомогательные функции для обработки ошибок.
|
/// Error* - Это небольшие вспомогательные функции для обработки ошибок.
|
||||||
ExprAST* IoTScenario::Error(const char *Str) { Serial.printf("Error: %s\n", Str); return nullptr;}
|
ExprAST *IoTScenario::Error(const char *Str) {
|
||||||
|
Serial.printf("Error: %s\n", Str);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
/// identifierexpr
|
/// identifierexpr
|
||||||
/// ::= identifier
|
/// ::= identifier
|
||||||
@@ -716,7 +765,6 @@ public:
|
|||||||
return new SysCallExprAST(IdName, Args); // создаем объект запуска системной функции
|
return new SysCallExprAST(IdName, Args); // создаем объект запуска системной функции
|
||||||
else
|
else
|
||||||
return new CallExprAST(IdName, Cmd, Args, tmpItem); // создаем объект запуска функции в любом случае даж если не нашли Item
|
return new CallExprAST(IdName, Cmd, Args, tmpItem); // создаем объект запуска функции в любом случае даж если не нашли Item
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// numberexpr ::= number
|
/// numberexpr ::= number
|
||||||
@@ -751,11 +799,12 @@ public:
|
|||||||
if (CurTok != ';')
|
if (CurTok != ';')
|
||||||
return Error("Expected ';' in operation list");
|
return Error("Expected ';' in operation list");
|
||||||
int ttok = getNextToken();
|
int ttok = getNextToken();
|
||||||
if (!ttok) { Error("Expected '}'"); break; }
|
if (!ttok) {
|
||||||
|
Error("Expected '}'");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (CurTok == '}') break;
|
if (CurTok == '}') break;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -803,7 +852,8 @@ public:
|
|||||||
/// ::= parenexpr
|
/// ::= parenexpr
|
||||||
ExprAST *IoTScenario::ParsePrimary(String *IDNames) {
|
ExprAST *IoTScenario::ParsePrimary(String *IDNames) {
|
||||||
switch (CurTok) {
|
switch (CurTok) {
|
||||||
default: return Error("unknown token when expecting an expression");
|
default:
|
||||||
|
return Error("unknown token when expecting an expression");
|
||||||
case tok_identifier: {
|
case tok_identifier: {
|
||||||
if (IDNames) {
|
if (IDNames) {
|
||||||
String tmpstr = *IDNames;
|
String tmpstr = *IDNames;
|
||||||
@@ -811,11 +861,16 @@ public:
|
|||||||
}
|
}
|
||||||
return ParseIdentifierExpr(IDNames);
|
return ParseIdentifierExpr(IDNames);
|
||||||
}
|
}
|
||||||
case tok_number: return ParseNumberExpr();
|
case tok_number:
|
||||||
case '(': return ParseParenExpr();
|
return ParseNumberExpr();
|
||||||
case '{': return ParseBracketsExpr();
|
case '(':
|
||||||
case tok_string: return ParseQuotesExpr();
|
return ParseParenExpr();
|
||||||
case tok_if: return ParseIfExpr(IDNames);
|
case '{':
|
||||||
|
return ParseBracketsExpr();
|
||||||
|
case tok_string:
|
||||||
|
return ParseQuotesExpr();
|
||||||
|
case tok_if:
|
||||||
|
return ParseIfExpr(IDNames);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -852,7 +907,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// expression
|
/// expression
|
||||||
/// ::= primary binoprhs
|
/// ::= primary binoprhs
|
||||||
///
|
///
|
||||||
@@ -877,6 +931,8 @@ public:
|
|||||||
if (myfile.available()) {
|
if (myfile.available()) {
|
||||||
strFromFile = new String("");
|
strFromFile = new String("");
|
||||||
*strFromFile = myfile.readString();
|
*strFromFile = myfile.readString();
|
||||||
|
Serial.println(*strFromFile);
|
||||||
|
jsonRead(*strFromFile, "scen", *strFromFile, true);
|
||||||
myfile.close();
|
myfile.close();
|
||||||
|
|
||||||
getNextToken();
|
getNextToken();
|
||||||
@@ -891,12 +947,16 @@ public:
|
|||||||
// Serial.printf("vvvvvvvvvvvvvvvv %s", IDNames.c_str());
|
// Serial.printf("vvvvvvvvvvvvvvvv %s", IDNames.c_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: getNextToken(); break;
|
default:
|
||||||
|
getNextToken();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete strFromFile;
|
delete strFromFile;
|
||||||
strIterator = 0;
|
strIterator = 0;
|
||||||
} else {Error("Open file scenario error");}
|
} else {
|
||||||
|
Error("Open file scenario error");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IoTScenario::ExecScenario(String eventIdName) { // запускаем поочереди все корневые элементы выражений в сценарии, ожидаемо - это IFы
|
void IoTScenario::ExecScenario(String eventIdName) { // запускаем поочереди все корневые элементы выражений в сценарии, ожидаемо - это IFы
|
||||||
@@ -910,7 +970,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IoTScenario::IoTScenario() {
|
IoTScenario::IoTScenario() {
|
||||||
// Задаём стандартные бинарные операторы.
|
// Задаём стандартные бинарные операторы.
|
||||||
// 1 - наименьший приоритет.
|
// 1 - наименьший приоритет.
|
||||||
|
|||||||
Reference in New Issue
Block a user