Sockeye: Represent NodeId as name + namespace list in Prolog
authorDaniel Schwyn <schwyda@student.ethz.ch>
Mon, 17 Jul 2017 09:00:49 +0000 (11:00 +0200)
committerDaniel Schwyn <schwyda@student.ethz.ch>
Mon, 17 Jul 2017 09:00:49 +0000 (11:00 +0200)
Signed-off-by: Daniel Schwyn <schwyda@student.ethz.ch>

tools/sockeye/SockeyeASTDecodingNet.hs
tools/sockeye/SockeyeBackendProlog.hs
tools/sockeye/SockeyeNetBuilder.hs
usr/skb/programs/decodingNetSKB.pl

index 506666e..743eab7 100644 (file)
@@ -39,7 +39,7 @@ newtype Namespace = Namespace
     deriving (Eq, Ord)
 
 instance Show Namespace where
-    show (Namespace ns) = intercalate "." $ ns
+    show (Namespace ns) = intercalate "." $ reverse ns
 
 data NodeSpec
     = NodeSpec
index 2da46cf..7416b6b 100644 (file)
@@ -43,7 +43,15 @@ instance PrologGenerator AST.NetSpec where
                 in predicate "net" [atom, node] ++ "."
 
 instance PrologGenerator AST.NodeId where
-    generate ast = atom $ show ast
+    generate ast = let
+        name = AST.name ast
+        namespace = AST.namespace ast
+        in predicate "nodeId" [atom name, generate namespace]
+
+instance PrologGenerator AST.Namespace where
+    generate ast = let
+        ns = AST.ns ast
+        in list $ map atom ns
 
 instance PrologGenerator AST.NodeSpec where
     generate ast = let
@@ -84,10 +92,10 @@ instance PrologGenerator a => PrologGenerator [a] where
 {- Helper functions -}
 atom :: String -> String
 atom name@(c:cs)
-    | isLower c && alphaNum cs = name
+    | isLower c && allAlphaNum cs = name
     | otherwise = quotes name
     where
-        alphaNum cs = foldl (\acc c -> isAlphaNum c && acc) True cs
+        allAlphaNum cs = foldl (\acc c -> isAlphaNum c && acc) True cs
 
 predicate :: String -> [String] -> String
 predicate name args = name ++ (parens $ intercalate "," args)
index 8373809..c9c7586 100644 (file)
@@ -52,7 +52,7 @@ data FailedCheck
     | UndefinedReference !String
 
 instance Show FailedCheck where
-    show (ModuleInstLoop loop) = concat ["Module instantiation loop :'", intercalate "' -> '" loop, "'"]
+    show (ModuleInstLoop loop) = concat ["Module instantiation loop:'", intercalate "' -> '" loop, "'"]
     show (DuplicateInPort  modName port) = concat ["Multiple declarations of input port '", port, "' in '", modName, "'"]
     show (DuplicateInMap   ns      port) = concat ["Multiple mappings for input port '", port, "' in '", ns, "'"]
     show (UndefinedInPort  modName port) = concat ["'", port, "' is not an input port in '", modName, "'"]
@@ -136,20 +136,7 @@ instance NetTransformable AST.Module NetList where
         -- TODO check mappings to non existing port
         netDecls <- transform context nodeDecls
         netInsts <- transform context moduleInsts
-        return $ concat (inDecls:outDecls:netDecls ++ netInsts)
-        where
-            nameWithArgs =
-                let
-                    name = head $ modulePath context
-                    paramNames = AST.paramNames ast
-                    paramTypes = AST.paramTypeMap ast
-                    params = map (\p -> (p, paramTypes Map.! p)) paramNames
-                    argValues = map showValue params
-                in concat [name, "(", intercalate ", " argValues, ")"]
-                where
-                    showValue (name, AST.AddressParam) = "0x" ++ showHex (getParamValue context name) ""
-                    showValue (name, AST.NaturalParam) = show (getParamValue context name)
-            
+        return $ concat (inDecls:outDecls:netDecls ++ netInsts)            
 
 instance NetTransformable AST.Port NetList where
     transform context (AST.MultiPort for) = do
@@ -219,7 +206,7 @@ instance NetTransformable AST.ModuleInst NetList where
                         base = NetAST.ns $ NetAST.namespace namespace
                         newNs = case NetAST.name namespace of
                             "" -> NetAST.Namespace base
-                            n  -> NetAST.Namespace $ base ++ [n]
+                            n  -> NetAST.Namespace $ n:base
                     in context
                         { modulePath   = name:path
                         , curNamespace = newNs
index 93a7e04..c6a2f53 100644 (file)
 %%%%%%%%%%%%%%
 %% Printing %%
 %%%%%%%%%%%%%%
+printNodeid(nodeId(Name, Namespace)) :-
+    reverse([Name|Namespace], IdList),
+    join_string(IdList,".",String),
+    write(String).
+
 printRegion((Id,Addr,Size)) :-
     End is Addr + Size - 1,
-    printf("%a [0x%16R..0x%16R]",
-        [ Id,Addr,End ]
+    printNodeid(Id),
+    printf(" [0x%16R..0x%16R]",
+        [ Addr,End ]
     ).
 
 printSrcDestRegions((SrcRegion,DestRegion)) :-