june_lang/
token.rs

1#[derive(Debug, PartialEq, Eq, Clone, Copy)]
2pub enum Op {
3    Plus,
4    Minus,
5    Star,
6    Slash,
7}
8
9#[derive(Debug, PartialEq, Clone)]
10pub enum Token {
11    Lparen,
12    Rparen,
13    Lbrace,
14    Rbrace,
15    Semi,
16    Comma,
17    Colon,
18    Eq,
19    Str(String),
20    Ident(String),
21    Int(i64),
22    Let,
23    Fn,
24    Op(Op),
25}
26
27impl Token {
28    pub fn as_op(&self) -> Option<Op> {
29        if let Token::Op(op) = self {
30            Some(*op)
31        } else {
32            None
33        }
34    }
35
36    pub fn as_ident(&self) -> Option<String> {
37        if let Token::Ident(name) = self {
38            Some(name.to_owned())
39        } else {
40            None
41        }
42    }
43}
44
45impl std::fmt::Display for Token {
46    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
47        write!(f, "{:?}", self)
48    }
49}