]> ruin.nu Git - proglang.git/blobdiff - Printsyntax.hs
minor change
[proglang.git] / Printsyntax.hs
index 0e549511ce4275a12b895072d1a216b7f8bf45e8..287fbaefe878444e73a106d2d33887fed4c3856a 100644 (file)
@@ -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
@@ -104,25 +117,49 @@ instance Print Stm where
 instance Print Exp where
   prt i e = case e of
    EAss id exp -> prPrec i 0 (concatD [prt 0 id , doc (showString "=") , prt 0 exp])
-   BExp exp0 bop exp -> prPrec i 0 (concatD [prt 1 exp0 , prt 0 bop , prt 1 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 [])
-   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 [])
-
-