diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-03-27 16:32:44 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-03-27 16:32:44 +0000 |
| commit | 1c1acf1b971d13a496a92b9d8d6b14fde85e28f3 (patch) | |
| tree | 7fc40594193cbf6435feb5425ee2e4feb2652d32 /devel/compiler/Compile.hs | |
| parent | 273dc7120f9ce0b469dc081d6a3382f096a4f97b (diff) | |
top-level toy compiler - far from complete
Diffstat (limited to 'devel/compiler/Compile.hs')
| -rw-r--r-- | devel/compiler/Compile.hs | 35 |
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 |
