From be5d202e433b2e83f1f16ce8fac26a3ca2631189 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 28 Apr 2024 19:09:17 +0200 Subject: rebel-parse: grammar: order combined assignment operations Test for more frequent operations earlier. --- crates/rebel-parse/src/grammar/recipe.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/rebel-parse/src/grammar/recipe.rs b/crates/rebel-parse/src/grammar/recipe.rs index fedc8a8..5d308e0 100644 --- a/crates/rebel-parse/src/grammar/recipe.rs +++ b/crates/rebel-parse/src/grammar/recipe.rs @@ -27,24 +27,24 @@ peg::parser! { = body:body_stmt() ++ p(';') { ast::Body(body) } pub rule body_stmt() -> ast::BodyStmt<'a> - = dest:typed_expr() p2('=', '+') expr:expr() { - ast::BodyStmt::assign(dest, Some(Add), true, expr) - } - / dest:typed_expr() op:assign_op() expr:expr() { + = dest:typed_expr() op:assign_op() expr:expr() { ast::BodyStmt::assign(dest, op, false, expr) } + / dest:typed_expr() p2('=', '+') expr:expr() { + ast::BodyStmt::assign(dest, Some(Add), true, expr) + } / expr:expr() { ast::BodyStmt::Expr { expr: Box::new(expr) } } / { ast::BodyStmt::Empty } rule assign_op() -> Option - = p2('+', '=') { Some(Add) } + = p('=') { None } + / p2('+', '=') { Some(Add) } / p2('-', '=') { Some(Sub) } / p2('*', '=') { Some(Mul) } / p2('/', '=') { Some(Div) } / p2('%', '=') { Some(Rem) } - / p('=') { None } rule typed_expr() -> ast::TypedExpr<'a> = expr:expr() typ:tagged(, )? { ast::TypedExpr { expr, typ } } -- cgit v1.2.3