- (1)
- The form of an Ada program is described by means of a context-free syntax
together with context-dependent requirements expressed by narrative rules.
- (2)
- The meaning of Ada programs is described by means of narrative rules
defining both the effects of each construct and the composition rules for
constructs.
- (3)
- The context-free syntax of the language is described using a simple
variant of Backus-Naur Form. In particular:
- (4)
- Lower case words in a sans-serif font, some containing embedded
underlines, are used to denote syntactic categories, for example:
(5)
case_statement
- (6)
- Boldface words are used to denote reserved words, for example:
(7)
array
- (8)
- Square brackets enclose optional items. Thus the two following
rules are equivalent.
(9)
return_statement ::= return [expression];
return_statement ::= return; | return expression;
- (10)
- Curly brackets enclose a repeated item. The item may appear zero
or more times; the repetitions occur from left to right as with
an equivalent left-recursive rule. Thus the two following rules
are equivalent.
(11)
term ::= factor {multiplying_operator factor}
term ::= factor | term multiplying_operator factor
- (12)
- A vertical line separates alternative items unless it occurs
immediately after an opening curly bracket, in which case it
stands for itself:
(13)
constraint ::= scalar_constraint | composite_constraint
discrete_choice_list ::= discrete_choice {| discrete_choice}
- (14)
- If the name of any syntactic category starts with an italicized
part, it is equivalent to the category name without the
italicized part. The italicized part is intended to convey some
semantic information. For example subtype_name and task_name are
both equivalent to name alone.
- (15)
- A syntactic category is a nonterminal in the grammar defined in BNF
under ``Syntax.'' Names of syntactic categories are set in a different font,
like_this.
- (16)
- A construct is a piece of text (explicit or implicit) that is an
instance of a syntactic category defined under ``Syntax.''
- (17)
- A constituent of a construct is the construct itself, or any construct
appearing within it.
- (18)
- Whenever the run-time semantics defines certain actions to happen in an
arbitrary order, this means that the implementation shall arrange for these
actions to occur in a way that is equivalent to some sequential order,
following the rules that result from that sequential order. When evaluations
are defined to happen in an arbitrary order, with conversion of the results
to some subtypes, or with some run-time checks, the evaluations, conversions,
and checks may be arbitrarily interspersed, so long as each expression is
evaluated before converting or checking its value. Note that the effect of a
program can depend on the order chosen by the implementation. This can
happen, for example, if two actual parameters of a given call have side
effects.
-
- (19)
(3) The syntax rules describing structured constructs are presented in a
form that corresponds to the recommended paragraphing. For example, an
if_statement is defined as:
(20)
if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
- (21)
(4) The line breaks and indentation in the syntax rules indicate the
recommended line breaks and indentation in the corresponding constructs.
The preferred places for other line breaks are after semicolons.
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12