Promela |
Control-Flow |
labels |
NAME
label -
to identify a unique control state in a
proctype declaration.
DESCRIPTION
Any statement or control-flow construct can be preceded by a label.
The label can, but need not, be used as a destination of a
goto or can be used in a remote reference inside a
never claim.
Label names must be unique within the surrounding
proctype , trace , notrace , or
never claim declaration.
A label always prefixes a statement, and thereby uniquely identifies a control state in a transition system, that is, the source state of the transition that corresponds to the labeled statement.
Any number of labels can be attached to a single statement.
EXAMPLES
The following
proctype declaration translates into a transition system with precisely
three local process states: initial state
S1 , state
S2 in between the send and the receive,
and the (unreachable) final state
S3 , immediately following the repetition construct.
active proctype dijkstra() { S0: S1: do :: q!p -> S2: q?v :: true od /* S3 */ }The first state has two labels: S0 and S1 . This state has two outgoing transitions: one corresponding to the send statement q!p , and one corresponding to the condition statement true . Observe carefully that there is no separate control state at the start of each guard in a selection or repetition construct. Both guards share the same start state S1 .
NOTES
A label name can be any alphanumeric character string, with
the exception that the first character in the label name
may not be a digit or an underscore symbol.
The guard statement in a selection or repetition construct cannot be prefixed by a label individually; see the manual page for if and do for details.
The first statement of an inline also cannot have a label. It will prompt the error: instead of { Label: statement ... } use Label: { statement ... }. The reason is that the inline will be inlined into the main body of the specification (at the point where the inline is invoked) as a sequence in curly braces. To avoid the problem -- put a skip statement at the start of the inline.
There are three types of labels with special meaning, see the manual pages named accept , end , and progress .
SEE ALSO
accept
do
end
if
goto
progress
remoterefs
Spin Online References Promela Manual Index Promela Grammar Spin HomePage |
(Page updated: 19 February 2007) |