packages feed

BASIC 0.1.0.0 → 0.1.1.0

raw patch · 6 files changed

+32/−8 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Language.BASIC: (<) :: Expr a -> Expr a -> Expr a
+ Language.BASIC: (<=) :: Expr a -> Expr a -> Expr a
+ Language.BASIC: (==) :: Expr a -> Expr a -> Expr a
+ Language.BASIC: (>) :: Expr a -> Expr a -> Expr a
+ Language.BASIC: (>=) :: Expr a -> Expr a -> Expr a
+ Language.BASIC: (^) :: Expr a -> Expr a -> Expr a
- Language.BASIC: RND :: () -> Expr a
+ Language.BASIC: RND :: (Expr a) -> Expr a

Files

BASIC.cabal view
@@ -1,5 +1,5 @@ Name:		BASIC-Version:	0.1.0.0+Version:	0.1.1.0 License:	BSD3 Author:		Lennart Augustsson Maintainer:	Lennart Augustsson
Language/BASIC/Interp.hs view
@@ -54,7 +54,13 @@              (Dbl d1, "-", Dbl d2)  -> return $ Dbl (d1 - d2)              (Dbl d1, "*", Dbl d2)  -> return $ Dbl (d1 * d2)              (Dbl d1, "/", Dbl d2)  -> return $ Dbl (d1 / d2)+             (Dbl d1, "^", Dbl d2)  -> return $ Dbl (d1 ** d2)              (Dbl d1, "<>", Dbl d2) -> return $ Dbl (if d1 /= d2 then 1 else 0)+             (Dbl d1, "==", Dbl d2) -> return $ Dbl (if d1 == d2 then 1 else 0)+             (Dbl d1, "<", Dbl d2) -> return $ Dbl (if d1 < d2 then 1 else 0)+             (Dbl d1, ">", Dbl d2) -> return $ Dbl (if d1 < d2 then 1 else 0)+             (Dbl d1, "<=", Dbl d2) -> return $ Dbl (if d1 <= d2 then 1 else 0)+             (Dbl d1, ">=", Dbl d2) -> return $ Dbl (if d1 >= d2 then 1 else 0) 	     x -> error $ "Expected numbers " ++ show x 	eval env (SGN e) = fmap (\ (Dbl x) -> Dbl $ signum x) $ eval env e 	eval env (INT e) = fmap (\ (Dbl x) -> Dbl $ fromIntegral $ truncate x) $ eval env e
Language/BASIC/Parser.hs view
@@ -3,8 +3,10 @@ module Language.BASIC.Parser(     getBASIC, BASIC,     PRINT(..), END(..), LET(..), GOTO(..), IF(..), THEN(..), INPUT(..), FOR(..), TO(..), NEXT(..),-    Expr((:=)), (<>)+    Expr((:=)), (<>), (==), (<), (>), (<=), (>=), (^)     ) where+import Prelude hiding ((==),(<),(>),(<=),(>=),(^))+import qualified Prelude as P import Data.List import Data.Maybe import Data.Function@@ -44,10 +46,24 @@ isCmd (Cmd _ _ _) = True isCmd _ = False -infix 4 <>+infix 4 <>, ==, <, >, <=, >= (<>) :: Expr a -> Expr a -> Expr a (<>) = binop "<>"+(==) :: Expr a -> Expr a -> Expr a+(==) = binop "=="+(<) :: Expr a -> Expr a -> Expr a+(<) = binop "<"+(>) :: Expr a -> Expr a -> Expr a+(>) = binop ">"+(<=) :: Expr a -> Expr a -> Expr a+(<=) = binop "<-"+(>=) :: Expr a -> Expr a -> Expr a+(>=) = binop ">=" +infixr 8 ^+(^) :: Expr a -> Expr a -> Expr a+(^) = binop "^"+ binop :: String -> Expr a -> Expr a -> Expr a binop op (Cmd l c [x]) y = Cmd l c (binops x op y) binop op x (Binop y ";" z) = Binop (Binop x op y) ";" z@@ -65,7 +81,7 @@ flex (Label l) = Label l flex (Binop e1 op e2) = Binop (flex e1) op (flex e2) flex (e1 := e2) = flex e1 := flex e2-flex (RND x) = RND x+flex (RND x) = RND (flex x) flex (INT x) = INT (flex x) flex (SGN x) = SGN (flex x) flex Var = Var@@ -137,7 +153,7 @@ instance Eq (END -> Expr a) instance Show (END -> Expr a) instance Num (END -> Expr a) where-    fromInteger i c = Cmd i (if c == RETURN then Return else if c == REM then Rem else End) []+    fromInteger i c = Cmd i (if c P.== RETURN then Return else if c P.== REM then Rem else End) []  instance Eq (LET -> Expr a -> Expr b) instance Show (LET -> Expr a -> Expr b)@@ -147,7 +163,7 @@ instance Eq (GOTO -> t -> Expr a) instance Show (GOTO -> t -> Expr a) instance (Integral t) => Num (GOTO -> t -> Expr a) where-    fromInteger i c l = Cmd i (if c == GOSUB then Gosub else Goto) [Label $ toInteger l]+    fromInteger i c l = Cmd i (if c P.== GOSUB then Gosub else Goto) [Label $ toInteger l]  instance Eq (IF -> Expr a -> Expr b) instance Show (IF -> Expr a -> Expr b)
Language/BASIC/Translate.hs view
@@ -49,6 +49,7 @@ trans acmds = do     atof     <- newNamedFunction ExternalLinkage "atof"     :: TFunction (Ptr Word8 -> IO Double)     gets     <- newNamedFunction ExternalLinkage "gets"     :: TFunction (Ptr Word8 -> IO (Ptr Word8))+    power    <- newNamedFunction ExternalLinkage "power"    :: TFunction (Double -> Double -> IO Double)     printfv  <- newNamedFunction ExternalLinkage "printf"   :: TFunction (Ptr Word8 -> VarArgs Word32)     rand     <- newNamedFunction ExternalLinkage "rand"     :: TFunction (IO Word32)     sranddev <- newNamedFunction ExternalLinkage "sranddev" :: TFunction (IO ())@@ -126,6 +127,7 @@ 	    genExpr (Binop e1 "-" e2) = binop sub e1 e2 	    genExpr (Binop e1 "*" e2) = binop mul e1 e2 	    genExpr (Binop e1 "/" e2) = binop fdiv e1 e2+	    genExpr (Binop e1 "^" e2) = binop (call power) e1 e2 	    genExpr (INT e) = do 	        v <- genExpr e --		r <- frem v (1 :: Double)
Language/BASIC/Types.hs view
@@ -10,7 +10,7 @@     | Label Integer     | Binop (Expr a) String (Expr a)     | Expr a := Expr a-    | RND () | INT (Expr a) | SGN (Expr a)+    | RND (Expr a) | INT (Expr a) | SGN (Expr a)     | Var     | I | S | X | Y | Z     | None
examples/HiLo.hs view
@@ -9,7 +9,7 @@     20 PRINT "* Welcome to HiLo *"     30 GOSUB 1000 -    100 LET I := INT(100 * RND())+    100 LET I := INT(100 * RND(X)) --    110 PRINT I     200 PRINT "Guess my number:"     210 INPUT X