diff options
Diffstat (limited to 'src/include/tokenizer.hpp')
-rw-r--r-- | src/include/tokenizer.hpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/include/tokenizer.hpp b/src/include/tokenizer.hpp new file mode 100644 index 0000000..a3f9998 --- /dev/null +++ b/src/include/tokenizer.hpp @@ -0,0 +1,47 @@ +#pragma once +#include <regex> +#include <string> +#include <array> + +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<Token *, 16> 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<Token *, 16> &tokenize(const std::string &operation); + const std::array<Token *, 16> &getTokens(); +}; |