mathhook_core/macros/
parsing.rs

1//! Parsing macros for mathematical expressions
2//!
3//! Provides ergonomic parsing capabilities for mathematical expressions
4//! from string inputs.
5
6/// Parse mathematical expressions from strings
7///
8/// This macro provides convenient parsing of mathematical expressions.
9///
10/// # Examples
11///
12/// ```rust
13/// use mathhook_core::parse;
14///
15/// // Parse mathematical expression
16/// let expr = parse!("x^2 + 1").unwrap();
17///
18/// // Mathematical constants
19/// let pi = parse!(constant: pi);
20/// let e = parse!(constant: e);
21/// ```
22#[macro_export]
23macro_rules! parse {
24    // Simple string parsing
25    ($input:expr) => {{
26        $crate::parser::grammar::ExpressionParser::new().parse($input)
27    }};
28
29    // Mathematical constants
30    (constant: pi) => {
31        $crate::Expression::constant($crate::MathConstant::Pi)
32    };
33
34    (constant: e) => {
35        $crate::Expression::constant($crate::MathConstant::E)
36    };
37
38    (constant: i) => {
39        $crate::Expression::constant($crate::MathConstant::I)
40    };
41
42    (constant: infinity) => {
43        $crate::Expression::constant($crate::MathConstant::Infinity)
44    };
45}
46
47#[cfg(test)]
48mod tests {
49    use crate::{Expression, MathConstant};
50
51    #[test]
52    fn test_parse_constants() {
53        let pi = parse!(constant: pi);
54        assert_eq!(pi, Expression::constant(MathConstant::Pi));
55
56        let e = parse!(constant: e);
57        assert_eq!(e, Expression::constant(MathConstant::E));
58
59        let i = parse!(constant: i);
60        assert_eq!(i, Expression::constant(MathConstant::I));
61
62        let infinity = parse!(constant: infinity);
63        assert_eq!(infinity, Expression::constant(MathConstant::Infinity));
64    }
65
66    #[test]
67    fn test_parse_simple() {
68        let result = parse!("x").unwrap();
69        assert!(matches!(result, Expression::Symbol(_)));
70    }
71}