diff --git a/src/syn/parser.y b/src/syn/parser.y index a320f5f..05d2a25 100644 --- a/src/syn/parser.y +++ b/src/syn/parser.y @@ -19,7 +19,24 @@ Body -> Result>: Stmt -> Result: Expr { Ok(Stmt::Expr($1?)) } - //| Assign { todo!() } + | Assign { todo!() } + ; + +Assign -> Result: + LhsExpr '=' Expr { + todo!() + } + ; + +LhsExpr -> Result: + AccessExpr { + let lhs = match $1? { + Expr::Access(access) => LhsExpr::SetAttr(*access), + Expr::Atom(Atom::Ident(local)) => LhsExpr::Local(local), + _ => todo!("TODO : invalid syntax, raise error"), + }; + Ok(lhs) + } ; Expr -> Result: BinExpr { $1 };