Input: β : Fragment, a tag indicating the type of fragment |
ββββ |
Output: β |
1:β While β! End Offragment do // end of current fragment |
2:βββ ;βββ// Read the next element |
ββββin the fragment |
3:βββ if then // Termination condition |
4:βββ ; |
5:βββ return β |
6:βββ end if |
7:βββ case: β ββββ// is a message element |
8:βββββInsertAtPos; |
9:βββββx = GetNextElement(); |
10:βββ while β do |
11:ββββββInsertAtPos; |
12:ββββββx = GetNextElement(); |
13:βββ end while |
14:βββ if β then |
15:βββββββunread(x); break; |
16:βββ end if |
17:βββββ // Create a block |
ββnode, with block of messages in partial order ; |
18:βββ ConnectEdge;βββ // Edge from |
ββ to the next node |
19:βββ ; |
20:ββend case; |
21:ββcase: β βββββ// is a loop fragment |
22:βββ βββββ |
βββ ββββββ//βCreate decision node with predicate |
βββ β in ; |
23:βββ β βConnectEdge; |
24:βββ β β; |
25:βββ β βConnectEdge;βββββ// Create back edge |
26:βββ β β;βββββββ// Out edge |
βββ β from decision node |
27:βββ end case; |
28:βββ case: β βββββ// is an opt fragment |
29:βββββββ ββββ |
ββββββββββ//βCreate decision node with predicate |
βββ β in ; |
30:βββ β βConnectEdge; |
31:βββ β β; |
32:βββ β β; |
33:βββ β βConnectEdge; |
34:βββ β βConnectEdge; |
35:βββ β β; |
36:βββ end case; |
37:βββ case: β ββββββ// is a break fragment |
38:βββββββ ββββ |
ββββββββββ// Create decision node with predicate |
βββ β in ; |
39:βββ β βConnectEdge; |
40:βββ β β; |
41:βββ β β; |
42:βββ β βConnectEdge; |
43:βββ β β; |
44:βββ end case; |
45:βββ case: β ββββββ// is an alt fragment |
46:ββββββββββββββ// |
βββ β Create decision node with multioperands; |
47:βββ β βConnectEdge; |
48:βββ β β; |
49:βββ β βfor β |
50:βββ β βββββ; |
51:βββ β βββββ; |
52:βββ β βββββConnectEdge; |
53:βββ β βend for |
54:βββ β β; |
55:βββ end case; |
56:βββ case: β ββββββ// is a par fragment |
57:βββ β βββββββ//Create fork |
βββ β node; |
58:βββ β βConnectEdge; |
59:βββ β β; |
60:βββ β βforββ |
61:βββ β βββββ; |
62:βββ β βββββConnectEdge; |
63:βββ β βend for |
64:βββ β β; |
65:βββ end case; |
66:β end while |
67:βexitNode = curNode; |
68:β returnβ |
Function ProcessFragment |