summaryrefslogtreecommitdiff
path: root/src/SPL/PrettyPrinter.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/SPL/PrettyPrinter.hs')
-rw-r--r--src/SPL/PrettyPrinter.hs90
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"