1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq)]
4pub enum TokenType {
5 LParen, RParen, LBrace, RBrace,
7 LeftParen, RightParen, LeftBrace, RightBrace,
8 Comma, Colon, Dot, Minus, Plus, Semicolon, Slash, Star,
9 LBracket, RBracket,
10
11 Bang, BangEqual,
13 Equal, EqualEqual,
14 Greater, GreaterEqual, Gt, Gte,
15 Less, LessEqual, Lt, Lte,
16 Percent,
17 Arrow, FatArrow, Scope,
18 AndAnd, OrOr,
19 Assign,
20
21 String(String),
23 Number(f64),
24 Identifier(String),
25
26 True, False, Null,
27 Bool(bool),
28
29 Newline,
31 Import,
32 System,
33
34
35 PlusAssign, MinusAssign, StarAssign, SlashAssign,
37
38 Eq, Neq,
40
41 Not,
43
44 And, Class, Else, Elif, Fn, For, If, In,
46 Let, Const, Or, Print, Return,
47 Super, This, Var, While, Break, Continue,
48
49 Comment(String),
50
51 Eof,
52}
53
54#[derive(Debug, Clone)]
55pub struct Token {
56 pub token_type: TokenType,
57 pub lexeme: String,
58 pub line: usize,
59 pub column: usize,
62}
63
64impl fmt::Display for TokenType {
65 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
66 match self {
67 TokenType::String(s) => write!(f, "STRING({})", s),
68 TokenType::Number(n) => write!(f, "NUMBER({})", n),
69 TokenType::Comment(s) => write!(f, "COMMENT({})", s),
70 TokenType::Identifier(_) => write!(f, "IDENTIFIER"),
71
72 _ => write!(f, "{:?}", self),
73 }
74 }
75}
76