Implements expression parsing
This commit is contained in:
77
src/Parser/ParsedStatements/ParsedStatement.hpp
Normal file
77
src/Parser/ParsedStatements/ParsedStatement.hpp
Normal file
@@ -0,0 +1,77 @@
|
||||
#include <utility>
|
||||
|
||||
|
||||
#ifndef PORYGONLANG_PARSEDSTATEMENT_HPP
|
||||
#define PORYGONLANG_PARSEDSTATEMENT_HPP
|
||||
|
||||
#include <vector>
|
||||
#include "../ParsedExpressions/ParsedExpression.hpp"
|
||||
|
||||
enum class ParsedStatementKind{
|
||||
Script,
|
||||
Block,
|
||||
Expression,
|
||||
};
|
||||
|
||||
class ParsedStatement {
|
||||
unsigned int _start;
|
||||
unsigned int _length;
|
||||
public:
|
||||
virtual ParsedStatementKind GetKind() = 0;
|
||||
ParsedStatement(unsigned int start, unsigned int length){
|
||||
_start = start;
|
||||
_length = length;
|
||||
}
|
||||
|
||||
unsigned int GetStartPosition(){
|
||||
return _start;
|
||||
}
|
||||
|
||||
unsigned int GetEndPosition(){
|
||||
return _start + _length - 1;
|
||||
}
|
||||
};
|
||||
|
||||
class ParsedBlockStatement : public ParsedStatement{
|
||||
std::vector<ParsedStatement*> _statements;
|
||||
public:
|
||||
explicit ParsedBlockStatement(std::vector<ParsedStatement*> statements)
|
||||
: ParsedStatement(statements.front()->GetStartPosition(), statements.back()->GetEndPosition() - statements.front()->GetStartPosition()){
|
||||
_statements = std::move(statements);
|
||||
}
|
||||
|
||||
ParsedStatementKind GetKind() override{
|
||||
return ParsedStatementKind ::Block;
|
||||
}
|
||||
|
||||
std::vector<ParsedStatement*> GetStatements(){
|
||||
return _statements;
|
||||
}
|
||||
};
|
||||
|
||||
class ParsedScriptStatement : public ParsedBlockStatement{
|
||||
public:
|
||||
explicit ParsedScriptStatement(std::vector<ParsedStatement*> statements) : ParsedBlockStatement(statements){}
|
||||
|
||||
ParsedStatementKind GetKind() final{
|
||||
return ParsedStatementKind ::Script;
|
||||
}
|
||||
};
|
||||
|
||||
class ParsedExpressionStatement : public ParsedStatement{
|
||||
ParsedExpression* _expression;
|
||||
public:
|
||||
explicit ParsedExpressionStatement(ParsedExpression* expression) : ParsedStatement(expression->GetStartPosition(), expression->GetLength()){
|
||||
_expression = expression;
|
||||
}
|
||||
|
||||
ParsedStatementKind GetKind() final{
|
||||
return ParsedStatementKind ::Expression;
|
||||
}
|
||||
|
||||
ParsedExpression* GetExpression(){
|
||||
return _expression;
|
||||
}
|
||||
};
|
||||
|
||||
#endif //PORYGONLANG_PARSEDSTATEMENT_HPP
|
||||
Reference in New Issue
Block a user