X-Git-Url: https://ruin.nu/git/?p=proglang.git;a=blobdiff_plain;f=Typechecker.hs;h=8828fbeab974b228fead9839c44491f20d6114a7;hp=d9b1e1047b67d8b355dca3290ac93173b4e0417d;hb=ff80cbdaf843e2745f59e6f5d3c8670cadbf68b2;hpb=d606bc7eda59e30fbb75555b4d4c5da91b7327b9 diff --git a/Typechecker.hs b/Typechecker.hs index d9b1e10..8828fbe 100644 --- a/Typechecker.hs +++ b/Typechecker.hs @@ -11,9 +11,9 @@ import Skelsyntax import Printsyntax import Abssyntax -import Typecheck -import Control.Monad.State +import Control.Monad.State hiding (State) import Data.Map as Map hiding (showTree) +import Typecheck import ErrM @@ -23,23 +23,29 @@ myLLexer = myLexer type Verbosity = Int + +splitFunStm :: [FuncStm] -> ([Func],[Stm]) +splitFunStm [] = ([],[]) +splitFunStm ((F f):fss) = let (fs,ss) = splitFunStm fss in (f:fs,ss) +splitFunStm ((S s):fss) = let (fs,ss) = splitFunStm fss in (fs,s:ss) + putStrV :: Verbosity -> String -> IO () putStrV v s = if v > 1 then putStrLn s else return () -runFile :: Verbosity -> ParseFun Stms -> FilePath -> IO () +runFile :: Verbosity -> ParseFun Program -> FilePath -> IO () runFile v p f = putStrLn f >> readFile f >>= run v p -run :: Verbosity -> ParseFun Stms -> String -> IO () +run :: Verbosity -> ParseFun Program -> String -> IO () run v p s = let ts = myLLexer s in case p ts of Bad s -> do putStrLn "\nParse Failed...\n" putStrV v "Tokens:" putStrV v $ show ts putStrLn s - Ok (Program s) -> do + Ok (Program s) -> let (fun,st) = splitFunStm (s) in do putStrLn "\nParse Successful!" showTree v (Program s) - runStateT (mapM typeCheckStm s) [empty] + runStateT (mapM typeCheckStm st) State{variables=[empty], functions=[empty], function=(Ident "")} print "The program is type-correct!!" return () @@ -52,9 +58,9 @@ showTree v tree main :: IO () main = do args <- getArgs case args of - [] -> hGetContents stdin >>= run 2 pStms - "-s":fs -> mapM_ (runFile 0 pStms) fs - fs -> mapM_ (runFile 2 pStms) fs + [] -> hGetContents stdin >>= run 2 pProgram + "-s":fs -> mapM_ (runFile 0 pProgram) fs + fs -> mapM_ (runFile 2 pProgram) fs