From 23dedf2eff8d8c814834765ef16dd743525446d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Grodzi=C5=84ski?= Date: Sun, 1 Jun 2025 11:43:49 +0900 Subject: [PATCH] Nullable token in statement --- src/Parser.cpp | 8 ++++---- src/Parser.h | 1 - src/Statement.cpp | 4 ++-- src/Statement.h | 6 +++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Parser.cpp b/src/Parser.cpp index 27b1f09..8ecf66c 100644 --- a/src/Parser.cpp +++ b/src/Parser.cpp @@ -10,7 +10,7 @@ vector> Parser::getStatements() { shared_ptr statement = nextStatement(); // Abort parsing if we got an error if (!statement->isValid()) { - cerr << "Unexpected token '" << statement->getToken().getLexme() << "' at " << statement->getToken().getLine() << ":" << statement->getToken().getColumn() << endl; + cerr << "Unexpected token '" << statement->getToken()->getLexme() << "' at " << statement->getToken()->getLine() << ":" << statement->getToken()->getColumn() << endl; return vector>(); } statements.push_back(statement); @@ -33,7 +33,7 @@ shared_ptr Parser::nextStatement() { } shared_ptr Parser::matchInvalidStatement() { - return make_shared(Statement::Kind::INVALID, tokens.at(currentIndex), nullptr); + return make_shared(Statement::Kind::INVALID, make_shared(tokens.at(currentIndex)), nullptr); } // @@ -42,9 +42,9 @@ shared_ptr Parser::matchInvalidStatement() { shared_ptr Parser::matchExpressionStatement() { shared_ptr expression = term(); if (expression->isValid()) { - return make_shared(Statement::Kind::EXPRESSION, tokens.at(currentIndex), expression); + return make_shared(Statement::Kind::EXPRESSION, nullptr, expression); } else { - return make_shared(Statement::Kind::INVALID, tokens.at(currentIndex), expression); + return make_shared(Statement::Kind::INVALID, make_shared(tokens.at(currentIndex)), expression); } } diff --git a/src/Parser.h b/src/Parser.h index f82c118..afa50fa 100644 --- a/src/Parser.h +++ b/src/Parser.h @@ -28,7 +28,6 @@ private: public: Parser(vector tokens); - //shared_ptr getExpression(); vector> getStatements(); }; diff --git a/src/Statement.cpp b/src/Statement.cpp index ff9c525..f612eea 100644 --- a/src/Statement.cpp +++ b/src/Statement.cpp @@ -1,13 +1,13 @@ #include "Statement.h" -Statement::Statement(Kind kind, Token token, shared_ptr expression): kind(kind), token(token), expression(expression) { +Statement::Statement(Kind kind, shared_ptr token, shared_ptr expression): kind(kind), token(token), expression(expression) { } shared_ptr Statement::getExpression() { return expression; } -Token Statement::getToken() { +shared_ptr Statement::getToken() { return token; } diff --git a/src/Statement.h b/src/Statement.h index 1188df8..aeef197 100644 --- a/src/Statement.h +++ b/src/Statement.h @@ -17,12 +17,12 @@ public: private: Kind kind; - Token token; + shared_ptr token; shared_ptr expression; public: - Statement(Kind kind, Token token, shared_ptr expression); - Token getToken(); + Statement(Kind kind, shared_ptr token, shared_ptr expression); + shared_ptr getToken(); shared_ptr getExpression(); bool isValid(); string toString();