protospec_build/parser/expression/
multiply.rs1use super::*;
2
3pub fn parse_multiply_expression(t: &mut TokenIter) -> ParseResult<Expression> {
4 let mut expr = parse_cast_expression(t)?;
5 while let Some(SpannedToken { token: op, .. }) =
6 t.eat_any(&[Token::Mul, Token::Div, Token::Mod])
7 {
8 let right = parse_cast_expression(t)?;
9 expr = Expression::Binary(BinaryExpression {
10 span: *expr.span() + *right.span(),
11 op: match op {
12 Token::Mul => BinaryOp::Mul,
13 Token::Div => BinaryOp::Div,
14 Token::Mod => BinaryOp::Mod,
15 _ => unimplemented!(),
16 },
17 left: Box::new(expr),
18 right: Box::new(right),
19 })
20 }
21 Ok(expr)
22}