2019-05-20 15:45:03 +00:00
|
|
|
|
|
|
|
#ifndef PORYGONLANG_PARSER_HPP
|
|
|
|
#define PORYGONLANG_PARSER_HPP
|
|
|
|
|
2019-06-01 19:38:39 +00:00
|
|
|
#include <utility>
|
|
|
|
#include <vector>
|
2019-05-20 15:45:03 +00:00
|
|
|
#include "ParsedStatements/ParsedStatement.hpp"
|
2019-05-21 12:00:14 +00:00
|
|
|
#include "../Script.hpp"
|
2019-05-20 15:45:03 +00:00
|
|
|
|
|
|
|
enum class OperatorPrecedence {
|
|
|
|
No,
|
|
|
|
LogicalOr,
|
|
|
|
LogicalAnd,
|
|
|
|
Equality,
|
|
|
|
Additive,
|
|
|
|
Multiplication,
|
|
|
|
Unary,
|
|
|
|
};
|
|
|
|
|
|
|
|
class Parser {
|
|
|
|
vector<IToken*> _tokens;
|
|
|
|
unsigned int _position;
|
2019-05-21 12:00:14 +00:00
|
|
|
Script* ScriptData;
|
2019-05-20 15:45:03 +00:00
|
|
|
|
|
|
|
IToken* Peek();
|
|
|
|
IToken* Next();
|
2019-05-26 12:20:40 +00:00
|
|
|
|
2019-05-20 15:45:03 +00:00
|
|
|
ParsedStatement* ParseStatement(IToken* current);
|
2019-05-31 13:00:14 +00:00
|
|
|
ParsedStatement* ParseAssignment(IToken* current);
|
2019-06-01 19:38:39 +00:00
|
|
|
ParsedStatement *ParseBlock(const vector<TokenKind>& endTokens);
|
2019-05-31 13:00:14 +00:00
|
|
|
ParsedStatement* ParseFunctionDeclaration(IToken* current);
|
2019-05-26 12:20:40 +00:00
|
|
|
|
2019-05-20 15:45:03 +00:00
|
|
|
ParsedExpression* ParseExpression(IToken* current);
|
|
|
|
ParsedExpression* ParseBinaryExpression(IToken* current, OperatorPrecedence parentPrecedence);
|
|
|
|
ParsedExpression* ParsePrimaryExpression(IToken* current);
|
2019-05-21 15:16:53 +00:00
|
|
|
ParsedExpression* ParseParenthesizedExpression(IToken *current);
|
2019-06-06 15:35:51 +00:00
|
|
|
|
2019-06-01 12:56:28 +00:00
|
|
|
ParsedExpression* ParseFunctionCallExpression(ParsedExpression* functionExpression);
|
2019-06-06 15:35:51 +00:00
|
|
|
ParsedExpression *ParseIndexExpression(ParsedExpression *indexingExpression);
|
2019-05-20 15:45:03 +00:00
|
|
|
public:
|
|
|
|
ParsedScriptStatement* Parse();
|
2019-05-21 12:00:14 +00:00
|
|
|
explicit Parser(vector<IToken*> tokens, Script* scriptData){
|
2019-05-20 15:45:03 +00:00
|
|
|
_tokens = std::move(tokens);
|
|
|
|
_position = 0;
|
2019-05-21 12:00:14 +00:00
|
|
|
ScriptData = scriptData;
|
2019-05-20 15:45:03 +00:00
|
|
|
}
|
2019-05-21 15:16:53 +00:00
|
|
|
|
2019-05-20 15:45:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif //PORYGONLANG_PARSER_HPP
|