From dc8d10c81c9a6806be48825e395a25a42b374dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Grodzi=C5=84ski?= Date: Sat, 2 Aug 2025 00:16:51 +0900 Subject: [PATCH] Updated the parser a bit --- src/Parser/Parser.cpp | 38 +++++++++++++++++++++++++- src/Parser/Statement/StatementType.cpp | 10 ++++--- src/Parser/Statement/StatementType.h | 7 +++-- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 1b2a38d..b2e8161 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -492,7 +492,43 @@ shared_ptr Parser::matchStatementRawFunction() { } shared_ptr Parser::matchStatementType() { - return nullptr; + ParseeResultsGroup resultsGroup; + + string identifier; + vector>> variables; + + resultsGroup = parseeResultsGroupForParseeGroup( + ParseeGroup( + { + Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true), + Parsee::tokenParsee(TokenKind::TYPE, true, false) + }, + ParseeGroup( + { + Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true), + Parsee::valueTypeParsee(true) + }, + {} + ) + ) + ); + + switch (resultsGroup.getKind()) { + case ParseeResultsGroupKind::SUCCESS: + identifier = resultsGroup.getResults().at(0).getToken()->getLexme(); + for (int i=1; i> arg; + arg.first = resultsGroup.getResults().at(i).getToken()->getLexme(); + arg.second = resultsGroup.getResults().at(i+1).getValueType(); + variables.push_back(arg); + } + case ParseeResultsGroupKind::NO_MATCH: + case ParseeResultsGroupKind::FAILURE: + return nullptr; + break; + } + + return make_shared(identifier, variables); } shared_ptr Parser::matchStatementBlock(vector terminalTokenKinds) { diff --git a/src/Parser/Statement/StatementType.cpp b/src/Parser/Statement/StatementType.cpp index a830e9f..184b5a7 100644 --- a/src/Parser/Statement/StatementType.cpp +++ b/src/Parser/Statement/StatementType.cpp @@ -1,12 +1,14 @@ #include "StatementType.h" -StatementType::StatementType(string identifier, vector> statementVariable): -Statement(StatementKind::TYPE), identifier(identifier), statementVariables(statementVariable) { } +#include "Parser/ValueType.h" + +StatementType::StatementType(string identifier, vector>> variables): +Statement(StatementKind::TYPE), identifier(identifier), variables(variables) { } string StatementType::getIdentifier() { return identifier; } -vector> StatementType::getStatementVariables() { - return statementVariables; +vector>> StatementType::getVariables() { + return variables; } \ No newline at end of file diff --git a/src/Parser/Statement/StatementType.h b/src/Parser/Statement/StatementType.h index 02f9b40..5e3e242 100644 --- a/src/Parser/Statement/StatementType.h +++ b/src/Parser/Statement/StatementType.h @@ -4,16 +4,17 @@ #include "Statement.h" class StatementVariable; +class ValueType; class StatementType: public Statement { private: string identifier; - vector> statementVariables; + vector>> variables; public: - StatementType(string identifier, vector> statementVariables); + StatementType(string identifier, vector>> variables); string getIdentifier(); - vector> getStatementVariables(); + vector>> getVariables(); }; #endif \ No newline at end of file