#ifndef ELOHIMSCRIPT_LEXTOKEN_HPP #define ELOHIMSCRIPT_LEXTOKEN_HPP #include #include "LexTokenKind.hpp" namespace ElohimScript::Parser { class LexToken { friend class Lexer; std::unique_ptr _next; public: virtual ~LexToken() = default; [[nodiscard]] virtual LexTokenKind GetKind() const noexcept = 0; [[nodiscard]] const std::unique_ptr& GetNext() const noexcept { return _next; } }; template class LexTokenImpl : public LexToken { public: LexTokenImpl() = default; [[nodiscard]] LexTokenKind GetKind() const noexcept override { return kind; } }; class IntegerToken : public LexTokenImpl { uint64_t _value; public: IntegerToken(uint64_t value) : _value(value) {} [[nodiscard]] uint64_t GetValue() const noexcept { return _value; } }; class FloatToken : public LexTokenImpl { double _value; public: FloatToken(double value) : _value(value) {} [[nodiscard]] double GetValue() const noexcept { return _value; } }; } #endif // ELOHIMSCRIPT_LEXTOKEN_HPP