fn sum_expr(&mut self) -> WeldResult<Box<Expr>> {
        let mut res = self.product_expr()?;
        while *self.peek() == TPlus || *self.peek() == TMinus {
            let token = self.next();
            let right = self.product_expr()?;
            if *token == TPlus {
                res = expr_box(
                    BinOp {
                        kind: Add,
                        left: res,
                        right,
                    },
                    Annotations::new(),
                )
            } else {
                res = expr_box(
                    BinOp {
                        kind: Subtract,
                        left: res,
                        right,
                    },
                    Annotations::new(),
                )
            }
        }
        Ok(res)
    }
Parse a sum expression with terms separated by + and - (for operator precedence).
weld/src/syntax/parser.rs