diff --git a/parser/src/grammar.pest b/parser/src/grammar.pest index b0522c4..dc508e2 100644 --- a/parser/src/grammar.pest +++ b/parser/src/grammar.pest @@ -45,6 +45,7 @@ statement_list = { statement* } statement = _{ expr_stmt | var_decl_statement + | assign_statement | if_stmt | while_stmt | return_stmt @@ -65,6 +66,8 @@ continue_stmt = { "continue" ~ ";" } var_decl_statement = { var_decl ~ ("=" ~ expr)? ~ ";" } +assign_statement = { expr ~ "=" ~ expr ~ ";" } + if_stmt = { "if" ~ "(" ~ expr ~ ")" ~ statement ~ ("else" ~ statement)? } diff --git a/parser/src/lib.rs b/parser/src/lib.rs index 5d1907c..2b5bbbc 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -262,6 +262,15 @@ impl From> for Statement { }) } + Rule::assign_statement => { + let mut inner = pair.into_inner(); + + Statement::VarAssign(VarAssignStmt { + target: Expression::from(inner.next().unwrap()), + value: Expression::from(inner.next().unwrap()), + }) + } + _ => unimplemented!( "Statement parsing not implemented yet: {:?}", pair.as_rule()