Sockeye: Only one list for port mappings
authorDaniel Schwyn <schwyda@student.ethz.ch>
Fri, 30 Jun 2017 18:39:26 +0000 (20:39 +0200)
committerDaniel Schwyn <schwyda@student.ethz.ch>
Fri, 30 Jun 2017 18:45:46 +0000 (20:45 +0200)
Signed-off-by: Daniel Schwyn <schwyda@student.ethz.ch>

tools/sockeye/SockeyeASTFrontend.hs
tools/sockeye/SockeyeParser.hs

index ffc419e..f41e935 100644 (file)
@@ -49,11 +49,10 @@ data NetSpec
 
 data ModuleInst
     = ModuleInst
-        { moduleName     :: String
-        , nameSpace      :: Identifier
-        , arguments      :: [ModuleArg]
-        , inputMappings  :: [ModulePortMap]
-        , outputMappings :: [ModulePortMap]
+        { moduleName   :: String
+        , nameSpace    :: Identifier
+        , arguments    :: [ModuleArg]
+        , portMappings :: [ModulePortMap]
         } deriving (Show)
 
 data ModuleArg
@@ -63,7 +62,11 @@ data ModuleArg
     deriving (Show)
 
 data ModulePortMap
-    = ModulePortMap
+    = InputPortMap
+        { port   :: Identifier
+        , nodeId :: Identifier
+        }
+    | OutputPortMap
         { port   :: Identifier
         , nodeId :: Identifier
         } deriving (Show)
index f8b1f36..47d9d2f 100644 (file)
@@ -132,27 +132,25 @@ moduleInst = do
         return (name, args)
     nameSpace <- nonIndexedIdentifier
     symbol "with"
-    inputMappings <- many inputMapping
-    outputMappings <- many outputMapping
+    portMappings <- many $ choice [inputMapping, outputMapping]
     return AST.ModuleInst
         { AST.moduleName = name
         , AST.nameSpace  = nameSpace
         , AST.arguments  = args 
-        , AST.inputMappings = inputMappings
-        , AST.outputMappings = outputMappings
+        , AST.portMappings = portMappings
         }
     where
         inputMapping = do
             nodeId <- try $ identifier <* symbol ">"
             port <- identifier
-            return AST.ModulePortMap
+            return AST.InputPortMap
                 { AST.port   = port
                 , AST.nodeId = nodeId
                 }
         outputMapping = do
             nodeId <- try $ identifier <* symbol "<"
             port <- identifier
-            return AST.ModulePortMap
+            return AST.OutputPortMap
                 { AST.port   = port
                 , AST.nodeId = nodeId
                 }