compileExp (EInt n) = show n
compileExp (EVar (Ident i)) = i
compileExp (EAss (Ident i) e) = i++"="++compileExp e
compileExp (EInt n) = show n
compileExp (EVar (Ident i)) = i
compileExp (EAss (Ident i) e) = i++"="++compileExp e
compileExp (BiOpExp e o e') = "("++compileExp e++")"++op o++"("++compileExp e'++")"
compileExp (ENeg e) = "-("++compileExp e++")"
compileExp (ENot e) ="!("++compileExp e++")"
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 (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