summaryrefslogtreecommitdiff
path: root/devel/compiler/Compile.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/Compile.hs
parent273dc7120f9ce0b469dc081d6a3382f096a4f97b (diff)
top-level toy compiler - far from complete
Diffstat (limited to 'devel/compiler/Compile.hs')
-rw-r--r--devel/compiler/Compile.hs35
1 files changed, 35 insertions, 0 deletions
diff --git a/devel/compiler/Compile.hs b/devel/compiler/Compile.hs
new file mode 100644
index 000000000..7ebb65f0e
--- /dev/null
+++ b/devel/compiler/Compile.hs
@@ -0,0 +1,35 @@
+module Compile where
+
+import AbsSrc
+import AbsTgt
+import SMacros
+import TMacros
+
+import Eval
+import Param
+
+import STM
+import Env
+
+import qualified Data.Map as M
+
+compile :: Grammar -> Env
+compile (Gr defs) = err error snd $ appSTM (mapM_ compDef defs) emptyEnv
+
+compDef :: Def -> STM Env ()
+compDef d = case d of
+ DLin f ty exp -> do
+ val <- eval exp
+ addType f ty
+ addVal f val
+ DOper f ty exp -> do
+ addType f ty
+ addOper f exp
+ DPar p cs -> do
+ v <- sizeParType cs
+ addTypedef p $ TVal $ toInteger $ fst v
+ vals <- allParVals cs
+ addPartype (TBas p) vals
+ mapM_ (uncurry addParVal) (zip vals (map VPar [0..]))
+ DOpty a ty -> do
+ addTypedef a ty