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}