1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use cairo_lang_syntax::node::kind::SyntaxKind;
pub fn get_unary_operator_precedence(kind: SyntaxKind) -> Option<usize> {
if [SyntaxKind::TerminalNot, SyntaxKind::TerminalMinus].contains(&kind) {
get_binary_operator_precedence(kind)
} else {
None
}
}
pub fn get_binary_operator_precedence(kind: SyntaxKind) -> Option<usize> {
match kind {
SyntaxKind::TerminalDot => Some(0),
SyntaxKind::TerminalNot => Some(1),
SyntaxKind::TerminalMul | SyntaxKind::TerminalDiv | SyntaxKind::TerminalMod => Some(2),
SyntaxKind::TerminalPlus | SyntaxKind::TerminalMinus => Some(3),
SyntaxKind::TerminalEqEq
| SyntaxKind::TerminalNeq
| SyntaxKind::TerminalLT
| SyntaxKind::TerminalGT
| SyntaxKind::TerminalLE
| SyntaxKind::TerminalGE => Some(4),
SyntaxKind::TerminalAnd => Some(5),
SyntaxKind::TerminalOr => Some(6),
SyntaxKind::TerminalXor => Some(7),
SyntaxKind::TerminalEq => Some(8),
_ => None,
}
}