-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathToken.h
69 lines (65 loc) · 1.52 KB
/
Token.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma once
#include <cstdint>
#include <string>
#include <string_view>
#include <ostream>
enum class TokenType
{
NUMBER = 0,
STRING,
IDENTIFIER,
COMMA, // ,
DOT, // .
COLON, // :
SEMICOLON, // ;
LBRACKET, // [
RBRACKET, // ]
LBRACE, // {
RBRACE, // }
LPAREN, // (
RPAREN, // )
PLUS, // +
MINUS, // -
ASTERISK, // *
SLASH, // /
EQUAL, // =
LESS, // <
GREATER, // >
VBAR, // |
CARET, // ^
AMPERSAND, // &
TILDE, // ~
EQUAL_EQUAL, // ==
LESS_EQUAL, // <=
GREATER_EQUAL, // >=
BANG_EQUAL, // !=
IF, // if
ELSE, // else
TRUE, // true
FALSE, // false
NIL, // nil
WHILE, // while
FUNCTION, // function
RETURN, // return
AND, // and
OR, // or
NOT, // not
STRUCT, // struct
REF, // ref
DLLIMPORT, // dllimport
IMPORT, // import
END
};
struct Token
{
Token(TokenType type, std::string_view literal, uint32_t line, uint32_t column, std::string_view filePath) : type(type), literal(literal), line(line), column(column), filePath(filePath) {}
std::string filePath;
TokenType type;
std::string literal;
uint32_t line;
uint32_t column;
};
inline std::ostream &operator<<(std::ostream &stream, const Token &token)
{
return stream << token.filePath << ":'" << token.literal << "'," << token.line << "," << token.column;
}