diff --git a/libs/compiler/src/test/binary_expression.rs b/libs/compiler/src/test/binary_expression.rs
index 68ccba6..8f890d4 100644
--- a/libs/compiler/src/test/binary_expression.rs
+++ b/libs/compiler/src/test/binary_expression.rs
@@ -84,6 +84,14 @@ fn stress_test_negation_with_stack_spillover() -> anyhow::Result<()> {
compiled,
indoc! {
"
+ j main
+ main:
+ add r1 -1 -2
+ add r2 -5 -6
+ mul r3 -4 r2
+ add r4 -3 r3
+ mul r5 r1 r4
+ move r8 r5 #negationHell
"
}
);
diff --git a/libs/compiler/src/v2.rs b/libs/compiler/src/v2.rs
index bd16f8c..a0e0098 100644
--- a/libs/compiler/src/v2.rs
+++ b/libs/compiler/src/v2.rs
@@ -747,3 +747,4 @@ impl<'a, W: std::io::Write> Compiler<'a, W> {
Ok(())
}
}
+
diff --git a/libs/parser/src/lib.rs b/libs/parser/src/lib.rs
index af35d12..4decc64 100644
--- a/libs/parser/src/lib.rs
+++ b/libs/parser/src/lib.rs
@@ -152,7 +152,33 @@ impl Parser {
Ok(self.current_token.as_ref())
}
+ /// Parses an expression, handling binary operations with correct precedence.
fn expression(&mut self) -> Result