Nullable token in statement

This commit is contained in:
Rafał Grodziński
2025-06-01 11:43:49 +09:00
parent 265ce4c94d
commit 23dedf2eff
4 changed files with 9 additions and 10 deletions

View File

@@ -10,7 +10,7 @@ vector<shared_ptr<Statement>> Parser::getStatements() {
shared_ptr<Statement> statement = nextStatement(); shared_ptr<Statement> statement = nextStatement();
// Abort parsing if we got an error // Abort parsing if we got an error
if (!statement->isValid()) { 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<shared_ptr<Statement>>(); return vector<shared_ptr<Statement>>();
} }
statements.push_back(statement); statements.push_back(statement);
@@ -33,7 +33,7 @@ shared_ptr<Statement> Parser::nextStatement() {
} }
shared_ptr<Statement> Parser::matchInvalidStatement() { shared_ptr<Statement> Parser::matchInvalidStatement() {
return make_shared<Statement>(Statement::Kind::INVALID, tokens.at(currentIndex), nullptr); return make_shared<Statement>(Statement::Kind::INVALID, make_shared<Token>(tokens.at(currentIndex)), nullptr);
} }
// //
@@ -42,9 +42,9 @@ shared_ptr<Statement> Parser::matchInvalidStatement() {
shared_ptr<Statement> Parser::matchExpressionStatement() { shared_ptr<Statement> Parser::matchExpressionStatement() {
shared_ptr<Expression> expression = term(); shared_ptr<Expression> expression = term();
if (expression->isValid()) { if (expression->isValid()) {
return make_shared<Statement>(Statement::Kind::EXPRESSION, tokens.at(currentIndex), expression); return make_shared<Statement>(Statement::Kind::EXPRESSION, nullptr, expression);
} else { } else {
return make_shared<Statement>(Statement::Kind::INVALID, tokens.at(currentIndex), expression); return make_shared<Statement>(Statement::Kind::INVALID, make_shared<Token>(tokens.at(currentIndex)), expression);
} }
} }

View File

@@ -28,7 +28,6 @@ private:
public: public:
Parser(vector<Token> tokens); Parser(vector<Token> tokens);
//shared_ptr<Expression> getExpression();
vector<shared_ptr<Statement>> getStatements(); vector<shared_ptr<Statement>> getStatements();
}; };

View File

@@ -1,13 +1,13 @@
#include "Statement.h" #include "Statement.h"
Statement::Statement(Kind kind, Token token, shared_ptr<Expression> expression): kind(kind), token(token), expression(expression) { Statement::Statement(Kind kind, shared_ptr<Token> token, shared_ptr<Expression> expression): kind(kind), token(token), expression(expression) {
} }
shared_ptr<Expression> Statement::getExpression() { shared_ptr<Expression> Statement::getExpression() {
return expression; return expression;
} }
Token Statement::getToken() { shared_ptr<Token> Statement::getToken() {
return token; return token;
} }

View File

@@ -17,12 +17,12 @@ public:
private: private:
Kind kind; Kind kind;
Token token; shared_ptr<Token> token;
shared_ptr<Expression> expression; shared_ptr<Expression> expression;
public: public:
Statement(Kind kind, Token token, shared_ptr<Expression> expression); Statement(Kind kind, shared_ptr<Token> token, shared_ptr<Expression> expression);
Token getToken(); shared_ptr<Token> getToken();
shared_ptr<Expression> getExpression(); shared_ptr<Expression> getExpression();
bool isValid(); bool isValid();
string toString(); string toString();