Nullable token in statement
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user