Skip to main content

binks/lexer/
token.rs

1#[derive(Debug, Clone, PartialEq)]
2/// all the tokens binks can handel
3pub 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    /// figure out the token from a string representation
62    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}