diff --git a/schala-lang/src/ast_reducing.rs b/schala-lang/src/ast_reducing.rs index 77035f3..5574f38 100644 --- a/schala-lang/src/ast_reducing.rs +++ b/schala-lang/src/ast_reducing.rs @@ -1,6 +1,7 @@ use std::rc::Rc; use parsing::{AST, Expression, Declaration}; +use builtin::{BinOp, PrefixOp}; #[derive(Debug)] pub struct ReducedAST(pub Vec); @@ -27,6 +28,7 @@ pub enum Expr { #[derive(Debug)] pub enum Lit { Int(u64), + Float(f64), Bool(bool), StringLit(Rc), } @@ -54,8 +56,11 @@ fn reduce_expr(expr: &Expression) -> Result { let ref input = expr.0; let output_expr = match input { &IntLiteral(ref n) => Expr::Lit(Lit::Int(*n)), + &FloatLiteral(ref f) => Expr::Lit(Lit::Float(*f)), &StringLiteral(ref s) => Expr::Lit(Lit::StringLit(s.clone())), &BoolLiteral(ref b) => Expr::Lit(Lit::Bool(*b)), + &BinExp(ref binop, ref lhs, ref rhs) => reduce_binop(binop, lhs, rhs)?, + &PrefixExp(ref op, ref arg) => reduce_prefix(op, arg)?, e => return Err(format!("{:?} not implemented in reduction", e)) }; Ok(Stmt::Expr(output_expr)) @@ -63,3 +68,11 @@ fn reduce_expr(expr: &Expression) -> Result { fn reduce_decl(expr: &Declaration) -> Result { Ok(Stmt::Expr(Expr::Lit(Lit::Int(0)))) } + +fn reduce_binop(binop: &BinOp, lhs: &Box, rhs: &Box) -> Result { + Err(format!("NOTDONE")) +} + +fn reduce_prefix(op: &PrefixOp, arg: &Box) -> Result { + Err(format!("NOTDONE")) +}