summaryrefslogtreecommitdiff
path: root/assignment-13/uFPL/Sim.dcl
diff options
context:
space:
mode:
authorCamil Staps2018-01-03 12:13:44 +0100
committerCamil Staps2018-01-06 15:03:02 +0100
commit32a3b5aa0f5b6343928c9e42e66cce9db7e14e90 (patch)
tree73117add4b929b179a1ad340b5911e22c3138a25 /assignment-13/uFPL/Sim.dcl
parentRename & restructure (diff)
Start iTasks Simulator
Diffstat (limited to 'assignment-13/uFPL/Sim.dcl')
-rw-r--r--assignment-13/uFPL/Sim.dcl78
1 files changed, 78 insertions, 0 deletions
diff --git a/assignment-13/uFPL/Sim.dcl b/assignment-13/uFPL/Sim.dcl
new file mode 100644
index 0000000..6ee6e14
--- /dev/null
+++ b/assignment-13/uFPL/Sim.dcl
@@ -0,0 +1,78 @@
+definition module uFPL.Sim
+
+import iTasks
+
+import uFPL
+from uFPL.C import :: Signedness
+
+:: UFPLException
+ = LiftException String
+ | NoShareException ISharedRef
+ | WriteToROShare ISharedRef
+
+instance toString UFPLException
+
+class lift a :: a -> Task Dynamic
+class unlift a b :: b -> a
+
+:: ReadOrWrite = ReadOnly | ReadWrite
+
+:: ISharedInt =
+ { iisname :: String
+ , iisinit :: Int
+ , iisrw :: ReadOrWrite
+ }
+
+:: ISharedRef :== String
+
+:: IShares =
+ { ishares :: [ISharedInt]
+ }
+
+:: IExpr
+ = ILitInt Int
+ | ILitBool Bool
+ | ILitChar Char
+ | IShared ISharedRef
+ | IAdd IExpr IExpr
+ | ISub IExpr IExpr
+ | IMul IExpr IExpr
+ | IDiv IExpr IExpr
+ | IEq IExpr IExpr
+ | ILt IExpr IExpr
+ | IAnd IExpr IExpr
+ | IOr IExpr IExpr
+ | IIf IExpr IExpr IExpr
+
+:: ITrigger
+ = IChange ISharedRef
+ | IBecomes ISharedRef IExpr
+ | ITAnd ITrigger ITrigger
+ | ITOr ITrigger ITrigger
+
+:: IRule
+ = IAssign ISharedRef IExpr
+ | IWhen IExpr [IRule]
+ | ITrigger ITrigger [IRule]
+ | ISetCursor (IExpr, IExpr)
+ | IPrint IExpr
+
+:: INamedRule = Rule String [IRule]
+
+derive class iTask Signedness, CType, ReadOrWrite, ISharedInt, IShares, IExpr,
+ ITrigger, IRule, INamedRule
+
+instance lift [a] | lift a
+instance unlift [a] [b] | unlift a b
+instance lift IExpr
+instance unlift IExpr (Expr t rw) | Expr t
+instance lift ISharedInt
+instance unlift ISharedInt (UShared Int rw)
+instance lift ITrigger
+instance unlift ITrigger Trigger
+instance lift IRule
+instance unlift IRule Rule
+instance lift INamedRule
+instance unlift INamedRule NamedRule
+
+simulate :: [NamedRule] -> Task ()