#ifndef ELOHIMSCRIPT_LEXER_HPP #define ELOHIMSCRIPT_LEXER_HPP #include #include "LexToken.hpp" namespace ElohimScript::Parser { class Lexer { public: Lexer(const char* script) : _script(reinterpret_cast(script)) {} Lexer(std::u8string_view script) : _script(script) {} const LexToken* Lex(); private: std::u8string_view _script; size_t _position = -1; inline char8_t Consume() { if (++_position >= _script.size()) { return '\0'; } return _script[_position]; } inline void Progress(size_t steps = 1){ _position += steps; } inline char8_t Peek(size_t offset = 1) { auto pos = _position + offset; if (pos >= _script.size()) { return '\0'; } return _script[pos]; } LexToken* LexNext(); LexToken* LexNumerical(char8_t); LexToken* LexDecimal(uint64_t initial); IntegerToken* LexHexadecimal(); IntegerToken* LexOctal(); IntegerToken* LexBinary(); }; } #endif // ELOHIMSCRIPT_LEXER_HPP