#pragma once #include #include #include "Lexer.h" #include "Expression.h" #include "TypeWrapper.h" class Parser { private: const std::vector tokens; int current = 0; public: explicit Parser(std::vector tokens) : tokens(std::move(tokens)){}; std::shared_ptr>> parse(); private: std::shared_ptr>> expression(); std::shared_ptr>> equality(); std::shared_ptr>> comparison(); std::shared_ptr>> term(); std::shared_ptr>> factor(); std::shared_ptr>> unary(); std::shared_ptr>> 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(); };