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}