- (1)
- A goto_statement specifies an explicit transfer of control from this
statement to a target statement with a given label.
(2)
goto_statement ::= goto label_name;
Name Resolution Rules
- (3)
- The label_name shall resolve to denote a label; the statement with that
label is the target statement.
Legality Rules
- (4)
- The innermost sequence_of_statements that encloses the target statement
shall also enclose the goto_statement. Furthermore, if a goto_statement is
enclosed by an accept_statement or a body, then the target statement shall
not be outside this enclosing construct.
Dynamic Semantics
- (5)
- The execution of a goto_statement transfers control to the target
statement, completing the execution of any compound_statement that encloses
the goto_statement but does not enclose the target.
-
- (6)
(10) The above rules allow transfer of control to a statement of an
enclosing sequence_of_statements but not the reverse. Similarly, they
prohibit transfers of control such as between alternatives of a case_statement, if_statement, or select_statement; between exception_handlers; or from an exception_handler of a handled_sequence_of_statements back to its sequence_of_statements.
Examples
- (7)
- Example of a loop containing a goto statement:
(8)
<<Sort>>
for I in 1 .. N-1 loop
if A(I) > A(I+1) then
Exchange(A(I), A(I+1));
goto Sort;
end if;
end loop;
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12