40 lines
839 B
C++
40 lines
839 B
C++
#pragma once
|
|
|
|
#include "object.hh"
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
enum class TokenType : uint8_t {
|
|
// Single-character tokens.
|
|
LEFT_PAREN, RIGHT_PAREN, LEFT_BRACE, RIGHT_BRACE,
|
|
COMMA, DOT, MINUS, PLUS, SEMICOLON, SLASH, STAR,
|
|
|
|
// One or two character tokens.
|
|
BANG, BANG_EQUAL,
|
|
EQUAL, EQUAL_EQUAL,
|
|
GREATER, GREATER_EQUAL,
|
|
LESS, LESS_EQUAL,
|
|
|
|
// Literals.
|
|
IDENTIFIER, STRING, NUMBER,
|
|
|
|
// Keywords.
|
|
AND, CLASS, ELSE, FALSE, FUN, FOR, IF, NIL, OR,
|
|
PRINT, RETURN, SUPER, THIS, TRUE, VAR, WHILE,
|
|
|
|
EOFILE,
|
|
};
|
|
|
|
struct Token {
|
|
Token(TokenType type, const std::string &lexeme, Object &literal, int line)
|
|
: type{type}, lexeme{lexeme}, literal{literal}, line{line}
|
|
{};
|
|
|
|
TokenType type;
|
|
std::string lexeme;
|
|
Object &literal;
|
|
int line;
|
|
};
|
|
|
|
std::ostream &operator<<(std::ostream &os, const Token &token);
|