X-Git-Url: https://ruin.nu/git/?p=proglang.git;a=blobdiff_plain;f=Printsyntax.hs;h=287fbaefe878444e73a106d2d33887fed4c3856a;hp=aeb32584f78b7bd2a380d9ed2361ab0e57b33fed;hb=HEAD;hpb=e9be0603d9dbd1caa6a0032cad0e39815cb8f38d diff --git a/Printsyntax.hs b/Printsyntax.hs index aeb3258..287fbae 100644 --- a/Printsyntax.hs +++ b/Printsyntax.hs @@ -87,14 +87,27 @@ instance Print Bool where 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 @@ -103,26 +116,50 @@ instance Print Stm where instance Print Exp where prt i e = case e of - BExp exp0 bop exp -> prPrec i 0 (concatD [prt 1 exp0 , prt 0 bop , prt 1 exp]) + EAss id exp -> prPrec i 0 (concatD [prt 0 id , doc (showString "=") , prt 0 exp]) EVar id -> prPrec i 3 (concatD [prt 0 id]) - EAss id exp -> prPrec i 3 (concatD [prt 0 id , doc (showString "=") , prt 0 exp]) 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 []) - OpExp exp0 op exp -> prPrec i 0 (concatD [prt 0 exp0 , prt 0 op , prt 0 exp]) + 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 Decl where + prt i e = case e of + 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 "}")]) -instance Print Stms where + 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 - Program stms -> prPrec i 0 (concatD [prt 0 stms]) + 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 BOp where +instance Print Op where prt i e = case e of Lt -> prPrec i 0 (concatD [doc (showString "<")]) ELt -> prPrec i 0 (concatD [doc (showString "<=")]) @@ -130,21 +167,10 @@ instance Print BOp where EGt -> prPrec i 0 (concatD [doc (showString ">=")]) Eq -> prPrec i 0 (concatD [doc (showString "==")]) NEq -> prPrec i 0 (concatD [doc (showString "!=")]) - - -instance Print Op where - prt i e = case e of Plus -> prPrec i 1 (concatD [doc (showString "+")]) Minus -> prPrec i 1 (concatD [doc (showString "-")]) Times -> prPrec i 2 (concatD [doc (showString "*")]) 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 []) - -