X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=mTaskInterpret.dcl;h=0deb6652f642afca08fbda26c3635ff72a81ecd0;hb=93cabbcd5d18b7b45d6f43a6ff39f94cfcb95522;hp=0939ab45a7c1b15cf042ffdeb2a5e4faf4ce0a8c;hpb=73d6866bdbab8f393b53c9951b05b62005a5423a;p=mTask.git diff --git a/mTaskInterpret.dcl b/mTaskInterpret.dcl index 0939ab4..0deb665 100644 --- a/mTaskInterpret.dcl +++ b/mTaskInterpret.dcl @@ -2,11 +2,13 @@ definition module mTaskInterpret from Data.Functor.Identity import :: Identity from Control.Monad.State import :: State, :: StateT +from Data.Monoid import class Semigroup, class Monoid import mTask :: BC = BCNop - | BCPush Int + | BCLab Int + | BCPush [Char] | BCPop //SDS functions | BCSdsStore Int @@ -45,12 +47,16 @@ import mTask | BCDigitalWrite Pin | BCTest AnalogPin -//:: ByteCode a p = BC (BCState -> ([BC], BCState)) -:: ByteCode a p = BC [BC] -//:: ByteCode a p = BC ((ReadWrite (ByteCode a Expr)) BCState -> ([BC], BCState)) +:: ByteCode a p = BC (BCState -> ([BC], BCState)) +instance Semigroup (ByteCode a p) +instance Monoid (ByteCode a p) + :: BCState = { - a::() + freshl :: [Int], + freshs :: [Int], + sdss :: [(Int, [Char])] } +instance zero BCState class toByteCode a :: a -> [Char] instance toByteCode Int @@ -60,138 +66,26 @@ instance toByteCode String instance toByteCode Long instance toByteCode Button -toByteVal :: BC -> [Char] -toReadableByteVal :: BC -> String +instance toChar Pin +instance arith ByteCode +instance boolExpr ByteCode +instance analogIO ByteCode +instance digitalIO ByteCode +instance If ByteCode Stmt Stmt Stmt +instance If ByteCode Stmt e Stmt +instance If ByteCode Stmt Stmt e +instance If ByteCode x y Expr +instance IF ByteCode +instance noOp ByteCode + +instance sds ByteCode +instance assign ByteCode +instance seq ByteCode +instance serial ByteCode -//instance toCode Pin -//instance toCode MTask -//instance toCode () -//instance toCode Long -// -//class toCode a :: a -> String -//instance toCode Bool -//instance toCode Int -//instance toCode Real -//instance toCode Char -//instance toCode String -//instance toCode DigitalPin -//instance toCode AnalogPin -// -//argType :: (((Code a p)->Code b q)->In ((Code a p)->Code b q) (Code c s)) -> a | type a -// -//class argTypes t :: ((t->Code b Expr)->In (t->Code b2 q) (Main (Code c s))) -> t -//instance argTypes (Code a p) | showType a -//instance argTypes (Code a p, Code b q) | showType a & showType b -//instance argTypes (Code a p, Code b q, Code c r) | showType a & showType b & showType c -// -//instance toCode (SV t) -// -//instance arith Code -//instance boolExpr Code -//instance If Code Stmt Stmt Stmt -//instance If Code e Stmt Stmt -//instance If Code Stmt e Stmt -//instance If Code x y Expr -//instance IF Code -//instance sds Code -// -//defCode :: ((Code t p) -> In t (Main (Code u q))) -> Main (Code u r) | type t -// -//var :: String (ReadWrite (Code v q)) CODE -> CODE -// -//instance assign Code -//instance seq Code -//instance step` Code -//codeSteps :: [Step Code t] -> Code u p -//optBreak :: Mode -> Code u p -// -//instance setDelay Code -//instance mtask Code a | taskImp2 a & types a -//instance mtasks Code a b | taskImp2 a & types a & taskImp2 b & types b -// -//loopCode :: Int (Code a b) -> Code c d -// -//class taskImp2 a :: Int a -> ((Code Long p) a->Code MTask Expr, a) | /*long Code delay &*/ isExpr p -//instance taskImp2 () -//instance taskImp2 (Code t p) -//instance taskImp2 (Code a p, Code b q) -//instance taskImp2 (Code a p, Code b q, Code c r) -//instance taskImp2 (Code a p, Code b q, Code c r, Code d s) -// -//class taskImp a :: Int a -> (Int a->Code MTask Expr, a) -//instance taskImp () -//instance taskImp (Code t p) -//instance taskImp (Code a p, Code b q) -//instance taskImp (Code a p, Code b q, Code c r) -//instance taskImp (Code a p, Code b q, Code c r, Code d s) -// -//tasksMain :: Int Int ((a->Code MTask Expr,b->Code MTask Expr) -> In (a->Code c d,b->Code e f) (Main (Code g h))) -> Main (Code i j) | taskImp a & types a & taskImp b & types b -//class types a :: a -//instance types () -//instance types (Code a p) | typeSelector a & isExpr p -//instance types (Code a p, Code b q) | typeSelector a & isExpr p & typeSelector b & isExpr q -//instance types (Code a p, Code b q, Code c r) | typeSelector a & isExpr p & typeSelector b & isExpr q & typeSelector c & isExpr r -//instance types (Code a p, Code b q, Code c r, Code d s) | typeSelector a & isExpr p & typeSelector b & isExpr q & typeSelector c & isExpr r & typeSelector d & isExpr s -// -//codeMTaskBody :: (Code v w) (Code c d) -> Code e f -//instance fun Code () -//instance fun Code (Code t p) | type, showType t & isExpr p -//instance fun Code (Code a p, Code b q) | showType a & showType b -//instance fun Code (Code a p, Code b q, Code c r) | showType a & showType b & showType c -//instance output Code -//instance pinMode Code -//instance digitalIO Code -//instance dIO Code -//instance aIO Code -//instance analogIO Code -//instance noOp Code -// -//:: Code a p = C ((ReadWrite (Code a Expr)) CODE -> CODE) -//:: CODE = -// { fresh :: Int -// , freshMTask :: Int -// , funs :: [String] -// , ifuns :: Int -// , vars :: [String] -// , ivars :: Int -// , setup :: [String] -// , isetup :: Int -// , loop :: [String] -// , iloop :: Int -// , includes :: [String] -// , def :: Def -// , mode :: Mode -// , binds :: [String] -// } -// -//unC :: (Code a p) -> ((ReadWrite (Code a Expr)) CODE -> CODE) -// -//:: Def = Var | Fun | Setup | Loop -//:: Mode = /*MainMode |*/ NoReturn | Return String | SubExp | Assign String -// -//setMode :: Mode -> Code a p -//getMode :: (Mode -> Code a p) -> Code a p -//embed :: (Code a p) -> Code a p -//(+.+) infixl 5 :: (Code a p) (Code b q) -> Code c r -//fresh :: (Int -> (Code a p)) -> (Code a p) -//freshMTask :: (Int -> (Code a p)) -> (Code a p) -//setCode :: Def -> (Code a p) -//getCode :: (Def -> Code a p) -> (Code a p) -//brac :: (Code a p) -> Code b q -//funBody :: (Code a p) -> Code b q -//codeOp2 :: (Code a p) String (Code b q) -> Code c r -//include :: String -> Code a b -//argList :: [a] -> String | toCode a -//c :: a -> Code b p | toCode a -//indent :: Code a p -//unindent :: Code a p -//nl :: Code a p -//setBinds :: [String] -> Code a p -//addBinds :: String -> Code a p -//getBinds :: ([String] -> Code a p) -> (Code a p) -// -//// ----- driver ----- // -// -//compile :: (Main (Code a p)) -> [String] -//mkset :: [a] -> [a] | Eq a -//newCode :: CODE +getSDSBytes :: BCState -> String +getTaskBytes :: Int String -> String + +toByteVal :: BC -> [Char] +toReadableByteCode :: (ByteCode a b) -> (String, BCState) +toRealByteCode :: (ByteCode a b) -> (String, BCState)