diff --git a/src/transpiler/parser.cpp b/src/transpiler/parser.cpp index 499f8ac..577501b 100644 --- a/src/transpiler/parser.cpp +++ b/src/transpiler/parser.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include #include #include @@ -192,10 +194,23 @@ Result parseQuestions(const std::vector& tokens) { // Apstrādā pārtraukumu, ja tāds ir. if (isInBounds(i + 1) && tokens[i + 1].tokenType == TokenType::CooldownStart) { try { - cooldown = std::stod(tokens[i + 2].content); + auto cooldownContent = tokens[i + 2].content; + // Pārbauda, vai dotais pārtraukums ir viens skaitlis, kas ir: + // - pozitīvs; + // - viens no: vesels skaitlis vai ar punktu atdalīts skatilis + // ar norādīto vai bez norādītās veselās daļas. + static const std::regex decimalNumExp( + "^\\d*(\\.\\d+)?$", + std::regex_constants::ECMAScript | std::regex_constants::icase + ); + if (!std::regex_match(cooldownContent, decimalNumExp)) { + throw std::invalid_argument("Nekorekts pārtraukuma formāts"); + } + cooldown = std::stod(cooldownContent); } catch (std::exception e) { return makeResult( - "Kļūda nolasot pārtraukumu", + "Nekorekts pārtraukums. Pārtraukums ir viens pozitīvs " + "decimāls skaitlis ar punktu vai bez punkta", tokens[i + 1] ); }