1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
definition module uFPL.Sim
from Data.Map import :: Map
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
}
:: ISharedUInt =
{ iuisname :: String
, iuisinit :: Int
, iuisrw :: ReadOrWrite
}
:: ISharedLong =
{ ilsname :: String
, ilsinit :: Int
, ilsrw :: ReadOrWrite
}
:: ISharedULong =
{ iulsname :: String
, iulsinit :: Int
, iulsrw :: ReadOrWrite
}
:: ISharedBool =
{ ibsname :: String
, ibsinit :: Bool
, ibsrw :: ReadOrWrite
}
:: ISharedRef :== String
:: IShares =
{ ishares :: [ISharedInt]
, uishares :: [ISharedUInt]
, lshares :: [ISharedLong]
, ulshares :: [ISharedULong]
, bshares :: [ISharedBool]
}
:: 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]
:: IState =
{ isvalues :: Map String Int
, uisvalues :: Map String Int
, lsvalues :: Map String Int
, ulsvalues :: Map String Int
, bsvalues :: Map String Bool
}
derive class iTask Signedness, CType, ReadOrWrite, ISharedInt, ISharedUInt,
ISharedLong, ISharedULong, ISharedBool, IShares, IExpr, ITrigger, IRule,
INamedRule, IState
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 ()
|