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::*;