#pragma once #include #include #include "Lexer.h" #include "Expression.h" #include "TypeWrapper.h" #include "helperFunctions/ShortHands.h" class Parser { private: const std::vector tokens; int current = 0; public: explicit Parser(std::vector tokens) : tokens(std::move(tokens)){}; sptr(Expr) parse(); private: sptr(Expr) expression(); sptr(Expr) equality(); sptr(Expr) comparison(); sptr(Expr) term(); sptr(Expr) factor(); sptr(Expr) unary(); sptr(Expr) primary(); bool match(std::vector types); bool check(TokenType type); bool isAtEnd(); Token advance(); Token peek(); Token previous(); Token consume(TokenType type, std::string message); void sync(); };