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
118
119
120
121
122
|
<scxml datamodel="promela" binding="early" >
<!--
promela-event-source:
foo.bar
foo.baz foo.foo
error.communication
error.platform
err.foo
-->
<datamodel>
<data>
bool b1;
</data>
<data>
int fooSum = 0;
int fooIndex = 0;
int fooItem;
int foos[10];
</data>
<data>
bool b2, b3, b4;
</data>
<data>
bool b5, b6 = 3 + 4, b7, b8, b9;
</data>
<data>
bool c1; bool c2; bool c3; bool c4;
bool c5; bool c6; bool c7, c8 = 4 + 6, c9;
</data>
<data>
byte state = 1;
mtype = {
FATAL, NON_FATAL, COMPLETE, INCOMPLETE,
red, white, blue
}
</data>
<data>
bool busy[3];
bool lazy[4];
</data>
<data>
bool v3, v2 = 1;
</data>
</datamodel>
<state id="init">
<invoke type="scxml">
<!--
promela-event-source:
innerFoo
-->
<final id="stop">
<onentry>
<send target="#_parent" event="innerFoo" />
</onentry>
</final>
</invoke>
<onentry>
<!--
promela-inline:
progress: skip;
-->
<raise event="foo.bar" />
<script>
busy[4 - 3] = 1;
</script>
<log label="foos" expr="foos" />
<foreach item="fooItem" array="foos" index="fooIndex">
<script>
foos[fooIndex] = fooIndex;
</script>
</foreach>
<log label="foos" expr="foos" />
<foreach item="fooItem" array="foos" index="fooIndex">
<log label="fooItem" expr="fooItem" />
<script>
fooSum = fooSum + fooItem;
</script>
</foreach>
<log label="fooSum" expr="fooSum" />
<if cond="b1==0">
<script>
b2=1; b3=1;
</script>
<elseif cond="b1==1" />
<script>
b2=1; b3=1;
</script>
<else />
<script>
b2=1; b3=1;
</script>
</if>
<script>
v2=1; v3=1;
</script>
</onentry>
<transition target="pass" cond="v2==v3 && busy[1] == 1" event="foo.bar">
<!--
promela-inline:
progress: skip;
-->
</transition>
<transition target="fail" event="*">
<!--
promela-inline:
progress: skip;
-->
</transition>
</state>
<final id="pass">
<onentry>
<log label="Outcome" expr="'pass'"/>
</onentry>
</final>
<final id="fail">
<onentry>
<log label="Outcome" expr="'fail'"/>
</onentry>
</final>
</scxml>
|