Справочник по Ada 95
1.1.4 Способ описания и обозначение синтаксиса
Форма программы Ada описывается с помощью контекстно-свободного синтаксиса вместе с контекстно-зависимыми требованиями, выраженными описательными правилами.
Значение программ Ada описывается с помощью описательных правил, определяющих как эффекты каждого конструкта, так и правила композиции конструктов.
Контекстно-свободный синтаксис языка описывается с помощью простого варианта формы Бэкуса-Наура. В частности:
- Строчные слова в шрифте без засечек, некоторые содержащие встроенные подчеркивания, используются для обозначения синтаксических категорий, например:
case_statement
- Жирные слова используются для обозначения служебных слов, например:
array
- Квадратные скобки обозначают необязательные элементы. Таким образом, два следующих правила эквивалентны.
return_statement ::= return [expression];
return_statement ::= return; | return expression;
return_statement ::= return; | return expression;
- Фигурные скобки обозначают повторяющийся элемент. Элемент может появляться ноль или более раз; повторения происходят слева направо, как в эквивалентном леворекурсивном правиле. Таким образом, два следующих правила эквивалентны.
term ::= factor {multiplying_operator factor}
term ::= factor | term multiplying_operator factor
term ::= factor | term multiplying_operator factor
- Вертикальная черта разделяет альтернативные элементы, если она не встречается сразу после открывающей фигурной скобки, в этом случае она обозначает саму себя:
constraint ::= scalar_constraint | composite_constraint
discrete_choice_list ::= discrete_choice {| discrete_choice}
discrete_choice_list ::= discrete_choice {| discrete_choice}
- Если имя любой синтаксической категории начинается с курсированной части, она эквивалентна имени категории без курсированной части. Курсированная часть предназначена для передачи некоторой семантической информации. Например, subtype_name и task_name оба эквивалентны name в одиночку.
Синтаксическая категория — это нетерминал в грамматике, определенной в BNF в разделе «Синтаксис». Имена синтаксических категорий набраны другим шрифтом, like_this.
Конструкт — это фрагмент текста (явный или неявный), являющийся экземпляром синтаксической категории, определённой в разделе «Синтаксис».
Компонент конструкта — это сам конструкт или любой конструкт, появляющийся внутри него.
Всякий раз, когда операция выполнения в реальном времени определяет, что определённые действия должны происходить в произвольном порядке, это означает, что реализация должна обеспечить выполнение этих действий таким образом, чтобы это было эквивалентно некоторому последовательному порядку, следуя правилам, вытекающим из этого последовательного порядка. Когда вычисления определяются как происходящие в произвольном порядке, с преобразованием результатов в некоторые подтипы или с некоторыми проверками во время выполнения, вычисления, преобразования и проверки могут быть произвольно переставлены, при условии, что каждый выражение вычисляется до преобразования или проверки его значения. Обратите внимание, что эффект программы может зависеть от выбранного реализацией порядка. Это может произойти, например, если у двух фактических параметров данного вызова есть побочные эффекты.
ПРИМЕЧАНИЯ
3 Правила синтаксиса, описывающие структурированные конструкции, представлены в форме, соответствующей рекомендуемому оформлению абзацев. Например, if_statement определяется как:
if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
4 Переводы строк и отступы в правилах синтаксиса указывают рекомендуемые переносы строк и отступы в соответствующих конструкциях. Предпочтительные места для других переносов строк находятся после точек с запятой.