mathhook_core/parser/lexer/
standard_tokens.rs

1//! Standard mathematical notation token classification
2//!
3//! This module contains optimized HashMap for standard mathematical notation
4//! like pi, e, sin, cos, alpha, beta, etc.
5
6use super::token_maps::TokenType;
7use std::collections::HashMap;
8use std::sync::LazyLock;
9
10/// Standard token classification map for O(1) lookups
11pub static STANDARD_TOKEN_MAP: LazyLock<HashMap<&'static str, TokenType>> = LazyLock::new(|| {
12    let mut map = HashMap::new();
13
14    // Standard constants
15    map.insert("pi", TokenType::Constant);
16    map.insert("e", TokenType::Constant);
17    map.insert("i", TokenType::Constant);
18    map.insert("infinity", TokenType::Constant);
19    map.insert("phi", TokenType::Constant);
20    map.insert("gamma", TokenType::Constant);
21
22    // Standard functions
23    map.insert("sin", TokenType::Function);
24    map.insert("cos", TokenType::Function);
25    map.insert("tan", TokenType::Function);
26    map.insert("ln", TokenType::Function);
27    map.insert("log", TokenType::Function);
28    map.insert("sqrt", TokenType::Function);
29    map.insert("exp", TokenType::Function);
30    map.insert("abs", TokenType::Function);
31    map.insert("floor", TokenType::Function);
32    map.insert("ceil", TokenType::Function);
33    map.insert("round", TokenType::Function);
34    map.insert("max", TokenType::Function);
35    map.insert("min", TokenType::Function);
36    map.insert("gcd", TokenType::Function);
37    map.insert("lcm", TokenType::Function);
38
39    // Extended Trigonometric Functions
40    map.insert("sec", TokenType::Function);
41    map.insert("csc", TokenType::Function);
42    map.insert("cot", TokenType::Function);
43
44    // Hyperbolic Functions
45    map.insert("sinh", TokenType::Function);
46    map.insert("cosh", TokenType::Function);
47    map.insert("tanh", TokenType::Function);
48    map.insert("sech", TokenType::Function);
49    map.insert("csch", TokenType::Function);
50    map.insert("coth", TokenType::Function);
51
52    // Inverse Trigonometric Functions
53    map.insert("arcsin", TokenType::Function);
54    map.insert("arccos", TokenType::Function);
55    map.insert("arctan", TokenType::Function);
56    map.insert("arcsec", TokenType::Function);
57    map.insert("arccsc", TokenType::Function);
58    map.insert("arccot", TokenType::Function);
59    map.insert("asin", TokenType::Function); // Alternative names
60    map.insert("acos", TokenType::Function);
61    map.insert("atan", TokenType::Function);
62
63    // Extended Logarithmic Functions
64    map.insert("log10", TokenType::Function);
65    map.insert("log2", TokenType::Function);
66
67    // Utility Functions
68    map.insert("sign", TokenType::Function);
69    map.insert("factorial", TokenType::Function);
70
71    // Complex Functions
72    map.insert("real", TokenType::Function);
73    map.insert("imag", TokenType::Function);
74    map.insert("conj", TokenType::Function);
75    map.insert("arg", TokenType::Function);
76
77    // Note: Matrix operations (det, trace, rank) are handled as matrix methods, not simple functions
78
79    // Statistical Functions
80    map.insert("mean", TokenType::Function);
81    map.insert("median", TokenType::Function);
82    map.insert("var", TokenType::Function);
83    map.insert("std", TokenType::Function);
84
85    // Note: Calculus functions like sum, product, limit, integral, derivative
86    // are handled specially in grammar and should NOT be classified as Function type
87
88    // Greek symbol names (common in math)
89    map.insert("alpha", TokenType::GreekSymbol);
90    map.insert("beta", TokenType::GreekSymbol);
91    map.insert("gamma", TokenType::GreekSymbol);
92    map.insert("delta", TokenType::GreekSymbol);
93    map.insert("epsilon", TokenType::GreekSymbol);
94    map.insert("theta", TokenType::GreekSymbol);
95    map.insert("lambda", TokenType::GreekSymbol);
96    map.insert("mu", TokenType::GreekSymbol);
97    map.insert("sigma", TokenType::GreekSymbol);
98    map.insert("omega", TokenType::GreekSymbol);
99
100    map
101});