From e658db23be618f18196eb52eb23229558dbc0886 Mon Sep 17 00:00:00 2001 From: jorenchik Date: Mon, 18 Nov 2024 13:23:23 +0200 Subject: [PATCH] parsing fixes and improvements --- src/include/parser.h | 1 - src/transpiler/parser.cpp | 24 +++++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/include/parser.h b/src/include/parser.h index 251619e..2c7ae6f 100644 --- a/src/include/parser.h +++ b/src/include/parser.h @@ -9,7 +9,6 @@ struct Question { double cooldown; std::string questionText; - std::string section; virtual std::string toString() const = 0; virtual ~Question() = default; diff --git a/src/transpiler/parser.cpp b/src/transpiler/parser.cpp index 57d8adc..1fc7276 100644 --- a/src/transpiler/parser.cpp +++ b/src/transpiler/parser.cpp @@ -34,7 +34,8 @@ void initTransitions() { TokenType::EndOfFile, }; (*transitions)[TokenType::MatchGroupEnd] = { - TokenType::ElementDashStart + TokenType::ElementDashStart, + TokenType::EndOfFile }; (*transitions)[TokenType::QuestionEnd] = { TokenType::ElementDashStart, @@ -94,7 +95,7 @@ Result ValidateGrammar(const std::vector& tokens) { }; return { .error=std::format( - "nekorekta tekstvienību secība: \"{}\" nevar būt pirms \"{}\"", + "Nekorekta tekstvienību secība: \"{}\" nevar būt pirms \"{}\"", std::string(capitalize(Token::toString(&token.tokenType))), std::string(capitalize(Token::toString(&nextToken.tokenType))) ), @@ -106,9 +107,6 @@ Result ValidateGrammar(const std::vector& tokens) { return {}; } -// @Fix: before EOF is acceptable -// @Fix: remove section from questions - /* * Apstrādā tekstvienības, iegūstot datumu un laiku un vienu vai vairākus * dažāda veida jautājumus. Veiksmes gadījumā atgriež jautājumu norādes un @@ -144,7 +142,6 @@ Result parseQuestions(const std::vector& tokens) { ); } - std::string section; size_t i = 0; if (debug) { @@ -346,7 +343,6 @@ Result parseQuestions(const std::vector& tokens) { auto *question = new GroupQuestion(); question->cooldown = cooldown; question->questionText = questionText; - question->section = section; // Izveido grupas; i - elementu iterators; k - grupu iterators. int32_t k = -1; @@ -375,7 +371,6 @@ Result parseQuestions(const std::vector& tokens) { auto *question = new MultiElementQuestion(); question->cooldown = cooldown; question->questionText = cleanContent(questionText); - question->section = section; // Izveido vairāku elementu jautājumu. auto existingElements = std::set(); @@ -413,7 +408,12 @@ Result parseQuestions(const std::vector& tokens) { std::cout << question->toString() << "\n"; } } - } + } else { + return makeResult( + "Jautājums nevar būt bez atbildes elementiem", + questionStartToken + ); + } } else if (tokens[i].tokenType == TokenType::EndOfFile) { if (debug) { std::cout << "Fails beidzās: EndOfFile\n"; @@ -453,8 +453,7 @@ std::string MultiElementQuestion::toString() const { ss << opener << " " << choice.answer << "; "; } return std::format( - "\nsekcija:{}\npārtraukums:{}\n{}\n{}", - section, + "\npārtraukums:{}\n{}\n{}", cooldown, questionText, ss.str() @@ -474,8 +473,7 @@ std::string GroupQuestion::toString() const { ss << "; "; } return std::format( - "\nsekcija:{}\npārtraukums:{}\n{}\n{}", - section, + "\npārtraukums:{}\n{}\n{}", cooldown, questionText, ss.str()