Browse Source

fix: nested expression parsing

fixes: #8, #18
master
Garrit Franke 3 years ago
parent
commit
f58ec04ec3
  1. 6
      src/parser/rules.rs
  2. 2
      src/parser/tests.rs

6
src/parser/rules.rs

@ -180,6 +180,7 @@ impl Parser {
let token = self.peek()?; let token = self.peek()?;
match &token.kind { match &token.kind {
TokenKind::CurlyBracesOpen => self.parse_block(), TokenKind::CurlyBracesOpen => self.parse_block(),
TokenKind::BraceOpen => Ok(Statement::Exp(self.parse_expression()?)),
TokenKind::Keyword(Keyword::Let) => self.parse_declare(), TokenKind::Keyword(Keyword::Let) => self.parse_declare(),
TokenKind::Keyword(Keyword::Return) => self.parse_return(), TokenKind::Keyword(Keyword::Return) => self.parse_return(),
TokenKind::Keyword(Keyword::If) => self.parse_conditional_statement(), TokenKind::Keyword(Keyword::If) => self.parse_conditional_statement(),
@ -292,7 +293,10 @@ impl Parser {
TokenKind::BraceOpen => { TokenKind::BraceOpen => {
let expr = self.parse_expression()?; let expr = self.parse_expression()?;
self.match_token(TokenKind::BraceClose)?; self.match_token(TokenKind::BraceClose)?;
expr match BinOp::try_from(self.peek()?.kind) {
Ok(_) => self.parse_bin_op(Some(expr))?,
Err(_) => expr,
}
} }
TokenKind::Keyword(Keyword::Boolean) => match BinOp::try_from(self.peek()?.kind) { TokenKind::Keyword(Keyword::Boolean) => match BinOp::try_from(self.peek()?.kind) {
Ok(_) => self.parse_bin_op(None)?, Ok(_) => self.parse_bin_op(None)?,

2
src/parser/tests.rs

@ -747,7 +747,6 @@ fn test_break() {
} }
#[test] #[test]
#[ignore]
fn test_complex_nested_expressions() { fn test_complex_nested_expressions() {
let raw = " let raw = "
fn main() { fn main() {
@ -800,7 +799,6 @@ fn test_struct_initialization() {
} }
#[test] #[test]
#[ignore]
fn test_arithmetic() { fn test_arithmetic() {
// These should pass // These should pass
let raw = "fn main() {1*1}"; let raw = "fn main() {1*1}";

Loading…
Cancel
Save