Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

1.1.4 Способ описания и обозначение синтаксиса

Форма программы Ada описывается с помощью контекстно-свободного синтаксиса вместе с контекстно-зависимыми требованиями, выраженными описательными правилами.
Значение программ Ada описывается с помощью описательных правил, определяющих как эффекты каждого конструкта, так и правила композиции конструктов.
Синтаксис языка контекстно-свободной формы описывается с помощью простого варианта формы Бэкуса-Наура. В частности:
  • Строчные слова в шрифте без засечек, некоторые содержащие встроенные подчеркивания, используются для обозначения синтаксических категорий, например:
case_statement
  • Жирные слова используются для обозначения служебных слов, например:
array
  • Квадратные скобки заключают необязательные элементы. Таким образом, две следующие правила эквивалентны.
simple_return_statement ::= return [expression];
simple_return_statement ::= return; | return expression;
  • Фигурные скобки заключают повторяемый элемент. Элемент может появляться ноль или более раз; повторения происходят слева направо, как и в эквивалентном леворекурсивном правиле. Таким образом, две следующие правила эквивалентны.
term ::= factor {multiplying_operator factor}
term ::= factor | term multiplying_operator factor
  • Вертикальная черта разделяет альтернативные элементы, например:
constraint ::= scalar_constraint | composite_constraint
  • Для символов, используемых в этой записи (квадратные скобки, фигурные скобки и вертикальная черта), сами символы, заключенные в ' ', представляют собой сами себя, например:
discrete_choice_list ::= discrete_choice {'|' discrete_choice}
named_container_aggregate ::= '[' container_element_association_list ']'
  • Если имя любой синтаксической категории начинается с курсированной части, оно эквивалентно имени категории без курсированной части. Курсированная часть предназначена для передачи некоторой семантической информации. Например, subtype_name и task_name оба эквивалентны name в одиночку.
Разделители, составные разделители, служебные слова и numeric_literal состоят исключительно из символов, код которых находится в диапазоне от 16#20# до 16#7E#, включительно. Специальные символы, для которых определены имена в этом документе (см. 2.1), также принадлежат к этому диапазону. Например, символ E в определении exponent — это символ с именем «ЛАТИНСКАЯ ПРОПИСНАЯ БУКВА E», а не «ГРЕЧЕСКАЯ ПРОПИСНАЯ БУКВА ЭПСИЛОН».
Когда в этом документе упоминается преобразование какого-либо символа или последовательности символов в верхний регистр, это означает преобразование с использованием простого преобразования в верхний регистр, как определено документами, на которые ссылается пункт 2 ISO/IEC 10646:2020.
Синтаксическая категория — это нетерминал в грамматике, определённой в BNF в разделе «Синтаксис». Имена синтаксических категорий набраны в другом шрифте, например_таким.
Конструкт — это фрагмент текста (явный или неявный), который является экземпляром синтаксической категории, определенной в разделе «Синтаксис».
Компонент конструкта — это сам конструкт или любой конструкт, появляющийся внутри него.
Всякий раз, когда семантика выполнения определяет, что некоторые действия должны произойти в произвольном порядке, это означает, что реализация должна обеспечить, чтобы эти действия происходили способом, эквивалентным некоторому последовательному порядку, следуя правилам, которые вытекают из этого последовательного порядка. Когда вычисления определены как происходящие в произвольном порядке, с преобразованием результатов к некоторым подтипам или с некоторыми проверками во время выполнения, вычисления, преобразования и проверки могут быть произвольно чередуются, при условии, что каждый выражение вычисляется до преобразования или проверки его значения. Обратите внимание, что эффект программы может зависеть от порядка, выбранного реализацией. Это может произойти, например, если два фактических параметра данного вызова имеют побочные эффекты.
ПРИМЕЧАНИЕ 1 Правила синтаксиса, описывающие структурированные конструкции, представлены в форме, соответствующей рекомендуемому форматированию. Например, if_statement определяется как:
if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
ПРИМЕЧАНИЕ 2 Переносы строк и отступы в правилах синтаксиса указывают рекомендуемые переносы строк и отступы в соответствующих конструкциях. Предпочтительные места для других переносов строк находятся после точек с запятой.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API