From 502e4d2f6f5fcd7625102eaa31b3599986f87c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Grodzi=C5=84ski?= Date: Thu, 17 Jul 2025 16:00:12 +0900 Subject: [PATCH] added parsee and parsee group --- src/Parser/Parsee.cpp | 39 --------------------- src/Parser/Parsee.h | 37 -------------------- src/Parser/Parsee/Parsee.cpp | 36 +++++++++++++++++++ src/Parser/Parsee/Parsee.h | 31 +++++++++++++++++ src/Parser/Parsee/ParseeGroup.cpp | 24 +++++++++++++ src/Parser/Parsee/ParseeGroup.h | 24 +++++++++++++ src/Parser/Parser.cpp | 57 ++++++++++++++++--------------- src/Parser/Parser.h | 5 ++- 8 files changed, 146 insertions(+), 107 deletions(-) delete mode 100644 src/Parser/Parsee.cpp delete mode 100644 src/Parser/Parsee.h create mode 100644 src/Parser/Parsee/Parsee.cpp create mode 100644 src/Parser/Parsee/Parsee.h create mode 100644 src/Parser/Parsee/ParseeGroup.cpp create mode 100644 src/Parser/Parsee/ParseeGroup.h diff --git a/src/Parser/Parsee.cpp b/src/Parser/Parsee.cpp deleted file mode 100644 index 735be13..0000000 --- a/src/Parser/Parsee.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "Parsee.h" - -#include "Lexer/Token.h" - -ParseeToken::ParseeToken(TokenKind tokenKind, bool isRequired, bool shouldReturn): -tokenKind(tokenKind), isRequired(isRequired), shouldReturn(shouldReturn) { } - -TokenKind ParseeToken::getTokenKind() { - return tokenKind; -} - -bool ParseeToken::getIsRequired() { - return isRequired; -} - -bool ParseeToken::getShouldReturn() { - return shouldReturn; -} - -ParseeTokensGroup::ParseeTokensGroup(bool isRequired, vector tokens, optional repeatedGroup): -isRequired(isRequired), tokens(tokens) { - if (repeatedGroup) { - this->repeatedGroup = *repeatedGroup; - } else { - this->repeatedGroup = {}; - } - } - -bool ParseeTokensGroup::getIsRequired() { - return isRequired; -} - -vector ParseeTokensGroup::getTokens() { - return tokens; -} - -optional> ParseeTokensGroup::getRepeatedGroup() { - return repeatedGroup; -} \ No newline at end of file diff --git a/src/Parser/Parsee.h b/src/Parser/Parsee.h deleted file mode 100644 index 22c274e..0000000 --- a/src/Parser/Parsee.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef PARSEE_H -#define PARSEE_H - -#include -#include - -enum class TokenKind; - -using namespace std; - -class ParseeToken { -private: - TokenKind tokenKind; - bool isRequired; - bool shouldReturn; - -public: - ParseeToken(TokenKind tokenKind, bool isRequired, bool shouldReturn); - TokenKind getTokenKind(); - bool getIsRequired(); - bool getShouldReturn(); -}; - -class ParseeTokensGroup { -private: - bool isRequired; - vector tokens; - optional> repeatedGroup; - -public: - ParseeTokensGroup(bool isRequired, vector tokens, optional repeatedGroup); - bool getIsRequired(); - vector getTokens(); - optional> getRepeatedGroup(); -}; - -#endif \ No newline at end of file diff --git a/src/Parser/Parsee/Parsee.cpp b/src/Parser/Parsee/Parsee.cpp new file mode 100644 index 0000000..945494e --- /dev/null +++ b/src/Parser/Parsee/Parsee.cpp @@ -0,0 +1,36 @@ +#include "Parsee.h" + +Parsee Parsee::tokenParsee(TokenKind tokenKind, bool isRequired, bool shouldReturn) { + Parsee parsee; + parsee.kind = ParseeKind::TOKEN; + parsee.tokenKind = tokenKind; + parsee.isRequired = isRequired; + parsee.shouldReturn = shouldReturn; + + return parsee; +} + +Parsee Parsee::typeParsee() { + Parsee parsee; + parsee.kind = ParseeKind::TYPE; + + return parsee; +} + +Parsee::Parsee() { } + +ParseeKind Parsee::getKind() { + return kind; +} + +TokenKind Parsee::getTokenKind() { + return tokenKind; +} + +bool Parsee::getIsRequired() { + return isRequired; +} + +bool Parsee::getShouldReturn() { + return shouldReturn; +} \ No newline at end of file diff --git a/src/Parser/Parsee/Parsee.h b/src/Parser/Parsee/Parsee.h new file mode 100644 index 0000000..649b50a --- /dev/null +++ b/src/Parser/Parsee/Parsee.h @@ -0,0 +1,31 @@ +#ifndef PARSEE_H +#define PARSEE_H + +enum class TokenKind; + +enum class ParseeKind { + TOKEN, + TYPE +}; + +class Parsee { +private: + ParseeKind kind; + TokenKind tokenKind; + bool isRequired; + bool shouldReturn; + + Parsee(); + +public: + static Parsee tokenParsee(TokenKind tokenKind, bool isRequired, bool shouldReturn); + static Parsee typeParsee(); + + ParseeKind getKind(); + + TokenKind getTokenKind(); + bool getIsRequired(); + bool getShouldReturn(); +}; + +#endif \ No newline at end of file diff --git a/src/Parser/Parsee/ParseeGroup.cpp b/src/Parser/Parsee/ParseeGroup.cpp new file mode 100644 index 0000000..debd442 --- /dev/null +++ b/src/Parser/Parsee/ParseeGroup.cpp @@ -0,0 +1,24 @@ +#include "ParseeGroup.h" + +#include "Parsee.h" + +ParseeGroup::ParseeGroup(bool isRequired, vector parsees, optional repeatedGroup): +isRequired(isRequired), parsees(parsees) { + if (repeatedGroup) { + this->repeatedGroup = *repeatedGroup; + } else { + this->repeatedGroup = {}; + } + } + +bool ParseeGroup::getIsRequired() { + return isRequired; +} + +vector ParseeGroup::getParsees() { + return parsees; +} + +optional> ParseeGroup::getRepeatedGroup() { + return repeatedGroup; +} \ No newline at end of file diff --git a/src/Parser/Parsee/ParseeGroup.h b/src/Parser/Parsee/ParseeGroup.h new file mode 100644 index 0000000..0dfb4f8 --- /dev/null +++ b/src/Parser/Parsee/ParseeGroup.h @@ -0,0 +1,24 @@ +#ifndef PARSEE_GROUP_H +#define PARSEE_GROUP_H + +#include +#include + +class Parsee; + +using namespace std; + +class ParseeGroup { +private: + bool isRequired; + vector parsees; + optional> repeatedGroup; + +public: + ParseeGroup(bool isRequired, vector parsees, optional repeatedGroup); + bool getIsRequired(); + vector getParsees(); + optional> getRepeatedGroup(); +}; + +#endif \ No newline at end of file diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 9f37104..20fc531 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -25,7 +25,8 @@ #include "Parser/Statement/StatementBlock.h" #include "Parser/Statement/StatementRepeat.h" -#include "Parsee.h" +#include "Parsee/Parsee.h" +#include "Parsee/ParseeGroup.h" Parser::Parser(vector> tokens) : tokens(tokens) { } @@ -247,12 +248,12 @@ shared_ptr Parser::matchStatementRawFunction() { shared_ptr returnType = ValueType::NONE; // identifier - groupTokens = tokensForParseeTokensGroup( - ParseeTokensGroup( + groupTokens = tokensForParseeGroup( + ParseeGroup( true, { - ParseeToken(TokenKind::IDENTIFIER, true, true), - ParseeToken(TokenKind::RAW_FUNCTION, true, false) + Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true), + Parsee::tokenParsee(TokenKind::RAW_FUNCTION, true, false) }, {} ) @@ -265,13 +266,13 @@ shared_ptr Parser::matchStatementRawFunction() { // options if (!hasError) { - groupTokens = tokensForParseeTokensGroup( - ParseeTokensGroup( + groupTokens = tokensForParseeGroup( + ParseeGroup( false, { - ParseeToken(TokenKind::LESS, true, false), - ParseeToken(TokenKind::STRING, true, true), - ParseeToken(TokenKind::GREATER, true, false) + Parsee::tokenParsee(TokenKind::LESS, true, false), + Parsee::tokenParsee(TokenKind::STRING, true, true), + Parsee::tokenParsee(TokenKind::GREATER, true, false) }, {} ) @@ -285,22 +286,22 @@ shared_ptr Parser::matchStatementRawFunction() { // arguments if (!hasError) { - groupTokens = tokensForParseeTokensGroup( - ParseeTokensGroup( + groupTokens = tokensForParseeGroup( + ParseeGroup( false, { - ParseeToken(TokenKind::COLON, true, false), - ParseeToken(TokenKind::NEW_LINE, false, false), - ParseeToken(TokenKind::IDENTIFIER, true, true), - ParseeToken(TokenKind::TYPE, true, true) + Parsee::tokenParsee(TokenKind::COLON, true, false), + Parsee::tokenParsee(TokenKind::NEW_LINE, false, false), + Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true), + Parsee::typeParsee() }, - ParseeTokensGroup( + ParseeGroup( true, { - ParseeToken(TokenKind::COMMA, true, false), - ParseeToken(TokenKind::NEW_LINE, false, false), - ParseeToken(TokenKind::IDENTIFIER, true, true), - ParseeToken(TokenKind::TYPE, true, true) + Parsee::tokenParsee(TokenKind::COMMA, true, false), + Parsee::tokenParsee(TokenKind::NEW_LINE, false, false), + Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true), + Parsee::typeParsee() }, {} ) @@ -315,13 +316,13 @@ shared_ptr Parser::matchStatementRawFunction() { // return type if (!hasError) { - groupTokens = tokensForParseeTokensGroup( - ParseeTokensGroup( + groupTokens = tokensForParseeGroup( + ParseeGroup( false, { - ParseeToken(TokenKind::RIGHT_ARROW, true, false), - ParseeToken(TokenKind::NEW_LINE, false, false), - ParseeToken(TokenKind::TYPE, true, true) + Parsee::tokenParsee(TokenKind::RIGHT_ARROW, true, false), + Parsee::tokenParsee(TokenKind::NEW_LINE, false, false), + Parsee::typeParsee() }, {} ) @@ -871,12 +872,12 @@ shared_ptr Parser::matchValueType() { return ValueType::valueTypeForToken(typeToken, subType, valueArg); } -optional>> Parser::tokensForParseeTokensGroup(ParseeTokensGroup group) { +optional>> Parser::tokensForParseeGroup(ParseeGroup group) { int nextIndex = currentIndex; vector> returnTokens; bool mustFulfill = false; - for (ParseeToken &parsee : group.getTokens()) { + for (Parsee &parsee : group.getParsees()) { shared_ptr currentToken = tokens.at(nextIndex); bool matches = currentToken->isOfKind({parsee.getTokenKind()}); diff --git a/src/Parser/Parser.h b/src/Parser/Parser.h index 3e325e6..cbac15e 100644 --- a/src/Parser/Parser.h +++ b/src/Parser/Parser.h @@ -12,8 +12,7 @@ class ValueType; class Expression; class Statement; -class ParseeToken; -class ParseeTokensGroup; +class ParseeGroup; using namespace std; @@ -55,7 +54,7 @@ private: shared_ptr matchValueType(); - optional>> tokensForParseeTokensGroup(ParseeTokensGroup group); + optional>> tokensForParseeGroup(ParseeGroup group); bool tryMatchingTokenKinds(vector kinds, bool shouldMatchAll, bool shouldAdvance); void markError(optional expectedTokenKind, optional message);