diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2024-04-28 19:09:17 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2024-04-28 19:09:17 +0200 |
commit | be5d202e433b2e83f1f16ce8fac26a3ca2631189 (patch) | |
tree | 4f03e9e45de1a8e7a26c593fc541a9b11a177188 /crates/rebel-parse | |
parent | a4463b431904c0307135cc311674f0698b3d0946 (diff) | |
download | rebel-be5d202e433b2e83f1f16ce8fac26a3ca2631189.tar rebel-be5d202e433b2e83f1f16ce8fac26a3ca2631189.zip |
rebel-parse: grammar: order combined assignment operations
Test for more frequent operations earlier.
Diffstat (limited to 'crates/rebel-parse')
-rw-r--r-- | crates/rebel-parse/src/grammar/recipe.rs | 12 |
1 files 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<ast::OpBinary> - = 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(<p(':')>, <expr()>)? { ast::TypedExpr { expr, typ } } |