flycatcher_parser/ast/
opcode.rs1use flycatcher_lexer::Token;
4
5#[derive(Clone, Copy, Debug, PartialEq)]
7pub enum Opcode {
8
9 EqualsEquals,
11
12 Equals,
14
15 Greater,
17
18 Less,
20
21 GreaterEquals,
23
24 LessEquals,
26
27 Add,
29
30 Subtract,
32
33 Multiply,
35
36 Divide,
38
39}
40
41impl Opcode {
42
43 pub fn precedence(&self) -> usize {
45 match self {
46 Opcode::Equals => 0,
47 Opcode::EqualsEquals => 1,
48 Opcode::Greater => 1,
49 Opcode::GreaterEquals => 1,
50 Opcode::Less => 1,
51 Opcode::LessEquals => 1,
52 Opcode::Add => 2,
53 Opcode::Subtract => 2,
54 Opcode::Multiply => 3,
55 Opcode::Divide => 3
56 }
57 }
58
59}
60
61pub fn is_operator(tok: Token) -> bool {
63 match tok {
64 Token::Equals |
65 Token::EqualsEquals |
66 Token::GreaterThan |
67 Token::GreaterThanOrEqual |
68 Token::LessThan |
69 Token::LessThanOrEqual |
70 Token::Plus |
71 Token::Dash |
72 Token::Star |
73 Token::Slash => true,
74 _ => false
76 }
77}
78
79pub fn get_operator(tok: Token) -> Option<Opcode> {
81 Some(match tok {
82 Token::Equals => Opcode::Equals,
83 Token::EqualsEquals => Opcode::EqualsEquals,
84 Token::GreaterThan => Opcode::Greater,
85 Token::LessThan => Opcode::Less,
86 Token::GreaterThanOrEqual => Opcode::GreaterEquals,
87 Token::LessThanOrEqual => Opcode::LessEquals,
88 Token::Plus => Opcode::Add,
89 Token::Dash => Opcode::Subtract,
90 Token::Star => Opcode::Multiply,
91 Token::Slash => Opcode::Divide,
92 _ => return None
93 })
94}