mathhook_core/parser/lexer/
wolfram_tokens.rs

1//! Wolfram Language token classification
2//!
3//! This module contains optimized HashMap for Wolfram notation tokens
4//! like \[Alpha], \[Pi], etc.
5
6use super::token_maps::TokenType;
7use std::collections::HashMap;
8use std::sync::LazyLock;
9
10/// Wolfram token classification map for O(1) lookups
11pub static WOLFRAM_TOKEN_MAP: LazyLock<HashMap<&'static str, TokenType>> = LazyLock::new(|| {
12    let mut map = HashMap::new();
13
14    // Wolfram 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("\\[EulerGamma]", TokenType::Constant);
20
21    // Wolfram Greek Symbols
22    map.insert("\\[Alpha]", TokenType::GreekSymbol);
23    map.insert("\\[Beta]", TokenType::GreekSymbol);
24    map.insert("\\[Delta]", TokenType::GreekSymbol);
25    map.insert("\\[Epsilon]", TokenType::GreekSymbol);
26    map.insert("\\[Zeta]", TokenType::GreekSymbol);
27    map.insert("\\[Eta]", TokenType::GreekSymbol);
28    map.insert("\\[Theta]", TokenType::GreekSymbol);
29    map.insert("\\[Iota]", TokenType::GreekSymbol);
30    map.insert("\\[Kappa]", TokenType::GreekSymbol);
31    map.insert("\\[Lambda]", TokenType::GreekSymbol);
32    map.insert("\\[Mu]", TokenType::GreekSymbol);
33    map.insert("\\[Nu]", TokenType::GreekSymbol);
34    map.insert("\\[Xi]", TokenType::GreekSymbol);
35    map.insert("\\[Omicron]", TokenType::GreekSymbol);
36    map.insert("\\[Rho]", TokenType::GreekSymbol);
37    map.insert("\\[Sigma]", TokenType::GreekSymbol);
38    map.insert("\\[Tau]", TokenType::GreekSymbol);
39    map.insert("\\[Upsilon]", TokenType::GreekSymbol);
40    map.insert("\\[Chi]", TokenType::GreekSymbol);
41    map.insert("\\[Psi]", TokenType::GreekSymbol);
42    map.insert("\\[Omega]", TokenType::GreekSymbol);
43
44    // Wolfram Functions (for implicit multiplication)
45    // Basic Mathematical Functions
46    map.insert("Sin", TokenType::Function);
47    map.insert("Cos", TokenType::Function);
48    map.insert("Tan", TokenType::Function);
49    map.insert("Sec", TokenType::Function);
50    map.insert("Csc", TokenType::Function);
51    map.insert("Cot", TokenType::Function);
52
53    // Hyperbolic Functions
54    map.insert("Sinh", TokenType::Function);
55    map.insert("Cosh", TokenType::Function);
56    map.insert("Tanh", TokenType::Function);
57    map.insert("Sech", TokenType::Function);
58    map.insert("Csch", TokenType::Function);
59    map.insert("Coth", TokenType::Function);
60
61    // Inverse Trigonometric Functions
62    map.insert("ArcSin", TokenType::Function);
63    map.insert("ArcCos", TokenType::Function);
64    map.insert("ArcTan", TokenType::Function);
65    map.insert("ArcSec", TokenType::Function);
66    map.insert("ArcCsc", TokenType::Function);
67    map.insert("ArcCot", TokenType::Function);
68
69    // Logarithmic and Exponential Functions
70    map.insert("Log", TokenType::Function);
71    map.insert("Ln", TokenType::Function);
72    map.insert("Log10", TokenType::Function);
73    map.insert("Log2", TokenType::Function);
74    map.insert("Exp", TokenType::Function);
75    map.insert("Sqrt", TokenType::Function);
76
77    // Basic Utility Functions
78    map.insert("Abs", TokenType::Function);
79    map.insert("Sign", TokenType::Function);
80    map.insert("Max", TokenType::Function);
81    map.insert("Min", TokenType::Function);
82    map.insert("Floor", TokenType::Function);
83    map.insert("Ceiling", TokenType::Function);
84    map.insert("Round", TokenType::Function);
85
86    // Complex Functions
87    map.insert("Re", TokenType::Function);
88    map.insert("Im", TokenType::Function);
89    map.insert("Conjugate", TokenType::Function);
90    map.insert("Arg", TokenType::Function);
91
92    // Special Functions
93    map.insert("Gamma", TokenType::Function);
94    map.insert("BesselJ", TokenType::Function);
95    map.insert("BesselY", TokenType::Function);
96    map.insert("BesselI", TokenType::Function);
97    map.insert("BesselK", TokenType::Function);
98    map.insert("LegendreP", TokenType::Function);
99    map.insert("LegendreQ", TokenType::Function);
100    map.insert("HermiteH", TokenType::Function);
101    map.insert("LaguerreL", TokenType::Function);
102    map.insert("ChebyshevT", TokenType::Function);
103    map.insert("ChebyshevU", TokenType::Function);
104
105    // Calculus Functions (these create special expressions, not simple functions)
106    // Note: D, Integrate, Limit, Sum, Product should be handled specially in grammar
107    // They are NOT classified as Function type for implicit multiplication
108
109    // Note: Matrix operations (Det, Tr, Inverse, Transpose, Eigenvalues, Eigenvectors)
110    // are handled as matrix methods, not simple functions
111
112    // Number Theory Functions
113    map.insert("GCD", TokenType::Function);
114    map.insert("LCM", TokenType::Function);
115    map.insert("Factorial", TokenType::Function);
116    map.insert("Binomial", TokenType::Function);
117    map.insert("EulerPhi", TokenType::Function);
118    map.insert("PrimePi", TokenType::Function);
119    map.insert("MoebiusMu", TokenType::Function);
120
121    // Polynomial Functions
122    map.insert("PolynomialGCD", TokenType::Function);
123    map.insert("Resultant", TokenType::Function);
124    map.insert("Discriminant", TokenType::Function);
125    map.insert("CyclotomicPolynomial", TokenType::Function);
126    map.insert("MinimalPolynomial", TokenType::Function);
127    map.insert("GroebnerBasis", TokenType::Function);
128
129    // Statistical Functions
130    map.insert("Mean", TokenType::Function);
131    map.insert("Median", TokenType::Function);
132    map.insert("Variance", TokenType::Function);
133    map.insert("StandardDeviation", TokenType::Function);
134
135    map
136});