summaryrefslogtreecommitdiff
path: root/devel/compiler/Top.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-03-27 16:32:44 +0000
committeraarne <aarne@cs.chalmers.se>2007-03-27 16:32:44 +0000
commit1c1acf1b971d13a496a92b9d8d6b14fde85e28f3 (patch)
tree7fc40594193cbf6435feb5425ee2e4feb2652d32 /devel/compiler/Top.hs
parent273dc7120f9ce0b469dc081d6a3382f096a4f97b (diff)
top-level toy compiler - far from complete
Diffstat (limited to 'devel/compiler/Top.hs')
-rw-r--r--devel/compiler/Top.hs34
1 files changed, 34 insertions, 0 deletions
diff --git a/devel/compiler/Top.hs b/devel/compiler/Top.hs
new file mode 100644
index 000000000..64a8a6f70
--- /dev/null
+++ b/devel/compiler/Top.hs
@@ -0,0 +1,34 @@
+module Main where
+
+import IO ( stdin, hGetContents )
+import System ( getArgs, getProgName )
+
+import LexSrc
+import ParSrc
+import SkelSrc
+import PrintSrc
+import AbsSrc
+
+import Compile
+import PrEnv
+
+import ErrM
+
+type ParseFun a = [Token] -> Err a
+
+myLLexer = myLexer
+
+runFile :: ParseFun Grammar -> FilePath -> IO ()
+runFile p f = readFile f >>= run p
+
+run :: ParseFun Grammar -> String -> IO ()
+run p s = let ts = myLLexer s in case p ts of
+ Bad s -> do putStrLn "Parse Failed...\n"
+ putStrLn s
+ Ok tree -> prEnv $ compile tree
+
+main :: IO ()
+main = do args <- getArgs
+ case args of
+ fs -> mapM_ (runFile pGrammar) fs
+