Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Operator Expressions

This section is a work-in-progress experiment about making the book executable.

Syntax
OperatorExpression:
    | e=BorrowExpression => OperatorExpression::Borrow(e)
    | e=DereferenceExpression => OperatorExpression::Dereference(e)
    | e=ArithmeticOrLogicalExpression => e
    | e=AssignmentExpression => e
BorrowExpression: & mutability=Mutability expression=Expression#[prec = `&`]
    => BorrowExpression { mutability, expression: Box::new(expression) }
DereferenceExpression: * expression=Expression#[prec = `*`]
    => DereferenceExpression { expression: Box::new(expression) }
ArithmeticOrLogicalExpression: a=Expression + b=Expression => OperatorExpression::Add(a, b)
AssignmentExpression: lhs=Expression = rhs=Expression => OperatorExpression::Assignment(lhs, rhs)

pub enum OperatorExpression {
    Borrow(BorrowExpression),
    Dereference(DereferenceExpression),
    Add(Expression, Expression),
    Assignment(Expression, Expression),
}

The & (shared borrow) and &mut (mutable borrow) operators are unary prefix operators. [expr.operator.borrow.intro].

pub struct BorrowExpression {
    pub mutability: Mutability,
    pub expression: Box<Expression>,
}

The * dereference operator is applied to a pointer and denotes the pointed-to location. [expr.deref.result].

pub struct DereferenceExpression {
    pub expression: Box<Expression>,
}