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
|
/* $OpenBSD: test.trans,v 1.2 1996/03/04 10:37:25 mickey Exp $ */
/* $NetBSD: test.trans,v 1.4 1994/06/29 06:41:18 cgd Exp $ */
*PROTOCOL test
*INCLUDE
{
#include "test_def.h"
}
*PCB test_pcbstruct SYNONYM P
*STATES
STATE_A
STATE_B
STATE_C
ALL_STATES = [STATE_A, STATE_B, STATE_C]
*EVENTS { int ev_all; } SYNONYM E
EV_1 { char *ev1_char; }
EV_2 { int ev2_int; char ev2_char; }
EV_3
EV_4 { struct blah *ev4_blahptr;
unsigned int ev4_uint;
int ev4_int;
}
*TRANSITIONS
SAME <== [ STATE_A, STATE_B ] [ EV_1, EV_2, EV_3 ]
( $E.ev_all > 0 )
{
if( $P.test_state == STATE_A )
printf("state is STATE_A\n");
else
printf("state is STATE_B\n");
printf("action first transition\n");
}
;
STATE_C <== [ STATE_A, STATE_B ] [ EV_1, EV_2, EV_3 ]
DEFAULT
{
printf("default - transition 2\n");
MACRO1( $P.test_pcbfield );
}
;
STATE_C <== [ STATE_A, STATE_B ] EV_4
( $$.ev4_blahptr->blahfield & 0x1 )
NULLACTION
;
STATE_C <== ALL_STATES EV_4
DEFAULT
{
printf("default - transition 4\n");
printf("pcb is 0x%x, event is 0x%x \n", $P, $E);
printf("ev4 values are : blahptr 0x%x uint 0x%x int 0x%x\n",
$$.ev4_blahptr, $$.ev4_uint, $$.ev4_int);
}
;
|