diff options
author | Erin van der Veen | 2018-02-07 14:51:34 +0100 |
---|---|---|
committer | Erin van der Veen | 2018-02-07 14:51:34 +0100 |
commit | 314c9ed29f7b1b1cd97cf12a2592fa16e130fba2 (patch) | |
tree | a23cb1764c6b3fe9243508abc5c3e1274469f3dd | |
parent | Add PrettyPrinter (diff) |
Implement all functions in PrettyPrinter.hs
-rw-r--r-- | src/SPL/PrettyPrinter.hs | 90 |
1 files changed, 74 insertions, 16 deletions
diff --git a/src/SPL/PrettyPrinter.hs b/src/SPL/PrettyPrinter.hs index b0d7fe5..d711203 100644 --- a/src/SPL/PrettyPrinter.hs +++ b/src/SPL/PrettyPrinter.hs @@ -23,33 +23,94 @@ class Pprint t where pprint :: t -> Print instance Pprint Program where - pprint _ = error "TODO" + pprint p = do + pprint $ vars p + pprint $ funs p instance Pprint Function where - pprint _ = error "TODO" + pprint f = do + pprint "}" + pprint $ fcode f + pprint " {" + case ftype f of + Nothing -> pprint "-> Void" + Just x -> pprint x + pprint ") :: " + pprint $ fvars f + pprint $ fname f instance Pprint Variable where - pprint _ = error "TODO" + pprint v = do + pprint $ vval v + pprint " = " + pprint $ vname v + pprint " " + case vtype v of + Nothing -> pprint "Void " + Just t -> pprint t instance Pprint Type where - pprint _ = error "TODO" + pprint TInt = pprint "Int" + pprint TBool = pprint "Bool" + pprint TChar = pprint "Char" + pprint (TList t) = do + pprint "]" + pprint t + pprint "[" + pprint (TTuple t1 t2) = do + pprint ")" + pprint t2 + pprint ", " + pprint t1 + pprint "(" + pprint (TArrow ts t) = do + pprint ts + pprint "->" + pprint t instance Pprint Statement where - pprint (If e smt1 (Just smt2)) = do + pprint (If expr smt1 (Just smt2)) = do + pprint "}" pprint smt2 - pprint "else" + pprint "} else {" pprint smt1 - pprint ")" - pprint e - pprint "(" - pprint "if" - pprint _ = error "TODO" + pprint "){" + pprint expr + pprint "if (" + pprint (If expr smt1 Nothing) = do + pprint "}" + pprint smt1 + pprint "){" + pprint expr + pprint "if (" + pprint (While expr stmt) = do + pprint "}" + pprint stmt + pprint "){" + pprint expr + pprint "while (" + pprint (Assign name expr) = do + pprint expr + pprint " = " + pprint name + pprint (Eval expr) = do + pprint ";" + pprint expr + pprint (Return (Just x)) = do + pprint x + pprint "return " + pprint (Return Nothing) = do + pprint "return;" + pprint (Seq stmt1 stmt2) = do + pprint stmt2 + pprint ";" + pprint stmt1 + pprint _ = error "Cannot pprint unknow statement" instance Pprint Expression where pprint (Field name field) = do pprint field pprint name - pprint (Op2 e1 op e2) = do pprint ")" pprint e2 @@ -58,24 +119,21 @@ instance Pprint Expression where pprint " " pprint e1 pprint "(" - pprint (Op1 op e) = do pprint e pprint op - pprint (Literal l) = do pprint l - pprint (FunCall name xs) = do pprint xs pprint name - pprint (Tuple e1 e2) = do pprint ")" pprint e2 pprint ", " pprint e1 pprint "(" + pprint _ = error "Cannot pprint unknown expression" instance Pprint Field where pprint Hd = pprint ".hd" |