#pragma once #include #include #include enum Type { operand, sum, substraction, multiplication, division, left_parens, right_parens, equals }; struct Token { Type type; int value; }; class Tokenizer { private: // Private attributes std::array tokens; const std::string *to_tokenize; size_t current_char_index; short tokens_head; // Regexes std::regex operand_regex = std::regex("^0{1}|\\d+"); std::regex operation_regex = std::regex("\\+|-|/|\\*"); std::regex parens_regex = std::regex("(|)"); // End of private attributes // Private methods void clearTokens(); void insertToken(Type type, int value); void matchOperation(const std::string &operation); void matchParens(const std::string &operation); void matchOperand(const std::string &operation); std::string buildNumber(char *current); // End of private methods public: Tokenizer(); ~Tokenizer(); const std::array &tokenize(const std::string &operation); const std::array &getTokens(); };