compileExp (EInt n) = show n
compileExp (EVar (Ident i)) = i
compileExp (EAss (Ident i) e) = i++"="++compileExp e
-compileExp EDefault = error "EDefault called from an illegal place"
compileExp (BiOpExp e o e') = "("++compileExp e++")"++op o++"("++compileExp e'++")"
compileExp (ENeg e) = "-("++compileExp e++")"
compileExp (ENot e) ="!("++compileExp e++")"
compileStm (SPrint e) = "printf(\"%d\\n\","++compileExp e++");\n"
compileStm (SBlock ss) = "{\n"++concat (map (("\t"++).compileStm) ss)++"\n}\n"
compileStm (SWhile e s) = "while("++compileExp e++")"++compileStm s
-compileStm (SDecl t (Ident i) EDefault) = "int "++i++"=0;\n"
compileStm (SDecl t (Ident i) e) = "int "++i++"="++compileExp e++";\n"