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
|
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
:: IShared
= ISharedInt String Int ReadOrWrite
| ISharedUInt String Int ReadOrWrite
| ISharedLong String Int ReadOrWrite
| ISharedULong String Int ReadOrWrite
| ISharedBool String Bool ReadOrWrite
:: ISharedRef :== String
:: IShares :== [IShared]
:: 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, IShared, 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 ITrigger
instance unlift ITrigger Trigger
instance lift IRule
instance unlift IRule Rule
instance lift INamedRule
instance unlift INamedRule NamedRule
simulate :: [NamedRule] -> Task ()
|