From 129d03b74d74236327f299feb635b940717785eb Mon Sep 17 00:00:00 2001 From: Seymur Bagirov Date: Mon, 13 Jan 2025 08:46:39 +0400 Subject: [PATCH] fix: fix comma precedence it should be lower than assignement. Now we can do stuff like a = 10, b = 30(before this commit we couldn't this was a bug) --- src/parser.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 2ea019b..4940ab0 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -111,11 +111,18 @@ impl Parser<'_> { } fn expression(&mut self) -> Result { - self.assignment() + self.comma() + } + + // Challenge #1. We're writing comma before equality, because it has the lowest precedence + // comma -> equality ("," equality)* ; // expression grammar + fn comma(&mut self) -> Result { + use TokenType::*; + self.left_association_binary(&[Comma], Self::assignment) } fn assignment(&mut self) -> Result { - let expr = self.comma()?; + let expr = self.ternary()?; if self.match_token(&[TokenType::Equal]) { let value = self.assignment()?; @@ -136,13 +143,6 @@ impl Parser<'_> { Ok(expr) } - // Challenge #1. We're writing comma before equality, because it has the lowest precedence - // comma -> equality ("," equality)* ; // expression grammar - fn comma(&mut self) -> Result { - use TokenType::*; - self.left_association_binary(&[Comma], Self::ternary) - } - // ternary -> equality ("?" expression : ternary)? // expression grammar fn ternary(&mut self) -> Result { use TokenType::*;