Implements assignment parsing

This commit is contained in:
2019-05-26 14:20:40 +02:00
parent 0205b92ae6
commit dbd7dfdd73
4 changed files with 125 additions and 13 deletions

View File

@@ -1,30 +1,32 @@
#include <utility>
#include <utility>
#ifndef PORYGONLANG_PARSEDSTATEMENT_HPP
#define PORYGONLANG_PARSEDSTATEMENT_HPP
#include <utility>
#include <vector>
#include <string>
#include "../ParsedExpressions/ParsedExpression.hpp"
enum class ParsedStatementKind{
Bad,
Script,
Block,
Expression,
Assignment
};
class ParsedStatement {
unsigned int _start;
unsigned int _length;
public:
virtual ParsedStatementKind GetKind() = 0;
ParsedStatement(unsigned int start, unsigned int length){
_start = start;
_length = length;
}
virtual ~ParsedStatement() = default;
virtual ParsedStatementKind GetKind() = 0;
unsigned int GetStartPosition(){
return _start;
@@ -35,6 +37,14 @@ public:
}
};
class ParsedBadStatement : public ParsedStatement{
public:
ParsedBadStatement(unsigned int start, unsigned int length) : ParsedStatement(start, length){};
ParsedStatementKind GetKind() final{
return ParsedStatementKind ::Bad;
}
};
class ParsedBlockStatement : public ParsedStatement{
std::vector<ParsedStatement*> _statements;
public:
@@ -86,4 +96,36 @@ public:
}
};
class ParsedAssignmentStatement : public ParsedStatement{
bool _local;
std::string _identifier;
ParsedExpression* _expression;
public:
ParsedAssignmentStatement(bool local, std::string identifier, ParsedExpression* expression, unsigned int start, unsigned int length)
: ParsedStatement(start, length){
_local = local;
_identifier = std::move(identifier);
_expression = expression;
}
~ParsedAssignmentStatement() final{
delete _expression;
}
ParsedStatementKind GetKind() final{
return ParsedStatementKind ::Assignment;
}
bool IsLocal(){
return _local;
}
std::string GetIdentifier(){
return _identifier;
}
ParsedExpression* GetExpression(){
return _expression;
}
};
#endif //PORYGONLANG_PARSEDSTATEMENT_HPP