X-Git-Url: https://ruin.nu/git/?p=proglang.git;a=blobdiff_plain;f=Testsyntax.hs;h=c5c57c5d975e21feabe8def16433630fe1d11c5a;hp=fb6986c317591f0b732b6cb8283c8b132cb768e9;hb=HEAD;hpb=e9be0603d9dbd1caa6a0032cad0e39815cb8f38d diff --git a/Testsyntax.hs b/Testsyntax.hs index fb6986c..c5c57c5 100644 --- a/Testsyntax.hs +++ b/Testsyntax.hs @@ -11,10 +11,6 @@ import Skelsyntax import Printsyntax import Abssyntax -import Typecheck -import Control.Monad.State -import Data.Map as Map hiding (showTree) - @@ -29,21 +25,19 @@ type Verbosity = Int putStrV :: Verbosity -> String -> IO () putStrV v s = if v > 1 then putStrLn s else return () -runFile :: Verbosity -> ParseFun Stms -> FilePath -> IO () +runFile :: (Print a, Show a) => Verbosity -> ParseFun a -> FilePath -> IO () runFile v p f = putStrLn f >> readFile f >>= run v p -run :: Verbosity -> ParseFun Stms -> String -> IO () +run :: (Print a, Show a) => Verbosity -> ParseFun a -> 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 - putStrLn "\nParse Successful!" - showTree v (Program s) - runStateT (mapM typeCheckStm s) empty - return () + Bad s -> do putStrLn "\nParse Failed...\n" + putStrV v "Tokens:" + putStrV v $ show ts + putStrLn s + Ok tree -> do putStrLn "\nParse Successful!" + showTree v tree + + showTree :: (Show a, Print a) => Int -> a -> IO () showTree v tree @@ -54,9 +48,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