From 1c1acf1b971d13a496a92b9d8d6b14fde85e28f3 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 27 Mar 2007 16:32:44 +0000 Subject: top-level toy compiler - far from complete --- devel/compiler/Compile.hs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 devel/compiler/Compile.hs (limited to 'devel/compiler/Compile.hs') 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 -- cgit v1.2.3