#ifndef PORYGONLANG_PARSER_HPP #define PORYGONLANG_PARSER_HPP #include #include #include "ParsedStatements/ParsedStatement.hpp" #include "../Script.hpp" enum class OperatorPrecedence { No, LogicalOr, LogicalAnd, Equality, Additive, Multiplication, Unary, }; class Parser { vector _tokens; unsigned int _position; Script* ScriptData; IToken* Peek(); IToken* Next(); ParsedStatement* ParseStatement(IToken* current); ParsedStatement* ParseAssignment(IToken* current); ParsedStatement *ParseBlock(const vector& endTokens); ParsedStatement* ParseFunctionDeclaration(IToken* current); ParsedStatement *ParseReturnStatement(IToken *current); ParsedExpression* ParseExpression(IToken* current); ParsedExpression* ParseBinaryExpression(IToken* current, OperatorPrecedence parentPrecedence); ParsedExpression* ParsePrimaryExpression(IToken* current); ParsedExpression* ParseParenthesizedExpression(IToken *current); ParsedExpression* ParseFunctionCallExpression(ParsedExpression* functionExpression); ParsedExpression *ParseIndexExpression(ParsedExpression *indexingExpression); public: ParsedScriptStatement* Parse(); explicit Parser(vector tokens, Script* scriptData){ _tokens = std::move(tokens); _position = 0; ScriptData = scriptData; } }; #endif //PORYGONLANG_PARSER_HPP