sep of concerns
authorMart Lubbers <mart@martlubbers.net>
Mon, 18 Jun 2018 15:00:11 +0000 (17:00 +0200)
committerMart Lubbers <mart@martlubbers.net>
Mon, 18 Jun 2018 15:00:11 +0000 (17:00 +0200)
expr/exist/while.dcl
expr/exist/while.icl
expr/exist/whileMult.dcl
expr/exist/whileMult.icl
expr/exist/whileRep.dcl
expr/exist/whileRep.icl

index 7431e3f..a2535f3 100644 (file)
@@ -9,20 +9,20 @@ definition module while
        | (:.) infixr 0 WhileExpr WhileExpr
        | While WhileBool Do WhileExpr
        | Skip
-       | E.e: WExpr e & eval e
+       | E.e: WExpr e & eval e & print e
 
 :: WhileBool
        = Bool Bool
        | (==.) infix 4 WhileInt WhileInt
        | (&.) infix 3 WhileBool WhileBool
        | Not WhileBool
-       | E.e: WBool e & evalb e
+       | E.e: WBool e & evalb e & print e
 
 :: WhileInt
        = Int Int
        | Var String
        | (+.) infixl 6 WhileInt WhileInt
-       | E.e: WInt e & evali e
+       | E.e: WInt e & evali e & print e
 
 class gamma g
 where
@@ -40,3 +40,9 @@ class evalb m :: m -> (g -> Bool) | gamma g
 instance eval WhileExpr
 instance evali WhileInt
 instance evalb WhileBool
+
+class print m :: m -> String
+
+instance print WhileExpr
+instance print WhileInt
+instance print WhileBool
index 4e23327..72430fc 100644 (file)
@@ -35,4 +35,28 @@ where
        evalb (Not a)   = not o evalb a
        evalb (WBool e) = evalb e
 
+instance print WhileExpr
+where
+       print (i =. v)         = i +++ " := " +++ print v
+       print (If b _ t _ e)   = "If " +++ print b +++ " then " +++ print t +++ " else " +++ print e
+       print (a :. b)         = print a +++ "; " +++ print b
+       print x=:(While b _ e) = "While " +++ print b +++ " do " +++ print e
+       print Skip             = "Skip"
+       print (WExpr e)        = print e
+
+instance print WhileInt
+where
+       print (Int i)  = toString i
+       print (Var s)  = s
+       print (a +. b) = print a +++ " + " +++ print b
+       print (WInt e) = print e
+
+instance print WhileBool
+where
+       print (Bool b)  = toString b
+       print (a ==. b) = print a +++ " = " +++ print b
+       print (a &. b)  = print a +++ " && " +++ print b
+       print (Not a)   = "!" +++ print a
+       print (WBool e) = print e
+
 Start = (eval ("a" =. Int 42 :. While (Bool False) Do ("b" =. Int 4)) emptyGamma) "a"
index 6179bf5..4a8b991 100644 (file)
@@ -8,3 +8,4 @@ import while
 (*.) a b :== WInt (WMult a b)
 
 instance evali WMult
+instance print WMult
index 379404e..a7e6283 100644 (file)
@@ -4,3 +4,4 @@ import StdEnv
 import while
 
 instance evali WMult where evali (WMult a b) = \g->evali a g * evali b g
+instance print WMult where print (WMult a b) = print a +++ " * " +++ print b
index 2fdea00..dd16bf8 100644 (file)
@@ -8,3 +8,4 @@ import while
 Repeat e Until b :== WExpr (WRepeat e Until b)
 
 instance eval WRep
+instance print WRep
index 6b5fe6f..da70d5e 100644 (file)
@@ -1,7 +1,9 @@
 implementation module whileRep
 
+import StdEnv
 import while
 
 :: WRep = WRepeat WhileExpr Until WhileBool
 
-instance eval WRep where eval (WRepeat e Until b) = eval (e :. While b Do e)
+instance eval WRep where eval (WRepeat e _ b) = eval (e :. While b Do e)
+instance print WRep where print (WRepeat e _ b) = "Repeat " +++ print e +++ " until " +++ print b