Справочник по Ada 2012
5.1 Простые и составные операторы — Последовательности операторов
Оператор является либо простым, либо составным. Простой оператор не содержит других операторов. Составной оператор может содержать простые операторы и другие составные операторы.
Синтаксис
simple_statement ::= null_statement
| assignment_statement | exit_statement
| goto_statement | procedure_call_statement
| simple_return_statement | entry_call_statement
| requeue_statement | delay_statement
| abort_statement | raise_statement
| code_statement
| assignment_statement | exit_statement
| goto_statement | procedure_call_statement
| simple_return_statement | entry_call_statement
| requeue_statement | delay_statement
| abort_statement | raise_statement
| code_statement
compound_statement ::=
if_statement | case_statement
| loop_statement | block_statement
| extended_return_statement
| accept_statement | select_statement
if_statement | case_statement
| loop_statement | block_statement
| extended_return_statement
| accept_statement | select_statement
null_statement ::= null;
Имя direct_name идентификатора statement_identifier должно быть идентификатором (а не символом оператора).
Правила разрешения имен
Имя direct_name идентификатора statement_identifier должно разрешаться для обозначения соответствующего неявного объявления (см. ниже).
Правила правомерности
Разные идентификаторы должны использоваться для всех идентификаторов statement_identifier, которые появляются в одном теле, включая вложенные block_statement, но исключая вложенные программные модули.
Статическая семантика
Для каждого идентификатора statement_identifier существует неявное объявление (с указанным идентификатором) в конце части объявления declarative_part самого внутреннего block_statement или тела, который включает statement_identifier. Неявные объявления появляются в том же порядке, что и идентификаторы statement_identifier в исходном тексте. Если имя использования обозначает такое неявное объявление, то сущность, которую оно обозначает, — это метка, loop_statement или block_statement с заданным идентификатором statement_identifier.
Если одна или несколько меток завершают sequence_of_statements, после меток следует неявный null_statement перед любыми последующими конструкциями.
Динамическая семантика
Выполнение null_statement не оказывает никакого влияния.
Передача управления — это действие во время выполнения оператора exit_statement, оператора возврата, goto_statement или requeue_statement, выбор альтернативы terminate_alternative, поднятие исключения или прерывание, что приводит к тому, что следующее выполняемое действие отличается от того, что обычно ожидалось от других правил языка. Как описано в разделе 7.6.1, передача управления может привести к завершению и выходу из выполнения конструкций, что может вызвать окончание.
Выполнение sequence_of_statements состоит из последовательного выполнения отдельных операторов statement до тех пор, пока последовательность не будет завершена.
ПРИМЕЧАНИЯ
1 Идентификатор statement_identifier, который появляется непосредственно в области объявления именованного оператора loop_statement или оператора accept_statement, тем не менее, неявно объявляется непосредственно в области объявления самого внутреннего окружающего тела или block_statement; другими словами, расширенное имя именованного оператора не зависит от того, находится ли оператор внутри или вне именованного цикла или оператора accept_statement — только вложение в block_statements имеет отношение к форме его расширенного имени.
Примеры
Примеры помеченных операторов:
<<Здесь>> <<Ici>> <<Aqui>> <<Hier>> null;
<<После>> X := 1;