pub enum Multiplicative {
Multiply(Box<Multiplicative>, Unary),
Divide(Box<Multiplicative>, Unary),
Modulus(Box<Multiplicative>, Unary),
Primary(Box<Primary>),
}Expand description
A multiplicative expression node in the abstract syntax tree.
Represents a multiplicative operation (*, /, %) or a
lower-precedence expression that has been flattened in the AST.
This enum implements the ExpressionLike trait, allowing it
to be evaluated within a context.
§Variants
Multiply(Box<Multiplicative>, Unary)- Multiplication operationDivide(Box<Multiplicative>, Unary)- Division operationModulus(Box<Multiplicative>, Unary)- Modulus operationPrimary(Primary)- Flattened variants from lower precedence levels
§AST Optimization
The Primary variant is used for AST flattening optimization, where
expressions that don’t contain multiplicative operators are stored
directly rather than wrapped in unnecessary operation nodes.
§Error Handling
During evaluation, multiplicative operations:
- Require numeric operands (return error for non-numeric types)
- Check for division by zero (return error for
/ 0or% 0) - Use type promotion via
evaluate_and_promote
§Examples
use aimx::expressions::multiplicative::{Multiplicative, parse_multiplicative};
use aimx::{aimx_parse, Literal};
// Parse a multiplication expression
let (_, expr) = parse_multiplicative("2 * 3").unwrap();
assert!(matches!(expr, Multiplicative::Multiply(_, _)));
// Parse a division expression
let (_, expr) = parse_multiplicative("10 / 2").unwrap();
assert!(matches!(expr, Multiplicative::Divide(_, _)));Variants§
Multiply(Box<Multiplicative>, Unary)
Divide(Box<Multiplicative>, Unary)
Modulus(Box<Multiplicative>, Unary)
Primary(Box<Primary>)
Primary flattened AST optimization
Trait Implementations§
Source§impl Clone for Multiplicative
impl Clone for Multiplicative
Source§fn clone(&self) -> Multiplicative
fn clone(&self) -> Multiplicative
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for Multiplicative
impl Debug for Multiplicative
Source§impl Display for Multiplicative
impl Display for Multiplicative
Source§impl ExpressionLike for Multiplicative
impl ExpressionLike for Multiplicative
Source§fn evaluate(&self, context: &mut dyn ContextLike) -> Result<Value>
fn evaluate(&self, context: &mut dyn ContextLike) -> Result<Value>
Evaluate the expression within the given context. Read more
Source§fn to_sanitized(&self) -> String
fn to_sanitized(&self) -> String
Convert this expression to a sanitized string representation. Read more
Source§fn to_formula(&self) -> String
fn to_formula(&self) -> String
Convert this expression to a formula string representation. Read more
Source§impl PartialEq for Multiplicative
impl PartialEq for Multiplicative
impl StructuralPartialEq for Multiplicative
Auto Trait Implementations§
impl Freeze for Multiplicative
impl RefUnwindSafe for Multiplicative
impl Send for Multiplicative
impl Sync for Multiplicative
impl Unpin for Multiplicative
impl UnwindSafe for Multiplicative
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.