1#[derive(Debug, Clone, PartialEq)]
2pub enum Token {
4 Name(String),
5 Str(String),
6 Bool(bool),
7 Float(f64),
8 Int(i32),
9 None,
10 Func,
11 Let,
12 Class,
13 New,
14 As,
15 Use,
16 From,
17 Object,
18 If,
19 Elif,
20 Else,
21 Extern,
22 Extend,
23 Return,
24 While,
25 For,
26 Break,
27 Continue,
28 Minus,
29 Plus,
30 Star,
31 Slash,
32 Modulus,
33 Pow,
34 Equal,
35 DblEqual,
36 NotEqual,
37 GreatEqual,
38 LittleEqual,
39 Great,
40 Little,
41 Dot,
42 Bang,
43 Comma,
44 And,
45 Or,
46 LeftParen,
47 RightParen,
48 LeftCurly,
49 RightCurly,
50 LeftSquare,
51 RightSquare,
52 Quotation,
53 Semicolon,
54 Colon,
55 MinusLineMark,
56 QuestionMark,
57 Comment,
58}
59
60impl Token {
61 pub fn make_out_kind(text: String) -> Token {
63 match &*text {
64 "fn" => Token::Func,
65 "let" => Token::Let,
66 "class" => Token::Class,
67 "new" => Token::New,
68 "as" => Token::As,
69 "use" => Token::Use,
70 "from" => Token::From,
71 "if" => Token::If,
72 "elif" => Token::Elif,
73 "else" => Token::Else,
74 "return" => Token::Return,
75 "extern" => Token::Extern,
76 "extend" => Token::Extend,
77 "while" => Token::While,
78 "for" => Token::For,
79 "break" => Token::Break,
80 "continue" => Token::Continue,
81 "-" => Token::Minus,
82 "+" => Token::Plus,
83 "*" => Token::Star,
84 "/" => Token::Slash,
85 "=" => Token::Equal,
86 "==" => Token::DblEqual,
87 "!=" => Token::NotEqual,
88 ">=" => Token::GreatEqual,
89 "<=" => Token::LittleEqual,
90 ">" => Token::Great,
91 "<" => Token::Little,
92 "**" => Token::Pow,
93 "//" => Token::Comment,
94 "." => Token::Dot,
95 "!" => Token::Bang,
96 "?" => Token::QuestionMark,
97 "%" => Token::Modulus,
98 "," => Token::Comma,
99 "&&" => Token::And,
100 "||" => Token::Or,
101 "(" => Token::LeftParen,
102 ")" => Token::RightParen,
103 "{" => Token::LeftCurly,
104 "}" => Token::RightCurly,
105 "[" => Token::LeftSquare,
106 "]" => Token::RightSquare,
107 "\"" => Token::Quotation,
108 ";" => Token::Semicolon,
109 ":" => Token::Colon,
110 "`" => Token::MinusLineMark,
111 "true" => Token::Bool(true),
112 "false" => Token::Bool(false),
113 "none" => Token::None,
114 _ => Token::Name(text),
115 }
116 }
117}