argument_association::= O(argument_identifier "=>") name | O(argument_identifier "=>") expression.
Grammar
3 Declarations
3.1
- 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.
3.2
- object_declaration::= identifier_list ":" O("constant") subtype_indication O(":=" expression)";" | identifier_list ":" O("constant") constrained_array_definition O(":=" expression)";".
- number_declaration::= identifier_list ":" "constant" ":=" universal_static_expression";".
- identifier_list::= identifier #("," identifier).
3.3.1
- type_declaration::= full_type_declaration | incomplete_type_declaration | private_type_declaration.
- full_type_declaration::= "type" identifier O(discriminant_part) "is" type_definition";".
- type_definition::= enumeration_type_definition | integer_type_definition | real_type_definition | array_type_definition | record_type_definition | access_type_definition | derived_type_definition.
3.3.2
- subtype_declaration::= "subtype" identifier "is" subtype_indication";".
- subtype_indication::= type_mark O(constraint).
- type_mark::= type_name | subtype_name.
- constraint::= range_constraint | floating_point_constraint | fixed_point_constraint | index_constraint | discriminant_constraint.
3.4
- derived_type_definition::= "new" subtype_indication.
3.5
- range_constraint::= "range" range.
- range::= range_attribute | simple_expression ".." simple_expression.
3.5.1
- enumeration_type_definition::= "("enumeration_literal_specification #("," enumeration_literal_specification)")".
- enumeration_literal_specification::= enumeration_literal.
- enumeration_literal::= identifier | character_literal.
3.5.4
- integer_type_definition::= range_constraint.
3.5.6
- real_type_definition::= floating_point_constraint | fixed_point_constraint.
3.5.7
- floating_point_constraint::= floating_accuracy_definition O(range_constraint).
- floating_accuracy_definition::= "digits" static_simple_expression.
3.5.9
- fixed_point_constraint::= fixed_accuracy_definition O(range_constraint).
- fixed_accuracy_definition::= "delta" static_simple_expression.
3.6
- array_type_definition::= unconstrained_array_definition | constrained_array_definition.
- unconstrained_array_definition::= "array("index_subtype_definition #("," index_subtype_definition)")" "of" component_subtype_indication.
- constrained_array_definition::= "array" index_constraint "of" component_subtype_indication.
- index_subtype_definition::= type_mark "range <>".
- index_constraint::= "("discrete_range #("," discrete_range)")".
- discrete_range::= discrete_subtype_indication | range.
3.7
- record_type_definition::= "record" component_list "end record".
- component_list::= component_declaration #(component_declaration) | #(component_declaration) variant_part | "null" ";".
- component_declaration::= identifier_list ":" component_subtype_definition O(":=" expression)";".
- component_subtype_definition::= subtype_indication.
3.7.1
- discriminant_part::= "("discriminant_specification #(";" discriminant_specification)")".
- discriminant_specification::= identifier_list ":" type_mark O(":=" expression).
3.7.2
- discriminant_constraint::= "("discriminant_association #("," discriminant_association)")".
- discriminant_association::= O(discriminant_simple_name #( "|" discriminant_simple_name "=>") ) expression.
3.7.3
- variant_part::= "case" discriminant_simple_name "is" variant #(variant) "end case;".
- variant::= "when" choice #( "|" choice) "=>" component_list.
- choice::= simple_expression | discrete_range | "others" | component_simple_name .
3.8
- access_type_definition::= "access" subtype_indication.
3.8.1
- incomplete_type_declaration::= "type" identifier O(discriminant_part)";".
3.9
- declarative_part::= #(basic_declarative_item) #(later_declarative_item).
- basic_declarative_item::= basic_declaration | representation_clause | use_clause.
- later_declarative_item::= body | subprogram_declaration | package_declaration | task_declaration | generic_declaration | use_clause | generic_instantiation.
- body::= proper_body | body_stub.
- proper_body::= subprogram_body | package_body | task_body.
4 Names and Expressions
4.1
- name::= simple_name | character_literal | operator_symbol | indexed_component | slice | selected_component | attribute.
- simple_name::= identifier.
- prefix::= name | function_call.
4.1.1
- indexed_component::= prefix"("expression #("," expression)")".
4.1.2
- slice::= prefix"("discrete_range")".
4.1.3
- selected_component::= prefix"."selector.
- selector::= simple_name | character_literal | operator_symbol | "all".
4.1.4
- attribute::= prefix"'"attribute_designator.
- attribute_designator::= simple_name O("("universal_static_expression")").
4.3
- aggregate::= "("component_association #("," component_association)")".
- component_association::= O(choice #("|" choice) "=>") expression.
4.4
- expression::= relation #("and" relation) | relation #("and then" relation) | relation #("or" relation) | relation #("or else" relation) | relation #("xor" relation).
- relation::= simple_expression O(relational_operator simple_expression) | simple_expression O("not") "in" range | simple_expression O("not") "in" type_mark.
- simple_expression::= O(unary_adding_operator) term #(binary_adding_operator term).
- term::= factor #(multiplying_operator factor).
- factor::= primary O("**" primary) | "abs" primary | "not" primary.
- primary::= numeric_literal | "null" | aggregate | string_literal | name | allocator | function_call | type_conversion | qualified_expression | "("expression")".
4.5
- logical_operator::= "and" | "or" | "xor".
- relational_operator::= "=" | "/=" | "<" | "<=" | ">" | ">=".
- binary_adding_operator::= "+" | "-" | "&".
- unary_adding_operator::= "+" | "-".
- multiplying_operator::= "*" | "/" | "mod" | "rem".
- highest_precedence_operator::= "**" | "abs" | "not".
4.6
- type_conversion::= type_mark"("expression")".
4.7
- qualified_expression::= type_mark"'("expression")" | type_mark"'"aggregate.
4.8
- allocator::= "new" subtype_indication | "new" qualified_expression.
5 Statements
5.1
- sequence_of_statements::= statement #(statement).
- statement::= #(label) simple_statement | #(label) compound_statement.
- 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.
- compound_statement::= if_statement | case_statement | loop_statement | block_statement | accept_statement | select_statement.
- label::= "<<"label_simple_name">>".
- null_statement::= "null" ";".
5.2
- assignment_statement::= variable_name ":=" expression";".
5.3
- if_statement::= "if" condition "then" sequence_of_statements #("elsif" condition "then" sequence_of_statements) O("else" sequence_of_statements ) "end if;".
- condition::= boolean_expression.
5.4
- case_statement::= "case" expression "is" case_statement_alternative #(case_statement_alternative) "end case;".
- case_statement_alternative::= "when" choice #(" | " choice ) "=>" sequence_of_statements.
5.5
- loop_statement::= O(loop_simple_name":") O(iteration_scheme) "loop" sequence_of_statements "end loop" O(loop_simple_name)";".
- iteration_scheme::= "while" condition | "for" loop_parameter_specification.
- loop_parameter_specification::= identifier "in" O("reverse") discrete_range.
5.6
- block_statement::= O(block_simple_name":") O("declare" declarative_part) "begin" sequence_of_statements O("exception" exception_handler #(exception_handler)) "end" O(block_simple_name)";".
5.7
- exit_statement::= "exit" O(loop_name) O("when" condition)";".
5.8
- return_statement::= "return" O(expression)";".
5.9
- goto_statement::= "goto" label_name";" ..
6 Subprograms
6.1
- subprogram_declaration::= subprogram_specification";".
- subprogram_specification::= "procedure" identifier O(formal_part) | "function" designator O(formal_part) "return" type_mark.
- designator::= identifier | operator_symbol.
- operator_symbol::= string_literal.
- formal_part::= "("parameter_specification #(";" parameter_specification)")".
- parameter_specification::= identifier_list ":" modetype_mark O(":="expression).
- mode::= O("in") | "in out" | "out".
6.3
- subprogram_body::=subprogram_specification "is" O(declarative_part) "begin" sequence_of_statements O("exception" exception_handler #(exception_handler)) "end" O(designator)";".
6.4
- procedure_call_statement::= procedure_name O(actual_parameter_part)";".
- function_call::= function_name O(actual_parameter_part).
- actual_parameter_part::= "("parameter_association #("," parameter_association)")".
- parameter_association::= O(formal_parameter "=>") actual_parameter.
- formal_parameter::= parameter_simple_name.
- actual_parameter::= expression | variable_name | type_mark"("variable_name")".
7 Packages
7.1
- package_declaration::= package_specification";".
- package_specification::= "package" identifier "is" #(basic_declarative_item) O("private" #(basic_declarative_item) ) "end" O(package_simple_name).
- package_body::= "package body" package_simple_name "is" O(declarative_part) O("begin" sequence_of_statements O("exception" exception_handler #(exception_handler))) "end" O(package_simple_name)";".
7.4
- private_type_declaration::= "type" identifier O(discriminant_part) "is" O("limited") "private;".
- deferred_constant_declaration::= identifier_list ":" "constant" type_mark";".
8 Use
8.4
- use_clause::= "use" package_name #("," package_name)";".
8.5
- 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";".
9 Tasks
9.1
- task_declaration::= task_specification";".
- task_specification::= "task" O("type") identifier O("is" #(entry_declaration) #(representation_clause) "end" O(task_simple_name)).
- task_body::= "task body" task_simple_name "is" O(declarative_part) "begin" sequence_of_statements O("exception" exception_handler #(exception_handler)) "end" O(task_simple_name)";".
9.5
- entry_declaration::= entry identifier O("("discrete_range")") O(formal_part)";".
- entry_call_statement::= entry_name O(actual_parameter_part)";".
- accept_statement::= "accept" entry_simple_name O("("entry_index")") O(formal_part) O("do" sequence_of_statements "end" O(entry_simple_name))";".
- entry_index::= expression.
9.6
- delay_statement::= delay simple_expression";".
9.7
- select_statement::= selective_wait | conditional_entry_call | timed_entry_call.
9.7.1
- selective_wait::= "select" select_alternative #("or" select_alternative) O("else" sequence_of_statements ) "end select;".
- select_alternative::= O("when" condition "=>") selective_wait_alternative.
- selective_wait_alternative::= accept_alternative | delay_alternative | terminate_alternative.
- accept_alternative::= accept_statement O(sequence_of_statements).
- delay_alternative::= delay_statement O(sequence_of_statements).
- terminate_alternative::= "terminate;".
- conditional_entry_call::= "select" entry_call_statement O(sequence_of_statements) "else" sequence_of_statements "end select;".
9.7.3
- timed_entry_call::= "select" entry_call_statement O(sequence_of_statements) "or" delay_alternative "end select;".
9.10
- abort_statement::= "abort" task_name #("," task_name)";".
10 Compilation Units
10.1
- compilation::= #(compilation_unit).
- compilation_unit::= context_clause library_unit | context_clause secondary_unit.
- library_unit::= subprogram_declaration | $package_declaration | $generic_declaration | generic_instantiation | subprogram_body.
- secondary_unit::= library_unit_body | subunit.
- library_unit_body::= subprogram_body | package_body.
10.1.1
- context_clause::= #(with_clause #(use_clause)).
- with_clause::= "with" unit_simple_name #("," unit_simple_name)";".
10.2
- body_stub::= subprogram_specification "is separate;" | "package body" package_simple_name "is separate;" | "task body" task_simple_name "is separate;".
- subunit::= "separate ("parent_unit_name")" proper_body.
11 Exceptions
11.1
- exception_declaration::= identifier_list ":" "exception;".
11.2
- exception_handler::= "when" exception_choice #(" | " exception_choice) "=>" sequence_of_statements.
- exception_choice::= exception_name | "others".
11.3
- raise_statement::= "raise" O(exception_name)";".
12 Generics
12.1
- generic_declaration::= generic_specification";".
- generic_specification::= generic_formal_part subprogram_specification | generic_formal_part package_specification.
- generic_formal_part::= "generic" #(generic_parameter_declaration).
- generic_parameter_declaration::= identifier_list ":" O("in" O("out" )) type_mark O(":=" expression)";" | "type" identifier "is" generic_type_definition";" | private_type_declaration | "with" subprogram_specification O("is" name)";" | "with" subprogram_specification O("is <>")";".
- generic_type_definition::= "(<>)" | "range <>" | "digits <>" | "delta <>" | array_type_definition | access_type_definition.
- generic_instantiation::= "package" identifier "is" "new" generic_package_name O(generic_actual_part)";" | "procedure" identifier "is" "new" generic_procedure_name O(generic_actual_part)";" | "function" designator "is" "new" generic_function_name O(generic_actual_part)";".
- generic_actual_part::= "("generic_association #("," generic_association)")".
- generic_association::= O(generic_formal_parameter "=>") generic_actual_parameter.
- generic_formal_parameter::= parameter_simple_name | operator_symbol.
- generic_actual_parameter::= expression | variable_name | subprogram_name | entry_name | type_mark.
12.3
- generic_instantiation::= "package" identifier "is" "new" generic_package_name O(generic_actual_part)";" | "procedure" identifier "is" "new" generic_procedure_name O(generic_actual_part)";" | "function" designator "is" "new" generic_function_name O(generic_actual_part)";".
- generic_actual_part::= "("generic_association #("," generic_association)")".
- generic_association::= O(generic_formal_parameter "=>") generic_actual_parameter.
- generic_formal_parameter::= parameter_simple_name | operator_symbol.
- generic_actual_parameter::= expression | variable_name | subprogram_name | entry_name | type_mark.
13 Representation Clauses
13.1
- representation_clause::= type_representation_clause | address_clause.
- type_representation_clause::= length_clause | enumeration_representation_clause | record_representation_clause.
13.2
- length_clause::= "for" attribute "use" simple_expression";".
13.3
- enumeration_representation_clause::= "for" type_simple_name "use" aggregate";".
13.4
- record_representation_clause::= "for" type_simple_name "use" "record" O(alignment_clause) #(component_clause) "end record;".
- alignment_clause::= "at mod" static_simple_expression";".
- component_clause::= component_name "at" static_simple_expression "range" static_range";".
13.5
- address_clause::= "for" simple_name "use at" simple_expression";".
13.8
- code_statement::= type_mark"'"record_aggregate";".
. . . . . . . . . ( end of section Grammar) <<Contents | End>>
With Thanks To
Wed Nov 18 15:21:46 PST 2009 Dr. Christopher Landauer of the Aerospace Integration
Center,
who pointed out 7 distinct typographical errors.