47 lines
1.2 KiB
C++
47 lines
1.2 KiB
C++
#ifndef ELOHIMSCRIPT_LEXER_HPP
|
|
#define ELOHIMSCRIPT_LEXER_HPP
|
|
|
|
#include <string_view>
|
|
#include "LexToken.hpp"
|
|
|
|
namespace ElohimScript::Parser {
|
|
class Lexer {
|
|
public:
|
|
Lexer(const char* script) : _script(reinterpret_cast<const char8_t*>(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
|