print gamma jowww
authorMart Lubbers <mart@martlubbers.net>
Wed, 13 Apr 2016 09:37:10 +0000 (11:37 +0200)
committerMart Lubbers <mart@martlubbers.net>
Wed, 13 Apr 2016 09:37:10 +0000 (11:37 +0200)
sem.dcl
sem.icl
spl.icl

diff --git a/sem.dcl b/sem.dcl
index b34bbc3..a2bcd57 100644 (file)
--- a/sem.dcl
+++ b/sem.dcl
@@ -1,5 +1,6 @@
 definition module sem
 
+import qualified Data.Map as Map
 from Data.Either import :: Either
 from AST import :: AST, :: Pos, :: Type
 from StdOverloaded import class toString
@@ -9,9 +10,10 @@ from StdOverloaded import class toString
        | UnifyError Pos Type Type 
        | UnifyErrorStub Type Type 
        | Error String
-:: SemOutput :== Either [SemError] AST
-
+:: Gamma
+:: SemOutput :== Either [SemError] (AST, Gamma)
 
 instance toString SemError
+instance toString Gamma
 
 sem :: AST -> SemOutput
diff --git a/sem.icl b/sem.icl
index 8224a4f..c5e14f3 100644 (file)
--- a/sem.icl
+++ b/sem.icl
@@ -59,9 +59,9 @@ instance toString SemError where
                toString t1, ". Given: ", toString t2]
 
 sem :: AST -> SemOutput
-sem (AST vd fd) = case evalStateT m ('Map'.newMap, getRandomStream 0) of
+sem (AST vd fd) = case runStateT m ('Map'.newMap, getRandomStream 0) of
     Left e = Left [e]
-    Right (vds, fds) = Right (AST vds fds)
+    Right ((vds, fds), gamma) = Right ((AST vds fds), gamma)
 where 
     m :: Env (([VarDecl], [FunDecl]))
     m = (mapM semVarDecl vd) >>= \vds -> 
@@ -155,4 +155,8 @@ extrPos (CharExpr p _) = p
 extrPos (BoolExpr p _) = p
 extrPos (FunExpr p _) = p
 extrPos (EmptyListExpr p) = p
-extrPos (TupleExpr p _) = p
\ No newline at end of file
+extrPos (TupleExpr p _) = p
+
+instance toString Gamma where
+       toString (mp, _) = concat
+               [concat [k, ": ", toString v, "\n"]\\(k, v) <- 'Map'.toList mp]
diff --git a/spl.icl b/spl.icl
index 1690d71..2a4fb97 100644 (file)
--- a/spl.icl
+++ b/spl.icl
@@ -12,6 +12,7 @@ import Data.Maybe
 import Data.Func
 import System.CommandLine
 import GenPrint
+import Data.Map
 from Text import class Text(concat,join), instance Text String
 
 import parse
@@ -67,9 +68,9 @@ Start w
                                stdin <<<  "//PARSER\n" <<< toString parseOut <<< "//PARSER\n")
                        = case sem parseOut of
                                (Left e) = snd $ fclose (stdin <<< join "\n" (map toString e)) w
-                               (Right semOut)
+                               (Right (semOut, gamma))
                                # stdin = if (not args.sem) stdin (
-                                       stdin <<<  "//SEM\n" <<< toString semOut <<< "//SEM\n")
+                                       stdin <<<  "//SEM\n" <<< toString gamma <<< "//SEM\n")
                                = snd $ fclose stdin w
                where
                        printTokens :: [Token] -> String