monkey_rs/parser/precedence.rs
1/*!
2# Token Precedence
3
4Defines the precedences of tokens in the Monkey programming language.
5*/
6use crate::token;
7
8/// Defines the precedences of the Monkey programming language.
9#[derive(Debug, PartialEq, PartialOrd, Eq)]
10pub enum Precdence {
11 /// The lowest value precedence
12 Lowest,
13 /// Equality comparison operator `==`
14 Equals,
15 /// Strictly greater/less than operators `>` or `<`
16 LessGreater,
17 /// Summation operator `+`
18 Sum,
19 /// Multiplication operator `*`
20 Product,
21 /// Prefix operators, e.g., `-X` or `!X`
22 Prefix,
23 /// Function calls, e.g., `myFunction(X)`
24 Call,
25 /// Index access, e.g., `myArray[i]`
26 Index,
27}
28
29/// Returns the precedence of a given [`token::Token`] value.
30pub fn token_precedence(token: &token::Token) -> Precdence {
31 match token {
32 token::Token::Eq | token::Token::NotEq => Precdence::Equals,
33 token::Token::Lt | token::Token::Gt => Precdence::LessGreater,
34 token::Token::Plus | token::Token::Minus => Precdence::Sum,
35 token::Token::Slash | token::Token::Asterisk => Precdence::Product,
36 token::Token::LParen => Precdence::Call,
37 token::Token::LBracket => Precdence::Index,
38 _ => Precdence::Lowest,
39 }
40}