Statements fall into two categories: compound and simple. A compound statement contains a header, one or more bodies
(with delimiters between bodies), and an ending.
Any compound statement can be prefixed and suffixed by matching identifiers. These identifiers can serve as the target of
an exit statement and, in addition, enhance program readability. Each compound statement is an open scope. The only definitions
which are local to a compound statement are the matching identifiers and, in the case of a repeat statement, the index variable. Notice, however,
that each body contained in a compound statement is a scope that may contain local definitions.
A simple statement does not contain a body, cannot be surrounded by matching identifiers, and is not a scope. Any
statement may optionally be preceded by labels that can serve as the target for a goto statement.
Identifier 1 is called a goto label and is defined in the scope immediately containing the statement it prefixes.
Identifiers 2 and 3, called matching identifiers, must be identical. The matching identifier is defined in the scope
of the compound statement which it brackets.
Goto labels and matching identifiers are automatically inherited by open scopes (see Section 3.5), but are never inherited by
closed scopes, and may never be exported from a capsule (see Section 8.2). A matching label can never be the target of a goto
statement, and a goto label can never be the target of an exit statement.
Even though there is no "empty statement", empty bodies are permitted (see Section 3.2).