Add types to node
authorDaniel Schwyn <schwyda@student.ethz.ch>
Fri, 2 Jun 2017 09:24:13 +0000 (11:24 +0200)
committerDaniel Schwyn <schwyda@student.ethz.ch>
Tue, 13 Jun 2017 12:22:45 +0000 (14:22 +0200)
Signed-off-by: Daniel Schwyn <schwyda@student.ethz.ch>

tools/sockeye/SockeyeAST.hs
tools/sockeye/SockeyeBackendProlog.hs
tools/sockeye/SockeyeParser.hs
usr/skb/programs/decodingNet.pl

index 1ff1ba7..d6018ac 100644 (file)
@@ -46,10 +46,18 @@ data MapSpec = MapSpec { srcBlock :: BlockSpec
                        }
 
 {-
+Node can either be memory, device or other
+-}
+data NodeType = Memory
+              | Device
+              | Other
+
+{-
 A node is specified as a list of blocks it accepts,
 a list of mappings and possibly an overlay on another block
 -}
-data NodeSpec = NodeSpec { accept    :: [BlockSpec]
+data NodeSpec = NodeSpec { nodeType  :: NodeType
+                         , accept    :: [BlockSpec]
                          , translate :: [MapSpec]
                          , overlay   :: Maybe NodeId
                          }
@@ -76,13 +84,19 @@ instance Show MapSpec where
                        baseStr = show $ destBase mapSpec
                    in srcStr ++ " to " ++ nodeStr ++ " at " ++ baseStr
 
+instance Show NodeType where
+  show Memory = "memory"
+  show Device = "device"
+  show Other  = "other"
+
 instance Show NodeSpec where
-    show nodeSpec = let acceptStr    = "accept [" ++ intercalate ", " (map show (accept nodeSpec)) ++ "]"
+    show nodeSpec = let typeStr      = show $ nodeType nodeSpec
+                        acceptStr    = "accept [" ++ intercalate ", " (map show (accept nodeSpec)) ++ "]"
                         translateStr = "map [" ++ intercalate ", " (map show (translate nodeSpec)) ++ "]"
                         overlayStr   = case overlay nodeSpec of
                                         Nothing     -> ""
                                         Just nodeId -> "over " ++ show nodeId
-                    in acceptStr ++ " " ++ translateStr ++ " " ++ overlayStr
+                    in intercalate " " [typeStr, acceptStr, translateStr, overlayStr]
 
 instance Show NetSpec where
     show (NetSpec netSpec) = unlines $ map nodeStr netSpec
index 5996bca..109220d 100644 (file)
@@ -38,8 +38,9 @@ instance PrologGenerator AST.NodeId where
     generate (AST.NodeId id) = map toLower id
 
 instance PrologGenerator AST.NodeSpec where
-    generate nodeSpec = predicate "node" [accept, translate, overlay]
-        where accept = list $ map generate (AST.accept nodeSpec)
+    generate nodeSpec = predicate "node" [nodeType, accept, translate, overlay]
+        where nodeType = generate (AST.nodeType nodeSpec)
+              accept = list $ map generate (AST.accept nodeSpec)
               translate = list $ map generate (AST.translate nodeSpec)
               overlay = case AST.overlay nodeSpec of
                 Nothing -> "'@none'"
@@ -56,6 +57,9 @@ instance PrologGenerator AST.MapSpec where
                            base = generate $ AST.destBase mapSpec
                        in predicate "map" [src, dest, base]
 
+instance PrologGenerator AST.NodeType where
+    generate = show 
+
 instance PrologGenerator AST.Addr where
     generate (AST.Addr addr) = show addr
 
index d7ab1e9..e49939c 100644 (file)
@@ -55,7 +55,7 @@ stringLiteral = P.stringLiteral lexer
 commaSep      = P.commaSep lexer
 commaSep1     = P.commaSep1 lexer
 identifier    = P.identifier lexer
-natural       = (P.natural lexer)
+natural       = P.natural lexer
 decimal       = P.decimal lexer
 
 {- Sockeye parsing -}
@@ -79,6 +79,7 @@ netSpec = do
             return nodeIds
 
 nodeSpec = do
+    nt <- nodeType
     a <- optionMaybe parseAccept 
     t <- optionMaybe parseTranlsate 
     overlay <- optionMaybe parseOverlay
@@ -86,7 +87,7 @@ nodeSpec = do
                            Just blocks -> blocks
         translate = case t of Nothing -> []
                               Just maps -> concat maps
-    return $ AST.NodeSpec accept translate overlay
+    return $ AST.NodeSpec nt accept translate overlay
     where parseAccept = do
             reserved "accept"
             brackets $ many blockSpec
@@ -97,6 +98,15 @@ nodeSpec = do
             reserved "over"
             nodeId
 
+nodeType = try (choice [memory, device]) <|> return AST.Other
+    where memory = do
+            symbol "memory"
+            return AST.Memory
+          device = do
+            symbol "device"
+            return AST.Device
+
+
 mapSpec = do
     srcBlock <- blockSpec
     reserved "to"
index 835a920..88ba87b 100644 (file)
@@ -52,10 +52,10 @@ listMapsToName([M|Maps],Addr,Name) :-
     mapsToName(M,Addr,Name);
     listMapsToName(Maps,Addr,Name).    
 
-translateMap(node(_,Translate,_),Addr,Name) :-
+translateMap(node(_,_,Translate,_),Addr,Name) :-
     listMapsToName(Translate,Addr,Name).
 
-translateOverlay(node(Accept,Translate,Overlay),Addr,Name) :-
+translateOverlay(node(_,Accept,Translate,Overlay),Addr,Name) :-
     not(Overlay = '@none'),
     blockListRanges(Accept,ARanges),
     neg(Addr :: ARanges),
@@ -67,7 +67,7 @@ translate(Node,Addr,Name) :-
     translateMap(Node,Addr,Name);
     translateOverlay(Node,Addr,Name).
 
-accept(node(Accept,_,_),Addr) :-
+accept(node(_,Accept,_,_),Addr) :-
     blockListRanges(Accept,Ranges),
     Addr :: Ranges.
 
@@ -91,17 +91,6 @@ resolve(SrcName,DestName) :-
     ),
     acceptedName(DestName).
 
-findTargets(SrcName,DestName) :-
-    resolve(SrcName,DestName),
-    name(_,Addr) = DestName,
-    labeling([Addr]).
-    
-
-findOrigins(SrcName,DestName) :-
-    resolve(SrcName,DestName),
-    name(_,Addr) = SrcName,
-    labeling([Addr]).
-
 findRanges(SrcName,DestName,SrcRange,DestRange) :-
     resolve(SrcName,DestName),
     name(SrcId,SrcAddr) = SrcName,