Thursday, December 11, 2008

ADA Syntax rules

Chapter 2
1 pragma ::= pragma identifier [(argument_association
{, argument_association})];
2 argument_association ::=
[argument_identifier =>] name
[argument_identifier =>] expression
Chapter 3
3 graphic_character ::= basic_graphic_character
lower_case_letter other_special_character
4 basic_graphic_character ::= upper_case_letter digit
special_character space_character
5 basic_character ::= basic_graphic_character format_effector
6 identifier ::= letter {[underline] letter_or_digit}
7 letter_or_digit ::= letter digit
8 letter ::= upper_case_letter lower_case_letter
9 numeric_literal ::= decimal_literal based_literal
10 decimal_literal ::= integer [. integer] [exponent]
11 integer ::= digit {[underline] digit}
12 exponent ::= E [+] integer E - integer
13 based_literal ::=
base # based_integer [. based_integer] # [exponent]
14 base ::= integer
15 based_integer ::= extended_digit {[underline] extended_digit}
16 extended_digit ::= digit letter
17 character_literal ::= 'graphic_character'
18 string_literal ::= "{graphic_character}"
Chapter 4
19 basic_declaration ::=
object_declaration number_declaration
type_declaration subtype_declaration
subprogram_declaration package_declaration
task_declaration generic_declaration
exception_declaration generic_instantiation
renaming_declaration deferred_constant_declaration
20 object_declaration ::=
identifier_list : [constant] subtype_indication
[:= expression];
identifier_list : [constant] constrained_array_definition
[:= expression];
21 number_declaration ::=
identifier_list : constant := universal_static_expression;
22 identifier_list ::= identifier {, identifier}
23 assignment_statement ::= variable_name := expression;
24 block_statement ::= [block_simple_name :]
[declare
declarative_part]
begin
sequence_of_statements
[exception
exception_handler
{exception_handler}
end [block_simple_name];
25 type_declaration ::=
full_type_declaration
incomplete_type_declaration
private_type_declaration
26 full_type_declaration ::=
type identifier [discriminant_part] is type_definition;
27 type_definition ::=
enumeration_type_definition integer_type_definition
real_type_definition array_type_definition
record_type_definition access_type_definition
derived_type_definition
28 subtype_declaration ::=
subtype identifier is subtype_indication;
29 subtype_indication ::= type_mark [constraint]
30 type_mark ::= type_name subtype_name
31 constraint ::= range_constraint floating_point_constraint
fixed_point_constraint index_constraint
discriminant_constraint
32 range_constraint ::= range range
33 range ::=
range_attribute simple_expression .. simple_expression
34 enumeration_type_definition ::=
(enumeration_literal_specification
{, enumeration_literal_specification})
35 enumeration_literal_specification ::= enumeration_literal
36 enumeration_literal ::= identifier character_literal
37 name ::= simple_name character_literal operator_symbol
indexed_component slice selected_component
attribute
38 simple_name ::= identifier
39 prefix ::= name function_call
40 attribute ::= prefix ' attribute_designator
41 attribute_designator ::=
simple_name [(universal_static_expression)]
42 expression ::=
relation {and relation}
relation {and then relation}
relation {or relation}
relation {or else relation}
relation {xor relation}
43 relation ::=
simple_expression [relational_operator simple_expression]
simple_expression [not] in range
simple_expression [not] in type_mark
44 simple_expression ::=
[unary_adding_operator] term {binary_adding_operator term}
45 term ::= factor {multiplying_operator factor}
46 factor ::= primary [** primary] abs primary not primary
47 primary ::= numeric_literal null aggregate
string_literal name
allocator function_call type_conversion
qualified_expression (expression)
48 logical_operator ::= and or xor
49 relational_operator ::= = /= < <= > >=
50 binary_adding_operator ::= + - &
51 unary_adding_operator ::= + -
52 multiplying_operator ::= * / mod rem
53 highest_precedence_operator ::= ** abs not
54 type_conversion ::= type_mark (expression)
55 qualified_expression ::=
type_mark ' (expression) type_mark ' aggregate
Chapter 5
56 sequence_of_statements ::= statement {statement}
57 statement ::= {label} simple_statement
{label} compound_statement
58 simple_statement ::=
null_statement assignment_statement
procedure_call_statement exit_statement
return_statement goto_statement
entry_call_statement delay_statement
abort_statement raise_statement
code_statement
59 compound_statement ::=
if_statement case_statement
loop_statement block_statement
accept_statement select_statement
60 label ::= <>
61 null_statement ::= null;
62 if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
63 condition ::= boolean_expression
64 case_statement ::=
case expression is
case_statement_alternative
{case_statement_alternative}
end case;
65 case_statement_alternative ::=
when choice { choice} => sequence_of_statements
66 choice ::= simple_expression discrete_range others
component_simple_name
67 discrete_range ::= discrete_subtype_indication range
68 loop_statement ::= [loop_simple_name :]
[iteration_scheme] loop
sequence_of_statements
end loop [loop_simple_name];
69 iteration_scheme ::=
while condition for loop_parameter_specification
70 loop_parameter_specification ::=
identifier in [reverse] discrete_range
71 exit_statement ::= exit [loop_name] [when condition];
72 goto_statement ::= goto label_name;
Chapter 6
73 array_type_definition ::=
unconstrained_array_definition
constrained_array_definition
74 unconstrained_array_definition ::=
array (index_subtype_definition {,
index_subtype_definition}) of
component_subtype_indication
75 constrained_array_definition ::=
array index_constraint of component_subtype_indication
76 index_subtype_definition ::= type_mark range <>
77 index_constraint ::= (discrete_range {, discrete_range})
78 indexed_component ::= prefix (expression {, expression})
79 slice ::= prefix (discrete_range)
80 aggregate ::= (component_association {, component_association})
81 component_association ::= [choice { choice} => ] expression
82 record_type_definition ::=
record
component_list
end record
83 component_list ::=
component_declaration {component_declaration}
{component_declaration} variant_part
null;
84 component_declaration ::=
identifier_list : component_subtype_definition [:=
expression];
85 component_subtype_definition ::= subtype_indication
86 selected_component ::= prefix . selector
87 selector ::=
simple_name character_literal operator_symbol all
Chapter 7
88 subprogram_declaration ::= subprogram_specification;
89 subprogram_specification ::=
procedure identifier [formal_part]
function designator [formal_part] return type_mark
90 designator ::= identifier operator_symbol
91 operator_symbol ::= string_literal
92 formal_part ::= (parameter_specification {;
parameter_specification})
93 parameter_specification ::=
identifier_list : mode type_mark [:= expression]
94 mode ::= [in] in out out
95 subprogram_body ::=
subprogram_specification is
[declarative_part]
begin
sequence_of_statements
[exception
exception_handler
{exception_handler}]
end [designator];
96 procedure_call_statement ::=
procedure_name [actual_parameter_part];
97 function_call ::= function_name [actual_parameter_part]
98 actual_parameter_part ::=
(parameter_association {, parameter_association})
99 parameter_association ::=
[formal_parameter =>] actual_parameter
100 formal_parameter ::= parameter_simple_name
101 actual_parameter ::=
expression variable_name type_mark (variable_name)
102 return_statement ::= return [expression];
Chapter 8
103 package_declaration ::= package_specification;
104 package_specification ::=
package identifier is
{basic_declarative_item}
[private
{basic_declarative_item}]
end [package_simple_name]
105 package_body ::=
package body package_simple_name is
[declarative_part]
[begin
sequence_of_statements
[exception
exception_handler
{exception_handler}]]
end [package_simple_name];
106 declarative_part ::=
{basic_declarative_item} {later_declarative_item}
107 basic_declarative_item ::=
basic_declaration representation_clause use_clause
108 later_declarative_item ::=
body subprogram_declaration
package_declaration task_declaration
generic_declaration use_clause
generic_instantiation
109 body ::= proper_body body_stub
110 proper_body ::= subprogram_body package_body task_body
111 use_clause ::= use package_name {, package_name};
112 compilation ::= {compilation_unit}
113 compilation_unit ::=
context_clause library_unit
context_clause secondary_unit
114 library_unit ::=
subprogram_declaration package_declaration
generic_declaration generic_instantiation
subprogram_body
115 secondary_unit ::= library_unit_body subunit
116 library_unit_body ::= subprogram_body package_body
117 context_clause ::= {with_clause {use_clause}}
118 with_clause ::= with unit_simple_name {, unit_simple_name};
119 body_stub ::=
subprogram_specification is separate;
package body package_simple_name is separate;
task body task_simple_name is separate;
120 subunit ::= separate (parent_unit_name) proper_body
121 renaming_declaration ::=
identifier : type_mark renames object_name;
identifier : exception renames exception_name;
package identifier renames package_name;
subprogram_specification renames subprogram_or_entry_name;
Chapter 9
122 private_type_declaration ::=
type identifier [discriminant_part] is [limited] private;
123 deferred_constant_declaration ::=
identifier_list : constant type_mark;
Chapter 10
124 exception_handler ::=
when exception_choice { exception_choice} =>
sequence_of_statements
125 exception_choice ::= exception_name others
126 exception_declaration ::= identifier_list : exception;
127 raise_statement ::= raise [exception_name];
Chapter 11
128 discriminant_part ::=
(discriminant_specification {;
discriminant_specification})
129 discriminant_specification ::=
identifier_list : type_mark [:= expression]
130 discriminant_constraint ::=
(discriminant_association {, discriminant_association})
131 discriminant_association ::=
[discriminant_simple_name { discriminant_simple_name}
=>] expression
132 variant_part ::=
case discriminant_simple_name is
variant
{variant}
end case;
133 variant ::= when choice { choice} => component_list
134 access_type_definition ::= access subtype_indication
135 incomplete_type_declaration ::=
type identifier [discriminant_part];
136 allocator ::= new subtype_indication new qualified_expression
137 derived_type_definition ::= new subtype_indication
Chapter 12
138 integer_type_definition ::= range_constraint
139 real_type_definition ::=
floating_point_constraint fixed_point_constraint
140 floating_point_constraint ::=
floating_accuracy_definition [range_constraint]
141 floating_accuracy_definition ::=
digits static_simple_expression
142 fixed_point_constraint ::=
fixed_accuracy_definition [range_constraint]
143 fixed_accuracy_definition ::= delta static_simple_expression
Chapter 13
144 generic_declaration ::= generic_specification;
145 generic_specification ::=
generic_formal_part subprogram_specification
generic_formal_part package_specification
146 generic_formal_part ::= generic {generic_parameter_declaration}
147 generic_parameter_declaration ::=
identifier_list : [in [out]] type_mark [:= expression];
type identifier is generic_type_definition;
private_type_declaration
with subprogram_specification [is name];
with subprogram_specification [is <>];
148 generic_type_definition ::=
(<>) range <> digits <> delta <>
array_type_definition access_type_definition
149 generic_instantiation ::=
package identifier is
new generic_package_name [generic_actual_part];
procedure identifier is
new generic_procedure_name [generic_actual_part];
function designator is
new generic_function_name [generic_actual_part];
150 generic_actual_part ::=
(generic_association {, generic_association})
151 generic_association ::=
[generic_formal_parameter =>] generic_actual_parameter
152 generic_formal_parameter ::=
parameter_simple_name operator_symbol
153 generic_actual_parameter ::= expression variable_name
subprogram_name entry_name type_mark
Chapter 14
154 task_declaration ::= task_specification;
155 task_specification ::=
task [type] identifier [is
{entry_declaration}
{representation_clause}
end [task_simple_name]]
156 task_body ::=
task body task_simple_name is
[declarative_part]
begin
sequence_of_statements
[exception
exception_handler
{exception_handler}]
end [task_simple_name];
157 entry_declaration ::=
entry identifier [(discrete_range)] [formal_part];
158 entry_call_statement ::= entry_name [actual_parameter_part];
159 accept_statement ::=
accept entry_simple_name [(entry_index)] [formal_part] [do
sequence_of_statements
end [entry_simple_name]];
160 entry_index ::= expression
161 delay_statement ::= delay simple_expression;
162 select_statement ::= selective_wait conditional_entry_call
timed_entry_call
163 selective_wait ::=
select
select_alternative
{or
select_alternative}
[else
sequence_of_statements]
end select;
164 select_alternative ::=
[when condition =>] selective_wait_alternative
165 selective_wait_alternative ::= accept_alternative
delay_alternative terminate_alternative
166 accept_alternative ::=
accept_statement [sequence_of_statements]
167 delay_alternative ::= delay_statement [sequence_of_statements]
168 terminate_alternative ::= terminate;
169 conditional_entry_call ::=
select
entry_call_statement
[sequence_of_statements]
else
sequence_of_statements
end_select;
170 timed_entry_call ::=
select
entry_call_statement
[sequence_of_statements]
or
delay_alternative
end select;
171 abort_statement ::= abort task_name {, task_name};
Chapter 15
172 representation_clause ::=
type_representation_clause address_clause
173 type_representation_clause ::= length_clause
enumeration_representation_clause
record_representation_clause
174 length_clause ::= for attribute use simple_expression;
175 enumeration_representation_clause ::=
for type_simple_name use aggregate;
176 record_representation_clause ::=
for type_simple_name use
record [alignment_clause]
{component_clause}
end record;
177 alignment_clause ::= at mod static_simple_expression;
178 component_clause ::= component_name at
static_simple_expression range static_range;
179 address_clause ::= for simple_name use at simple_expression;
180 code_statement ::= type_mark ' record_aggregate;
A4.3 Syntax rules for Ada 9X
Chapter 2
1* pragma ::= pragma identifier [(pragma_argument_association
{, pragma_argument_association})];
2* pragma_argument_association ::=
[pragma_argument_identifier =>] name
[pragma_argument_identifier =>] expression
Chapter 3
4* graphic_character ::= letter digit
space_character special_character
5* character ::= graphic_character format_effector
other_control_function
6* identifier ::= identifier_letter {[underline] letter_or_digit}
7* letter_or_digit ::= identifier_letter digit
9 numeric_literal ::= decimal_literal based_literal
10* decimal_literal ::= numeral [. numeral] [exponent]
11* numeral ::= digit {[underline] digit}
12* exponent ::= E [+] numeral E - numeral
13* based_literal ::=
base # based_numeral [. based_numeral] # [exponent]
14* base ::= numeral
15* based_numeral ::= extended_digit {[underline] extended_digit}
16* extended_digit ::= digit A B C D E F
17 character_literal ::= 'graphic_character'
18* string_literal ::= "{string_element}"
18a string_element ::= "" non_qotation_mark_graphic_character
18b comment ::= -- {non_end_of_line_character}
Chapter 4
19* basic_declaration ::=
object_declaration number_declaration
type_declaration subtype_declaration
subprogram_declaration package_declaration
generic_declaration exception_declaration
generic_instantiation renaming_declaration
abstract_subprogram_declaration
20* object_declaration ::=
defining_identifier_list : [aliased] [constant]
subtype_indication [:= expression];
defining_identifier_list : [aliased] [constant]
array_type_definition [:= expression];
single_task_declaration
single_protected_declaration
21* number_declaration ::=
defining_identifier_list : constant := static_expression;
22* defining_identifier_list ::=
defining_identifier {, defining_identifier}
22a defining_identifier ::= identifier
23 assignment_statement ::= variable_name := expression;
24* block_statement ::= [block_statement_identifier :]
[declare
declarative_part]
begin
handled_sequence_of_statements
end [block_identifier];
24a statement_identifier ::= direct_name
25* type_declaration ::=
full_type_declaration
incomplete_type_declaration
private_type_declaration
private_extension_declaration
26* full_type_declaration ::=
type defining_identifier [known_discriminant_part]
is type_definition;
task_type_declaration
protected_type_declaration
27 type_definition ::=
enumeration_type_definition integer_type_definition
real_type_definition array_type_definition
record_type_definition access_type_definition
derived_type_definition
28* subtype_declaration ::=
subtype defining_identifier is subtype_indication;
29* subtype_indication ::= subtype_mark [constraint]
30* subtype_mark ::= subtype_name
31* constraint ::= scalar_constraint composite_constraint
31a scalar_constraint ::=
range_constraint digits_constraint delta_constraint
31b composite_constraint ::=
index_constraint discriminant_constraint
32 range_constraint ::= range range
33* range ::= range_attribute_reference
simple_expression .. simple_expression
34 enumeration_type_definition ::=
(enumeration_literal_specification
{, enumeration_literal_specification})
35* enumeration_literal_specification ::=
defining_identifier defining character_literal
35a defining_character_literal ::= character_literal
37* name ::= direct_name explicit_dereference indexed_component
slice selected_component attribute_reference
type_conversion function_call character_literal
38* direct_name ::= identifier operator_symbol
39* prefix ::= name implicit_dereference
39a explicit_dereference ::= name . all
39b implicit_dereference ::= name
40* attribute_reference ::= prefix ' attribute_designator
40a range_attribute_reference ::=
prefix ' range_attribute_designator
41* attribute_designator ::= identifier [(static_expression)]
Access Delta Digits
41a range_attribute_designator ::= Range [(static_expression)]
42 expression ::=
relation {and relation}
relation {and then relation}
relation {or relation}
relation {or else relation}
relation {xor relation}
43* relation ::=
simple_expression [relational_operator simple_expression]
simple_expression [not] in range
simple_expression [not] in subtype_mark
44 simple_expression ::=
[unary_adding_operator] term {binary_adding_operator term}
45 term ::= factor {multiplying_operator factor}
46 factor ::= primary [** primary] abs primary not primary
47* primary ::= numeric_literal null aggregate
string_literal name
allocator qualified_expression (expression)
48 logical_operator ::= and or xor
49 relational_operator ::= = /= < <= > >=
50 binary_adding_operator ::= + - &
51 unary_adding_operator ::= + -
52 multiplying_operator ::= * / mod rem
53 highest_precedence_operator ::= ** abs not
54* type_conversion ::=
subtype_mark (expression) subtype_mark (name)
55* qualified_expression ::=
subtype_mark ' (expression) subtype_mark ' aggregate
Chapter 5
56 sequence_of_statements ::= statement {statement}
57 statement ::= {label} simple_statement
{label} compound_statement
58* simple_statement ::=
null_statement assignment_statement
procedure_call_statement exit_statement
return_statement goto_statement
entry_call_statement delay_statement
abort_statement raise_statement
code_statement requeue_statement
59 compound_statement ::=
if_statement case_statement
loop_statement block_statement
accept_statement select_statement
60* label ::= <>
61 null_statement ::= null;
62 if_statement ::=
if condition then
sequence_of_statements
{elsif condition then
sequence_of_statements}
[else
sequence_of_statements]
end if;
63 condition ::= boolean_expression
64 case_statement ::=
case expression is
case_statement_alternative
{case_statement_alternative}
end case;
65* case_statement_alternative ::=
when discrete_choice_list => sequence_of_statements
65a discrete_choice_list ::= discrete_choice { discrete_choice}
66* discrete_choice ::= expression discrete_range others
67 discrete_range ::= discrete_subtype_indication range
68* loop_statement ::= [loop_statement_identifier :]
[iteration_scheme] loop
sequence_of_statements
end loop [loop_identifier];
69 iteration_scheme ::=
while condition for loop_parameter_specification
70* loop_parameter_specification ::=
defining_identifier in [reverse] discrete_subtype_definition
71 exit_statement ::= exit [loop_name] [when condition];
72 goto_statement ::= goto label_name;
Chapter 6
73 array_type_definition ::=
unconstrained_array_definition
constrained_array_definition
74* unconstrained_array_definition ::=
array (index_subtype_definition {,
index_subtype_definition}) of component_definition
75* constrained_array_definition ::=
array (discrete_subtype_definition {,
discrete_subtype_definition}) of component_definition
76* index_subtype_definition ::= subtype_mark range <>
76a discrete_subtype_definition ::=
discrete_subtype_indication range
76b component_definition ::= [aliased] subtype_indication
77 index_constraint ::= (discrete_range {, discrete_range})
78 indexed_component ::= prefix (expression {, expression})
79 slice ::= prefix (discrete_range)
80* aggregate ::=
record_aggregate extension_aggregate array_aggregate
80a record_aggregate ::= (record_component_association_list)
80b record_component_association_list ::=
record_component_association
{, record_component_association}
null record
80c record_component_association ::=
[component_choice_list =>] expression
80d component_choice_list ::=
component_selector_name{ component_selector_name}
others
80e array_aggregate ::=
positional_array_aggregate named_array_aggregate
80f positional_array_aggregate ::=
(expression , expression {, expression})
(expression {, expression} , others => expression)
80g named_array_aggregate ::=
(array_component_association {, array_component_association})
80h array_component_association ::=
discrete_choice_list => expression
82* record_type_definition ::=
[[abstract] tagged] [limited] record_definition
82a record_definition ::=
record
component_list
end record
null record
83* component_list ::=
component_item {component_item}
{component_item} variant_part
null;
83a component_item ::=
component_declaration representation_clause
84* component_declaration ::=
defining_identifier_list : component_definition
[:= default_expression];
84a default_expression ::= expression
86* selected_component ::= prefix . selector_name
87* selector_name ::= identifier character_literal
operator_symbol
Chapter 7
88 subprogram_declaration ::= subprogram_specification;
89* subprogram_specification ::=
procedure defining_program_unit_name parameter_profile
function defining_designator parameter_and_result_profile
89a parameter_profile ::= [formal_part]
89b parameter_and_result_profile ::=
[formal_part] return subtype_mark
90* designator ::=
[parent_unit_name . ] identifier operator_symbol
90a defining_designator ::=
defining_program_unit_name defining_operator_symbol
90b defining_program_unit_name ::=
[parent_unit_name . ] defining_identifier
90c parent_unit_name ::= name
91 operator_symbol ::= string_literal
91a defining_operator_symbol ::= operator_symbol
92 formal_part ::=
(parameter_specification {; parameter_specification})
93* parameter_specification ::=
defining_identifier_list : mode subtype_mark
[:= default_expression]
defining_identifier_list : access_definition
[:= default_expression]
94 mode ::= [in] in out out
95* subprogram_body ::=
subprogram_specification is
declarative_part
begin
handled_sequence_of_statements
end [designator];
96* procedure_call_statement ::=
procedure_name; procedure_prefix actual_parameter_part;
97* function_call ::=
function_name function_prefix actual_parameter_part
98 actual_parameter_part ::=
(parameter_association {, parameter_association})
99* parameter_association ::=
[formal_parameter_selector_name =>] explicit_actual_parameter
101* explicit_actual_parameter ::=
expression variable_name
102 return_statement ::= return [expression];
Chapter 8
103 package_declaration ::= package_specification;
104* package_specification ::=
package defining_program_unit_name is
{basic_declarative_item}
[private
{basic_declarative_item}]
end [[parent_unit_name . ] identifier]
105* package_body ::=
package body defining_program_unit_name is
declarative_part
[begin
handled_sequence_of_statements]
end [[parent_unit_name . ] identifier];
106* declarative_part ::= {declarative_item}
107 basic_declarative_item ::=
basic_declaration representation_clause use_clause
108* declarative_item ::= basic_declarative_item body
109 body ::= proper_body body_stub
110* proper_body ::= subprogram_body package_body task_body
protected_body
111* use_clause ::= use_package_clause use_type_clause
111a use_package_clause ::= use package_name {, package_name};
111b use_type_clause ::= use type subtype_mark {, subtype_mark};
112 compilation ::= {compilation_unit}
113* compilation_unit ::=
context_clause library_item
context_clause subunit
113a library_item ::=
[private] library_unit_declaration library_unit_body
[private] library_unit_renaming_declaration
114* library_unit_declaration ::=
subprogram_declaration package_declaration
generic_declaration generic_instantiation
114a library_unit_renaming_declaration ::=
package_renaming_declaration
generic_renaming_declaration
subprogram_renaming_declaration
116 library_unit_body ::= subprogram_body package_body
117* context_clause ::= {context_item}
117a context_item ::= with_clause use_clause
118* with_clause ::= with library_unit_name {, library_unit_name};
119* body_stub ::= subprogram_body_stub package_body_stub
task_body_stub protected_body_stub
119a subprogram_body_stub ::= subprogram_specification is separate;
119b package_body_stub ::=
package body defining_identifier is separate;
119c task_body_stub ::=
task body defining_identifier is separate;
119d protected_body_stub ::=
protected body defining_identifier is separate;
120* subunit ::= separate (parent_unit_name) proper_body
121* renaming_declaration ::=
object_renaming_declaration
exception_renaming_declaration
package_renaming_declaration
subprogram_renaming_declaration
generic_renaming_declaration
121a object_renaming_declaration ::=
defining_identifier : subtype_mark renames object_name;
121b exception_renaming_declaration ::=
defining_identifier : exception renames exception_name;
121c package_renaming_declaration ::=
package defining_program_unit_name renames package_name;
121d subprogram_renaming_declaration ::=
subprogram_specification renames callable_entity_name;
121e generic_renaming_declaration ::=
generic package defining_program_unit_name
renames generic_package_name;
generic procedure defining_program_unit_name
renames generic_procedure_name;
generic function defining_program_unit_name
renames generic_function_name;
Chapter 9
122* private_type_declaration ::=
type defining_identifier [discriminant_part] is
[[abstract] tagged] [limited] private;
Chapter 10
124* exception_handler ::=
when [choice_parameter_specification :]
exception_choice { exception_choice} =>
sequence_of_statements
124a handled_sequence_of_statements ::=
sequence_of_statements
[exception
exception_handler
{exception_handler}]
124b choice_parameter_specification ::= defining_identifier
125 exception_choice ::= exception_name others
126* exception_declaration ::= defining_identifier_list : exception;
127 raise_statement ::= raise [exception_name];
Chapter 11
128* discriminant_part ::=
unknown_discriminant_part known_discriminant_part
128a unknown_discriminant_part ::= (<>)
128b known_discriminant_part ::=
(discriminant_specification {; discriminant_specification})
129* discriminant_specification ::=
defining_identifier_list : subtype_mark [:=
default_expression]
defining_identifier_list : access_definition [:=
default_expression]
130 discriminant_constraint ::=
(discriminant_association {, discriminant_association})
131* discriminant_association ::=
[discriminant_selector_name { discriminant_selector_name}
=>] expression
132* variant_part ::=
case discriminant_direct_name is
variant
{variant}
end case;
133* variant ::= when discrete_choice_list => component_list
134* access_type_definition ::=
access_to_object_definition
access_to_subprogram_definition
134a access_to_object_definition ::=
access [general_access_modifier] subtype_indication
134b general_access_modifier ::= all constant
134c access_to_subprogram_definition ::=
access [protected] procedure parameter_profile
access [protected] function parameter_and_result_profile
134d access_definition ::= access subtype_mark
135* incomplete_type_declaration ::=
type defining_identifier [discriminant_part];
136 allocator ::= new subtype_indication new qualified_expression
137* derived_type_definition ::=
[abstract] new parent_subtype_indication
[record_extension_part]
Chapter 12
138* integer_type_definition ::=
signed_integer_type_definition modular_type_definition
138a signed_integer_type_definition ::=
range static_simple_expression .. static_simple_expression
138b modular_type_definition ::= mod static_expression
139* real_type_definition ::=
floating_point_definition fixed_point_definition
140* floating_point_definition ::=
digits static_expression [real_range_specification]
140a real_range_specification ::=
range static_simple_expression .. static_simple_expression
142* fixed_point_definition ::= ordinary_fixed_point_definition
decimal_fixed_point_definition
142a ordinary_fixed_point_definition ::=
delta static_expression real_range_specification
142b decimal_fixed_point_definition ::=
delta static_expression digits static_expression
[real_range_specification]
142c digits_constraint ::=
digits static_expression [range_constraint]
142d delta_constraint ::= delta static_expression [range_constraint]
Chapter 13
144* generic_declaration ::=
generic_subprogram_declaration
generic_package_declaration
144a generic_subprogram_declaration ::=
generic_formal_part subprogram_specification;
144b generic_package_declaration ::=
generic_formal_part package_specification;
146* generic_formal_part ::=
generic {generic_formal_parameter_declaration
use_clause}
147* generic_formal_parameter_declaration ::=
formal_object_declaration
formal_type_declaration
formal_subprogram_declaration
formal_package_declaration
147a formal_object_declaration ::=
defining_identifier_list : mode subtype_mark
[:= default_expression];
147b formal_type_declaration ::=
type defining_identifier [discriminant_part] is
formal_type_definition;
147c formal_type_definition ::=
formal_private_type_definition
formal_derived_type_definition
formal_discrete_type_definition
formal_signed_integer_type_definition
formal_modular_type_definition
formal_floating_point_definition
formal_ordinary_fixed_point_definition
formal_decimal_fixed_point_definition
formal_array_type_definition
formal_access_type_definition
147d formal_private_type_definition ::=
[[abstract] tagged] [limited] private
147e formal_derived_type_definition ::=
[abstract] new subtype_mark [with private]
147f formal_discrete_type_definition ::= (<>)
147g formal_signed_integer_type_definition ::= range <>
147h formal_modular_type_definition ::= mod <>
147i formal_floating_point_definition ::= digits <>
147j formal_ordinary_fixed_point_definition ::= delta <>
147k formal_decimal_fixed_point_definition ::= delta <> digits <>
147l formal_array_type_definition ::= array_type_definition
147m formal_access_type_definition ::= access_type_definition
147n formal_subprogram_declaration ::=
with subprogram_specification [is subprogram_default];
147o subprogram_default ::= default_name <>
147p default_name ::= name
147q formal_package_declaration ::= with package defining_identifier
is new generic_package_name formal_package_actual_part;
147r formal_package_actual_part ::= (<>) [generic_actual_part]
149* generic_instantiation ::=
package defining_program_unit_name is
new generic_package_name [generic_actual_part];
procedure defining_program_unit_name is
new generic_procedure_name [generic_actual_part];
function defining_designator is
new generic_function_name [generic_actual_part];
150 generic_actual_part ::=
(generic_association {, generic_association})
151* generic_association ::=
[generic_formal_parameter_selector_name =>]
explicit_generic_actual_parameter
153* explicit_generic_actual_parameter ::=
expression variable_name
subprogram_name entry_name subtype_mark
package_instance_name
Chapter 14
154* task_type_declaration ::=
task type defining_identifier [known_discriminant_part]
[is task_definition];
154a single_task_declaration ::=
task defining_identifier [is task_definition];
155* task_definition ::=
{task_item}
[private
{task_item}]
end [task_identifier]
155a task_item ::= entry_declaration representation_clause
156* task_body ::=
task body defining_identifier is
declarative_part
begin
handled_sequence_of_statements
end [task_identifier];
157* entry_declaration ::=
entry defining_identifier [(discrete_subtype_definition)]
parameter_profile;
158 entry_call_statement ::= entry_name [actual_parameter_part];
159* accept_statement ::=
accept entry_direct_name
[(entry_index)] parameter_profile [do
handled_sequence_of_statements
end [entry_identifier]];
160 entry_index ::= expression
161* delay_statement ::= delay_until_statement
delay_relative_statement
161a delay_until_statement ::= delay until delay_expression;
161b delay_relative_statement ::= delay delay_expression;
162* select_statement ::= selective_accept conditional_entry_call
timed_entry_call asynchronous_select
163* selective_accept ::=
select
[guard]
select_alternative
{or
[guard]
select_alternative}
[else
sequence_of_statements]
end select;
163a guard ::= when condition =>
164* select_alternative ::= accept_alternative
delay_alternative terminate_alternative
166 accept_alternative ::=
accept_statement [sequence_of_statements]
167 delay_alternative ::= delay_statement [sequence_of_statements]
168 terminate_alternative ::= terminate;
169* conditional_entry_call ::=
select
entry_call_alternative
else
sequence_of_statements
end_select;
169a entry_call_alternative ::=
entry_call_statement [sequence_of_statements]
170* timed_entry_call ::=
select
entry_call_alternative
or
delay_alternative
end select;
171 abort_statement ::= abort task_name {, task_name};
Chapter 15
172* representation_clause ::=
attribute_definition_clause
enumeration_representation_clause
record_representation_clause
at_clause
172a local_name ::= direct_name direct_name ' attribute_designator
library_unit_name
174* attribute_definition_clause ::=
for local_name ' attribute_designator use expression;
for local_name ' attribute_designator use name;
175* enumeration_representation_clause ::=
for first_subtype_local_name use enumeration_aggregate;
175a enumeration_aggregate ::= array_aggregate
176* record_representation_clause ::=
for first_subtype_local_name use
record [mod_clause]
{component_clause}
end record;
177* mod_clause ::= at mod static_expression;
178 component_clause ::= component_local_name at
position range first_bit .. last_bit;
178a position ::= static_expression
178b first_bit ::= static_simple_expression
178c last_bit ::= static_simple_expression
179* at_clause ::= for local_name use at expression;
180* code_statement ::= qualified_expression;
Chapter 17
1X record_extension_part ::= with record_definition
2X extension_aggregate ::=
(ancestor_part with record_component_association_list)
3X ancestor_part ::= expression subtype_mark
4X abstract_subprogram_declaration ::=
subprogram_specification is abstract;
5X private_extension_declaration ::=
type defining_identifier [discriminant_part] is
[abstract] new ancestor_subtype_indication with private;
6X protected_type_declaration ::=
protected type defining_identifier
[known_discriminant_part] is protected_definition;
7X single_protected_definition ::=
protected defining_identifier is protected_definition;
8X protected_definition ::=
{protected_operation_declaration}
[private
{protected_element_declaration}]
end [protected_identifier]
9X protected_operation_declaration ::= subprogram_declaration
entry_declaration representation_clause
10X protected_element_declaration ::=
protected_operation_declaration component_declaration
11X protected_body ::=
protected body defining_identifier is
{protected_operation_item}
end [protected_identifier];
12X protected_operation_item ::= subprogram_declaration
subprogram_body entry_body representation_clause
13X entry_body ::=
entry defining_identifier entry_body_formal_part
entry_barrier is
declarative_part
begin
handled_sequence_of_statements
end [entry_identifier];
14X entry_body_formal_part ::=
[(entry_index_specification)] parameter_profile
15X entry_barrier ::= when condition
16X entry_index_specification ::=
for defining_identifier in discrete_subtype_definition
17X requeue_statement ::= requeue entry_name [with abort];
18X asynchronous_select ::=
select
triggering_alternative
then abort
abortable_part
end select;
19X triggering_alternative ::=
triggering_statement [sequence_of_statements]
20X triggering_statement ::= entry_call_statement delay_statement
21X abortable_part ::= sequence_of_statements

0 comments:

Search

My Blog List