#include #ifndef PORYGONLANG_PARSER_HPP #define PORYGONLANG_PARSER_HPP #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); ParsedExpression* ParseExpression(IToken* current); ParsedExpression* ParseBinaryExpression(IToken* current, OperatorPrecedence parentPrecedence); ParsedExpression* ParsePrimaryExpression(IToken* current); public: ParsedScriptStatement* Parse(); explicit Parser(vector tokens, Script* scriptData){ _tokens = std::move(tokens); _position = 0; ScriptData = scriptData; } }; #endif //PORYGONLANG_PARSER_HPP