False -> prPrec i 0 (concatD [doc (showString "false")])
+instance Print Type where
+ prt i e = case e of
+ TInt -> prPrec i 0 (concatD [doc (showString "int")])
+ TBool -> prPrec i 0 (concatD [doc (showString "bool")])
+
+
+instance Print Program where
+ prt i e = case e of
+ Program funcstms -> prPrec i 0 (concatD [prt 0 funcstms])
+
+
instance Print Stm where
prt i e = case e of
- SDecl type' id exp -> prPrec i 0 (concatD [prt 0 type' , prt 0 id , doc (showString "=") , prt 0 exp , doc (showString ";")])
SExp exp -> prPrec i 0 (concatD [prt 0 exp , doc (showString ";")])
SBlock stms -> prPrec i 0 (concatD [doc (showString "{") , prt 0 stms , doc (showString "}")])
- SIf exp stm0 stm -> prPrec i 0 (concatD [doc (showString "if") , doc (showString "(") , prt 0 exp , doc (showString ")") , prt 0 stm0 , doc (showString "else") , prt 0 stm])
+ SDecl type' id exp -> prPrec i 0 (concatD [prt 0 type' , prt 0 id , doc (showString "=") , prt 0 exp , doc (showString ";")])
+ SDeclD type' id -> prPrec i 0 (concatD [prt 0 type' , prt 0 id , doc (showString ";")])
SWhile exp stm -> prPrec i 0 (concatD [doc (showString "while") , doc (showString "(") , prt 0 exp , doc (showString ")") , prt 0 stm])
+ SIf exp stm0 stm -> prPrec i 0 (concatD [doc (showString "if") , doc (showString "(") , prt 0 exp , doc (showString ")") , prt 0 stm0 , doc (showString "else") , prt 0 stm])
SPrint exp -> prPrec i 0 (concatD [doc (showString "print") , prt 0 exp , doc (showString ";")])
+ SReturn exp -> prPrec i 0 (concatD [doc (showString "return") , prt 0 exp , doc (showString ";")])
SNoop -> prPrec i 0 (concatD [])
prtList es = case es of
EAss id exp -> prPrec i 0 (concatD [prt 0 id , doc (showString "=") , prt 0 exp])
EVar id -> prPrec i 3 (concatD [prt 0 id])
EInt n -> prPrec i 3 (concatD [prt 0 n])
- ENeg exp -> prPrec i 3 (concatD [doc (showString "-") , prt 3 exp])
EBool bool -> prPrec i 3 (concatD [prt 0 bool])
+ ENeg exp -> prPrec i 3 (concatD [doc (showString "-") , prt 3 exp])
+ ENot exp -> prPrec i 3 (concatD [doc (showString "!") , prt 3 exp])
EReadI -> prPrec i 3 (concatD [doc (showString "readInt")])
EReadB -> prPrec i 3 (concatD [doc (showString "readBool")])
- ExpT type' exp -> prPrec i 0 (concatD [prt 0 type' , prt 0 exp])
- EDefault -> prPrec i 0 (concatD [])
+ EFunc id exps -> prPrec i 3 (concatD [prt 0 id , doc (showString "(") , prt 0 exps , doc (showString ")")])
BiOpExp exp0 op exp -> prPrec i 0 (concatD [prt 0 exp0 , prt 0 op , prt 0 exp])
EPost id op -> prPrec i 0 (concatD [prt 0 id , prt 1 op])
+ prtList es = case es of
+ [] -> (concatD [])
+ [x] -> (concatD [prt 0 x])
+ x:xs -> (concatD [prt 0 x , doc (showString ",") , prt 0 xs])
-instance Print Stms where
+instance Print Decl where
prt i e = case e of
- Program stms -> prPrec i 0 (concatD [prt 0 stms])
+ Decl type' id -> prPrec i 0 (concatD [prt 0 type' , prt 0 id])
+ prtList es = case es of
+ [] -> (concatD [])
+ [x] -> (concatD [prt 0 x])
+ x:xs -> (concatD [prt 0 x , doc (showString ",") , prt 0 xs])
+
+instance Print Func where
+ prt i e = case e of
+ Func type' id decls stms -> prPrec i 0 (concatD [prt 0 type' , prt 0 id , doc (showString "(") , prt 0 decls , doc (showString ")") , doc (showString "{") , prt 0 stms , doc (showString "}")])
+
+ prtList es = case es of
+ [] -> (concatD [])
+ x:xs -> (concatD [prt 0 x , prt 0 xs])
+
+instance Print FuncStm where
+ prt i e = case e of
+ S stm -> prPrec i 0 (concatD [prt 0 stm])
+ F func -> prPrec i 0 (concatD [prt 0 func])
+
+ prtList es = case es of
+ [] -> (concatD [])
+ x:xs -> (concatD [prt 0 x , prt 0 xs])
instance Print Op where
prt i e = case e of
Div -> prPrec i 2 (concatD [doc (showString "/")])
-instance Print Type where
- prt i e = case e of
- TInt -> prPrec i 0 (concatD [doc (showString "int")])
- TBool -> prPrec i 0 (concatD [doc (showString "bool")])
- NoType -> prPrec i 0 (concatD [])
-
-