From 7b2d9c6ec08c5d04282a65f676af329e29600723 Mon Sep 17 00:00:00 2001 From: jorenchik Date: Sat, 30 Nov 2024 21:40:47 +0200 Subject: [PATCH] addition in cooldown parsing logic --- src/transpiler/parser.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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] ); }