]> hydra-www.ietfng.org Git - dyna2/commitdiff
Just changing the parser is never enough
authorNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Fri, 28 Jun 2013 20:29:21 +0000 (16:29 -0400)
committerNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Fri, 28 Jun 2013 20:31:10 +0000 (16:31 -0400)
Put nil/0 and cons/2 into disposition tables and the backends as constants.

src/Dyna/Backend/NoBackend.hs
src/Dyna/Backend/Python/Backend.hs
src/Dyna/Term/SurfaceSyntax.hs

index a3ce115ef0f9eaabe211538f1d373de897039e91..1f8de6fbd614a82bacbe9f2756569f782faf0e0c 100644 (file)
@@ -91,6 +91,9 @@ primOps = go
   go ("!"    ,1) = Just   [miaod 1 Det     ]
   go ("not"  ,1) = Just   [miaod 1 Det     ]
 
+  go ("nil"  ,0) = Just   []
+  go ("cons" ,2) = Just   []
+
   go _           = Nothing
 
 primPossible :: (DFunct,[ModedVar],ModedVar) -> Either Bool (BackendAction ())
index 0b297b5db16076a106bb60a8cf5c414e392aca01..160d3e7546d1b48f4b721b7c8757d54b7385722f 100644 (file)
@@ -130,7 +130,7 @@ mpv = map (pretty . (^.mv_var))
 constants :: DFunctAr -> Maybe PyDopeBS
 constants = go
  where
-  go ("-",1)     = Just $ PDBS $ call "-"
+  go ("-",1)     = Just $ PDBS $ call "-" []
   go ("^",2)     = Just $ PDBS $ infixOp "^"
   go ("|",2)     = Just $ PDBS $ infixOp "|"
   go ("-",2)     = Just $ PDBS $ infixOp "-"
@@ -142,17 +142,17 @@ constants = go
   go ("+",2)     = Just $ PDBS $ infixOp "+"
 
   go ("mod",2)   = Just $ PDBS $ infixOp "%"
-  go ("abs",1)   = Just $ PDBS $ call "abs"
-  go ("log",1)   = Just $ PDBS $ call "log"
-  go ("exp",1)   = Just $ PDBS $ call "exp"
+  go ("abs",1)   = Just $ PDBS $ call "abs" []
+  go ("log",1)   = Just $ PDBS $ call "log" []
+  go ("exp",1)   = Just $ PDBS $ call "exp" []
 
 
 
-  go ("pycall", _) = Just $ PDBS $ call "pycall"
-  go ("getattr", 2) = Just $ PDBS $ call "getattr"
+  go ("pycall", _) = Just $ PDBS $ call "pycall" []
+  go ("getattr", 2) = Just $ PDBS $ call "getattr" []
 
 
-  go ("uniform", _) = Just $ PDBS $ call "uniform"
+  go ("uniform", _) = Just $ PDBS $ call "uniform" []
 
   go ("<=",2)    = Just $ PDBS $ infixOp "<="
   go ("<",2)     = Just $ PDBS $ infixOp "<"
@@ -169,15 +169,19 @@ constants = go
   go ("false",0) = Just $ PDBS $ nullary "False"
   go ("null",0)  = Just $ PDBS $ nullary "None"
 
-  go ("!",1)     = Just $ PDBS $ call "not"
-  go ("not",1)   = Just $ PDBS $ call "not"
+  go ("!",1)     = Just $ PDBS $ call "not" []
+  go ("not",1)   = Just $ PDBS $ call "not" []
+
+  go ("eval",1)  = Just $ PDBS $ call "None;exec " []
+  go ("tuple",_) = Just $ PDBS $ call "" []
+
+  go ("nil",0)   = Just $ PDBS $ call "build" ["nil/0"]
+  go ("cons",2)  = Just $ PDBS $ call "build" ["cons/2"]
 
-  go ("eval",1)  = Just $ PDBS $ call "None;exec "
-  go ("tuple",_) = Just $ PDBS $ call ""
   go _           = Nothing
 
-  nullary v  _ _   = v
-  call    fn _ vis = fn <> (parens $ sepBy "," $ mpv vis)
+  nullary v     _ _   = v
+  call    fn as _ vis = fn <> (parens $ sepBy "," $ as ++ mpv vis)
 
 ------------------------------------------------------------------------}}}
 -- DOpAMine Printout                                                    {{{
index a0c45d2133624e9c217478a92a2e4b565dd7ccac..823370ff9276fa391604f7826fcf5e69f5ae2e44 100644 (file)
@@ -147,6 +147,9 @@ disposTab_prologish t = DisposTab s a
        , (("pair" ,2),(SDQuote,[ADEval,ADEval]))
        , (("true" ,0),(SDQuote,[]))
        , (("false",0),(SDQuote,[]))
+       -- lists
+       , (("nil",  0),(SDQuote,[]))
+       , (("cons", 2),(SDQuote,[ADEval,ADEval]))
        ]
 
 -- | Make the default surface syntax more functional.  Here, all functors
@@ -168,8 +171,12 @@ disposTab_dyna t = DisposTab s a
   dt = M.fromList [
          (("="    ,2),(SDEval ,[ADQuote,ADQuote]))
        , (("pair" ,2),(SDQuote,[ADEval ,ADEval ]))
+       -- booleans
        , (("true" ,0),(SDQuote,[]))
        , (("false",0),(SDQuote,[]))
+       -- lists
+       , (("nil",  0),(SDQuote,[]))
+       , (("cons", 2),(SDQuote,[ADEval,ADEval]))
        ]
 
 ------------------------------------------------------------------------}}}