#pragma once #include #include #define TOKENS_ARRAY_LEN 16 enum Type { operand, sum, substraction, multiplication, division, left_parens, right_parens, equals, nil }; struct Token { Type type; int value; }; class Tokenizer { private: // Private attributes Token *tokens[17]; 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(); Token **tokenize(const std::string &operation); Token **getTokens(); };