From: Nathaniel Wesley Filardo Date: Fri, 28 Jun 2013 20:29:21 +0000 (-0400) Subject: Just changing the parser is never enough X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=9c676edb6cd052d3f9e470db7c3f92a01d28554a;p=dyna2 Just changing the parser is never enough Put nil/0 and cons/2 into disposition tables and the backends as constants. --- diff --git a/src/Dyna/Backend/NoBackend.hs b/src/Dyna/Backend/NoBackend.hs index a3ce115..1f8de6f 100644 --- a/src/Dyna/Backend/NoBackend.hs +++ b/src/Dyna/Backend/NoBackend.hs @@ -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 ()) diff --git a/src/Dyna/Backend/Python/Backend.hs b/src/Dyna/Backend/Python/Backend.hs index 0b297b5..160d3e7 100644 --- a/src/Dyna/Backend/Python/Backend.hs +++ b/src/Dyna/Backend/Python/Backend.hs @@ -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 {{{ diff --git a/src/Dyna/Term/SurfaceSyntax.hs b/src/Dyna/Term/SurfaceSyntax.hs index a0c45d2..823370f 100644 --- a/src/Dyna/Term/SurfaceSyntax.hs +++ b/src/Dyna/Term/SurfaceSyntax.hs @@ -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])) ] ------------------------------------------------------------------------}}}