Sockeye: Clean up ASTs
authorDaniel Schwyn <schwyda@student.ethz.ch>
Mon, 31 Jul 2017 14:11:47 +0000 (16:11 +0200)
committerDaniel Schwyn <schwyda@student.ethz.ch>
Mon, 31 Jul 2017 14:11:47 +0000 (16:11 +0200)
Signed-off-by: Daniel Schwyn <schwyda@student.ethz.ch>

tools/sockeye/SockeyeASTInstantiator.hs
tools/sockeye/SockeyeASTParser.hs
tools/sockeye/SockeyeInstantiator.hs
tools/sockeye/SockeyeNetBuilder.hs
tools/sockeye/SockeyeParser.hs

index 5732531..4597e8a 100644 (file)
@@ -29,7 +29,7 @@ import SockeyeASTDecodingNet
 
 data SockeyeSpec = SockeyeSpec
     { root :: ModuleInst
-    , modules :: Map String Module
+    , modules :: Map Identifier Module
     } deriving (Show)
 
 data Module = Module
@@ -51,8 +51,8 @@ data Port
 
 data ModuleInst
     = ModuleInst
-        { moduleName :: Identifier
-        , namespace  :: Identifier
+        { namespace  :: Identifier
+        , moduleName :: Identifier
         , inPortMap  :: PortMap
         , outPortMap :: PortMap
         } deriving (Show)
index 0a214b8..8e11910 100644 (file)
@@ -42,7 +42,6 @@ data SockeyeSpec = SockeyeSpec
     , net     :: [NetSpec]
     } deriving (Show)
 
-
 data Import = Import 
     { filePath :: !FilePath }
     deriving (Show)
@@ -59,25 +58,25 @@ data ModuleParam = ModuleParam
     } deriving (Show)
 
 data ModuleBody = ModuleBody
-    { ports     :: [PortDef]
+    { ports     :: [Port]
     , moduleNet :: [NetSpec]
     } deriving (Show)
 
-data PortDef
-    = InputPortDef
+data NetSpec
+    = NodeDeclSpec NodeDecl
+    | ModuleInstSpec ModuleInst
+    deriving (Show)
+
+data Port
+    = InputPort 
         { portId    :: Identifier
         , portWidth :: !Integer
         }
-    | OutputPortDef
+    | OutputPort
         { portId    :: Identifier
         , portWidth :: !Integer
         }
-    | MultiPortDef (For PortDef)
-    deriving (Show)
-
-data NetSpec
-    = NodeDeclSpec NodeDecl
-    | ModuleInstSpec ModuleInst
+    | MultiPort (For Port)
     deriving (Show)
 
 data ModuleInst
index 5e6e1a6..f9cd72c 100644 (file)
@@ -66,7 +66,7 @@ instance Show InstFails where
 type PortMapping = (InstAST.Identifier, InstAST.Identifier)
 
 data Context = Context
-    { spec        :: CheckAST.SockeyeSpec
+    { modules     :: Map String CheckAST.Module
     , modulePath  :: [String]
     , paramValues :: Map String Integer
     , varValues   :: Map String Integer
@@ -74,9 +74,9 @@ data Context = Context
 
 instantiateSockeye :: CheckAST.SockeyeSpec -> Either (FailedChecks InstFails) InstAST.SockeyeSpec
 instantiateSockeye ast = do
-    let emptySpec = CheckAST.SockeyeSpec Map.empty
+    let emptySpec = CheckAST.SockeyeSpec 
         context = Context
-            { spec        = emptySpec
+            { modules     = Map.empty
             , modulePath  = []
             , paramValues = Map.empty
             , varValues   = Map.empty
@@ -91,16 +91,11 @@ class Instantiatable a b where
 
 instance Instantiatable CheckAST.SockeyeSpec InstAST.SockeyeSpec where
     instantiate context ast = do
-        let rootInst = CheckAST.ModuleInst
-                { CheckAST.namespace  = CheckAST.SimpleIdent ""
-                , CheckAST.moduleName = "@root"
-                , CheckAST.arguments  = Map.empty
-                , CheckAST.inPortMap  = []
-                , CheckAST.outPortMap = []
-                }
+        let root = CheckAST.root ast
+            mods  = CheckAST.modules ast
             specContext = context
-                { spec = ast }
-        [instRoot] <- instantiate specContext rootInst
+                { modules = mods }
+        [instRoot] <- instantiate specContext root
         modules <- get
         return InstAST.SockeyeSpec
             { InstAST.root = instRoot
@@ -109,8 +104,7 @@ instance Instantiatable CheckAST.SockeyeSpec InstAST.SockeyeSpec where
 
 instance Instantiatable CheckAST.Module InstAST.Module where
     instantiate context ast = do
-        let inPorts = CheckAST.inputPorts ast
-            outPorts = CheckAST.outputPorts ast
+        let ports = CheckAST.ports ast
             nodeDecls = CheckAST.nodeDecls ast
             moduleInsts = CheckAST.moduleInsts ast
             modName = head $ modulePath context
@@ -126,7 +120,7 @@ instance Instantiatable CheckAST.Module InstAST.Module where
                         }
                 modify $ Map.insert modName sentinel
                 instPorts <- do
-                    instPorts <- instantiate context (inPorts ++ outPorts)
+                    instPorts <- instantiate context ports
                     return $ concat (instPorts :: [[InstAST.Port]])
                 instDecls <- do
                     decls <- instantiate context nodeDecls
@@ -386,9 +380,7 @@ instance (Traversable t, Instantiatable a b) => Instantiatable (t a) (t b) where
 
 
 getModule :: Context -> String -> CheckAST.Module
-getModule context name =
-    let modules = CheckAST.modules $ spec context
-    in modules Map.! name
+getModule context name = (modules context) Map.! name
 
 getParamValue :: Context -> String -> Integer
 getParamValue context name =
index 22685d6..84f5f29 100644 (file)
@@ -50,7 +50,7 @@ instance Show NetBuildFails where
 type PortMap = Map InstAST.Identifier NetAST.NodeId
 
 data Context = Context
-    { modules      :: Map String InstAST.Module
+    { modules      :: Map InstAST.Identifier InstAST.Module
     , curNamespace :: [String]
     , inPortMap    :: PortMap
     , outPortMap   :: PortMap
index fd190f6..6a3488e 100644 (file)
@@ -76,14 +76,14 @@ moduleParam = do
             return AST.AddressParam
 
 moduleBody = do
-    ports <- many portDefs
+    ports <- many ports
     net <- many netSpecs
     return AST.ModuleBody
         { AST.ports     = concat ports
         , AST.moduleNet = concat net
         }
 
-portDefs = choice [inputPorts, outputPorts]
+ports = choice [inputPorts, outputPorts]
     where
         inputPorts = do
             reserved "input"
@@ -92,11 +92,10 @@ portDefs = choice [inputPorts, outputPorts]
             (forFn, portId) <- identifierFor
             symbol "/"
             portWidth <- decimal <?> "number of bits"
-            let
-                portDef = AST.InputPortDef portId portWidth
+            let port = AST.InputPort portId portWidth
             case forFn of
-                Nothing -> return portDef
-                Just f  -> return $ AST.MultiPortDef (f portDef)
+                Nothing -> return port
+                Just f  -> return $ AST.MultiPort (f port)
         outputPorts = do
             reserved "output"
             commaSep1 outDef
@@ -104,11 +103,10 @@ portDefs = choice [inputPorts, outputPorts]
             (forFn, portId) <- identifierFor
             symbol "/"
             portWidth <- decimal <?> "number of bits"
-            let
-                portDef = AST.OutputPortDef portId portWidth
+            let port = AST.OutputPort portId portWidth
             case forFn of
-                Nothing -> return portDef
-                Just f  -> return $ AST.MultiPortDef (f portDef)
+                Nothing -> return port
+                Just f  -> return $ AST.MultiPort (f port)
 
 netSpecs = choice [ inst <?> "module instantiation"
                  , decl <?> "node declaration"