abort_statement abort   task_name  {   ,   task_name  }   ;  
 
abortable_part sequence_of_statements 
 
abstract_subprogram_declaration subprogram_specification  is   abstract   ;  
 
accept_alternative accept_statement  [   sequence_of_statements  ]  
 
accept_statement accept   entry_direct_name  [   (   entry_index  )   ]   parameter_profile  [   do   handled_sequence_of_statements  end   [   entry_identifier  ]   ]   ;  
 
access_definition access   subtype_mark 
 
access_to_object_definition access   [   general_access_modifier  ]   subtype_indication 
 
access_to_subprogram_definition access   [   protected   ]   procedure   parameter_profile 
|  access   [   protected   ]   function   parameter_and_result_profile 
 
access_type_definition access_to_object_definition 
|  access_to_subprogram_definition 
 
actual_parameter_part (   parameter_association  {   ,   parameter_association  }   )  
 
aggregate record_aggregate 
|  extension_aggregate 
|  array_aggregate 
 
allocator new   subtype_indication 
|  new   qualified_expression 
 
ancestor_part expression 
|  subtype_mark 
 
array_aggregate positional_array_aggregate 
|  named_array_aggregate 
 
array_component_association discrete_choice_list  =>   expression 
 
array_type_definition unconstrained_array_definition 
|  constrained_array_definition 
 
assignment_statement variable_name  :=   expression  ;  
 
asynchronous_select select   triggering_alternative  then   abort   abortable_part  end   select   ;  
 
at_clause for   direct_name  use   at   expression  ;  
 
attribute_definition_clause for   local_name  '   attribute_designator  use   expression  ;  
|  for   local_name  '   attribute_designator  use   name  ;  
 
attribute_designator identifier  [   (   static_expression  )   ]  
|  access  
|  delta  
|  digits  
 
attribute_reference prefix  '   attribute_designator 
 
base numeral 
 
based_literal base  #   based_numeral  [   .   based_numeral  ]   #   [   exponent  ]  
 
based_numeral extended_digit  {   [   underline  ]   extended_digit  }  
 
basic_declaration type_declaration 
|  subtype_declaration 
|  object_declaration 
|  number_declaration 
|  subprogram_declaration 
|  abstract_subprogram_declaration 
|  package_declaration 
|  renaming_declaration 
|  exception_declaration 
|  generic_declaration 
|  generic_instantiation 
 
basic_declarative_item basic_declaration 
|  representation_clause 
|  use_clause 
 
binary_adding_operator +  
|  -  
|  &  
 
block_statement [   block_statement_identifier  :   ]   [   declare   declarative_part  ]   begin   handled_sequence_of_statements  end   [   block_identifier  ]   ;  
 
body proper_body 
|  body_stub 
 
body_stub subprogram_body_stub 
|  package_body_stub 
|  task_body_stub 
|  protected_body_stub 
 
case_statement case   expression  is   case_statement_alternative  {   case_statement_alternative  }   end   case   ;  
 
case_statement_alternative when   discrete_choice_list  =>   sequence_of_statements 
 
character graphic_character 
|  format_effector 
|  other_control_function 
 
character_literal '   graphic_character  '  
 
choice_parameter_specification defining_identifier 
 
code_statement qualified_expression  ;  
 
comment --   {   non_end_of_line_character  }  
 
compilation {   compilation_unit  }  
 
compilation_unit context_clause  library_item 
|  context_clause  subunit 
 
component_choice_list component_selector_name  {   |   component_selector_name  }  
|  others  
 
component_clause component_local_name  at   position  range   first_bit  ..   last_bit  ;  
 
component_declaration defining_identifier_list  :   component_definition  [   :=   default_expression  ]   ;  
 
component_definition [   aliased   ]   subtype_indication 
 
component_item component_declaration 
|  representation_clause 
 
component_list component_item  {   component_item  }  
|   {   component_item  }   variant_part 
|  null   ;  
 
composite_constraint index_constraint 
|  discriminant_constraint 
 
compound_statement if_statement 
|  case_statement 
|  loop_statement 
|  block_statement 
|  accept_statement 
|  select_statement 
 
condition boolean_expression 
 
conditional_entry_call select   entry_call_alternative  else   sequence_of_statements  end   select   ;  
 
constrained_array_definition array   (   discrete_subtype_definition  {   ,   discrete_subtype_definition  }   )   of   component_definition 
 
constraint scalar_constraint 
|  composite_constraint 
 
context_clause {   context_item  }  
 
context_item with_clause 
|  use_clause 
 
decimal_fixed_point_definition delta   static_expression  digits   static_expression  [   real_range_specification  ]  
 
decimal_literal numeral  [   .   numeral  ]   [   exponent  ]  
 
declarative_item basic_declarative_item 
|  body 
 
declarative_part {   declarative_item  }  
 
default_expression expression 
 
default_name name 
 
defining_character_literal character_literal 
 
defining_designator defining_program_unit_name 
|  defining_operator_symbol 
 
defining_identifier identifier 
 
defining_identifier_list defining_identifier  {   ,   defining_identifier  }  
 
defining_operator_symbol operator_symbol 
 
defining_program_unit_name [   parent_unit_name  .   ]   defining_identifier 
 
delay_alternative delay_statement  [   sequence_of_statements  ]  
 
delay_relative_statement delay   delay_expression  ;  
 
delay_statement delay_until_statement 
|  delay_relative_statement 
 
delay_until_statement delay   until   delay_expression  ;  
 
delta_constraint delta   static_expression  [   range_constraint  ]  
 
derived_type_definition [   abstract   ]   new   parent_subtype_indication  [   record_extension_part  ]  
 
designator [   parent_unit_name  .   ]   identifier 
|  operator_symbol 
 
digits_constraint digits   static_expression  [   range_constraint  ]  
 
direct_name identifier 
|  operator_symbol 
 
discrete_choice expression 
|  discrete_range 
|  others  
 
discrete_choice_list discrete_choice  {   |   discrete_choice  }  
 
discrete_range discrete_subtype_indication 
|  range 
 
discrete_subtype_definition discrete_subtype_indication 
|  range 
 
discriminant_association [   discriminant_selector_name  {   |   discriminant_selector_name  }   =>   ]   expression 
 
discriminant_constraint (   discriminant_association  {   ,   discriminant_association  }   )  
 
discriminant_part unknown_discriminant_part 
|  known_discriminant_part 
 
discriminant_specification defining_identifier_list  :   subtype_mark  [   :=   default_expression  ]  
|  defining_identifier_list  :   access_definition  [   :=   default_expression  ]  
 
entry_barrier when   condition 
 
entry_body entry   defining_identifier  entry_body_formal_part  entry_barrier  is   declarative_part  begin   handled_sequence_of_statements  end   [   entry_identifier  ]   ;  
 
entry_body_formal_part [   (   entry_index_specification  )   ]   parameter_profile 
 
entry_call_alternative entry_call_statement  [   sequence_of_statements  ]  
 
entry_call_statement entry_name  [   actual_parameter_part  ]   ;  
 
entry_declaration entry   defining_identifier  [   (   discrete_subtype_definition  )   ]   parameter_profile  ;  
 
entry_index expression 
 
entry_index_specification for   defining_identifier  in   discrete_subtype_definition 
 
enumeration_aggregate array_aggregate 
 
enumeration_literal_specification defining_identifier 
|  defining_character_literal 
 
enumeration_representation_clause for   first_subtype_local_name  use   enumeration_aggregate  ;  
 
enumeration_type_definition (   enumeration_literal_specification  {   ,   enumeration_literal_specification  }   )  
 
exception_choice exception_name 
|  others  
 
exception_declaration defining_identifier_list  :   exception   ;  
 
exception_handler when   [   choice_parameter_specification  :   ]   exception_choice  {   |   exception_choice  }   =>   sequence_of_statements 
 
exception_renaming_declaration defining_identifier  :   exception   renames   exception_name  ;  
 
exit_statement exit   [   loop_name  ]   [   when   condition  ]   ;  
 
explicit_actual_parameter expression 
|  variable_name 
 
explicit_dereference name  .   all  
 
explicit_generic_actual_parameter expression 
|  variable_name 
|  subprogram_name 
|  entry_name 
|  subtype_mark 
|  package_instance_name 
 
exponent E   [   +   ]   numeral 
|  E   -   numeral 
 
expression relation  {   and   relation  }  
|  relation  {   and   then   relation  }  
|  relation  {   or   relation  }  
|  relation  {   or   else   relation  }  
|  relation  {   xor   relation  }  
 
extended_digit digit 
|  A  
|  B  
|  C  
|  D  
|  E  
|  F  
 
extension_aggregate (   ancestor_part  with   record_component_association_list  )  
 
factor primary  [   **   primary  ]  
|  abs   primary 
|  not   primary 
 
first_bit static_simple_expression 
 
fixed_point_definition ordinary_fixed_point_definition 
|  decimal_fixed_point_definition 
 
floating_point_definition digits   static_expression  [   real_range_specification  ]  
 
formal_access_type_definition access_type_definition 
 
formal_array_type_definition array_type_definition 
 
formal_decimal_fixed_point_definition delta   <>   digits   <>  
 
formal_derived_type_definition [   abstract   ]   new   subtype_mark  [   with   private   ]  
 
formal_discrete_type_definition (   <>   )  
 
formal_floating_point_definition digits   <>  
 
formal_modular_type_definition mod   <>  
 
formal_object_declaration defining_identifier_list  :   mode  subtype_mark  [   :=   default_expression  ]   ;  
 
formal_ordinary_fixed_point_definition delta   <>  
 
formal_package_actual_part (   <>   )  
|   [   generic_actual_part  ]  
 
formal_package_declaration with   package   defining_identifier  is   new   generic_package_name  formal_package_actual_part  ;  
 
formal_part (   parameter_specification  {   ;   parameter_specification  }   )  
 
formal_private_type_definition [   [   abstract   ]   tagged   ]   [   limited   ]   private  
 
formal_signed_integer_type_definition range   <>  
 
formal_subprogram_declaration with   subprogram_specification  [   is   subprogram_default  ]   ;  
 
formal_type_declaration type   defining_identifier  [   discriminant_part  ]   is   formal_type_definition  ;  
 
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 
 
full_type_declaration type   defining_identifier  [   known_discriminant_part  ]   is   type_definition  ;  
|  task_type_declaration 
|  protected_type_declaration 
 
function_call function_name 
|  function_prefix  actual_parameter_part 
 
general_access_modifier all  
|  constant  
 
generic_actual_part (   generic_association  {   ,   generic_association  }   )  
 
generic_association [   generic_formal_parameter_selector_name  =>   ]   explicit_generic_actual_parameter 
 
generic_declaration generic_subprogram_declaration 
|  generic_package_declaration 
 
generic_formal_parameter_declaration formal_object_declaration 
|  formal_type_declaration 
|  formal_subprogram_declaration 
|  formal_package_declaration 
 
generic_formal_part generic   {   generic_formal_part_item  }  
 
generic_formal_part_item generic_formal_parameter_declaration 
|  use_clause 
 
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  ]   ;  
 
generic_package_declaration generic_formal_part  package_specification  ;  
 
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  ;  
 
generic_subprogram_declaration generic_formal_part  subprogram_specification  ;  
 
goto_statement goto   label_name  ;  
 
graphic_character identifier_letter 
|  digit 
|  space_character 
|  special_character 
 
guard when   condition  =>  
 
handled_sequence_of_statements sequence_of_statements  [   exception   exception_handler  {   exception_handler  }   ]  
 
highest_precedence_operator **  
|  abs  
|  not  
 
identifier identifier_letter  {   [   underline  ]   letter_or_digit  }  
 
if_statement if   condition  then   sequence_of_statements  {   elsif   condition  then   sequence_of_statements  }   [   else   sequence_of_statements  ]   end   if   ;  
 
implicit_dereference name 
 
incomplete_type_declaration type   defining_identifier  [   discriminant_part  ]   ;  
 
index_constraint (   discrete_range  {   ,   discrete_range  }   )  
 
index_subtype_definition subtype_mark  range   <>  
 
indexed_component prefix  (   expression  {   ,   expression  }   )  
 
integer_type_definition signed_integer_type_definition 
|  modular_type_definition 
 
iteration_scheme while   condition 
|  for   loop_parameter_specification 
 
known_discriminant_part (   discriminant_specification  {   ;   discriminant_specification  }   )  
 
label <<   label_statement_identifier  >>  
 
last_bit static_simple_expression 
 
letter_or_digit identifier_letter 
|  digit 
 
library_item [   private   ]   library_unit_declaration 
|  library_unit_body 
|   [   private   ]   library_unit_renaming_declaration 
 
library_unit_body subprogram_body 
|  package_body 
 
library_unit_declaration subprogram_declaration 
|  package_declaration 
|  generic_declaration 
|  generic_instantiation 
 
library_unit_renaming_declaration package_renaming_declaration 
|  generic_renaming_declaration 
|  subprogram_renaming_declaration 
 
local_name direct_name 
|  direct_name  '   attribute_designator 
|  library_unit_name 
 
logical_operator and  
|  or  
|  xor  
 
loop_parameter_specification defining_identifier  in   [   reverse   ]   discrete_subtype_definition 
 
loop_statement [   loop_statement_identifier  :   ]   [   iteration_scheme  ]   loop   sequence_of_statements  end   loop   [   loop_identifier  ]   ;  
 
mod_clause at   mod   static_expression  ;  
 
mode [   in   ]  
|  in   out  
|  out  
 
modular_type_definition mod   static_expression 
 
multiplying_operator *  
|  /  
|  mod  
|  rem  
 
name direct_name 
|  explicit_dereference 
|  indexed_component 
|  slice 
|  selected_component 
|  attribute_reference 
|  type_conversion 
|  function_call 
|  character_literal 
 
named_array_aggregate (   array_component_association  {   ,   array_component_association  }   )  
 
null_statement null   ;  
 
number_declaration defining_identifier_list  :   constant   :=   static_expression  ;  
 
numeral digit  {   [   underline  ]   digit  }  
 
numeric_literal decimal_literal 
|  based_literal 
 
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 
 
object_renaming_declaration defining_identifier  :   subtype_mark  renames   object_name  ;  
 
operator_symbol string_literal 
 
ordinary_fixed_point_definition delta   static_expression  real_range_specification 
 
package_body package   body   defining_program_unit_name  is   declarative_part  [   begin   handled_sequence_of_statements  ]   end   [   [   parent_unit_name  .   ]   identifier  ]   ;  
 
package_body_stub package   body   defining_identifier  is   separate   ;  
 
package_declaration package_specification  ;  
 
package_renaming_declaration package   defining_program_unit_name  renames   package_name  ;  
 
package_specification package   defining_program_unit_name  is   {   basic_declarative_item  }   [   private   {   basic_declarative_item  }   ]   end   [   [   parent_unit_name  .   ]   identifier  ]  
 
parameter_and_result_profile [   formal_part  ]   return   subtype_mark 
 
parameter_association [   formal_parameter_selector_name  =>   ]   explicit_actual_parameter 
 
parameter_profile [   formal_part  ]  
 
parameter_specification defining_identifier_list  :   mode  subtype_mark  [   :=   default_expression  ]  
|  defining_identifier_list  :   access_definition  [   :=   default_expression  ]  
 
parent_unit_name name 
 
position static_expression 
 
positional_array_aggregate (   expression  ,   expression  {   ,   expression  }   )  
|  (   expression  {   ,   expression  }   ,   others   =>   expression  )  
 
pragma pragma   identifier  [   (   pragma_argument_association  {   ,   pragma_argument_association  }   )   ]   ;  
 
pragma_argument_association [   pragma_argument_identifier  =>   ]   name 
|   [   pragma_argument_identifier  =>   ]   expression 
 
prefix name 
|  implicit_dereference 
 
primary numeric_literal 
|  null  
|  string_literal 
|  aggregate 
|  name 
|  qualified_expression 
|  allocator 
|  (   expression  )  
 
private_extension_declaration type   defining_identifier  [   discriminant_part  ]   is   [   abstract   ]   new   ancestor_subtype_indication  with   private   ;  
 
private_type_declaration type   defining_identifier  [   discriminant_part  ]   is   [   [   abstract   ]   tagged   ]   [   limited   ]   private   ;  
 
procedure_call_statement procedure_name  ;  
|  procedure_prefix  actual_parameter_part  ;  
 
proper_body subprogram_body 
|  package_body 
|  task_body 
|  protected_body 
 
protected_body protected   body   defining_identifier  is   {   protected_operation_item  }   end   [   protected_identifier  ]   ;  
 
protected_body_stub protected   body   defining_identifier  is   separate   ;  
 
protected_definition {   protected_operation_declaration  }   [   private   {   protected_element_declaration  }   ]   end   [   protected_identifier  ]  
 
protected_element_declaration protected_operation_declaration 
|  component_declaration 
 
protected_operation_declaration subprogram_declaration 
|  entry_declaration 
|  representation_clause 
 
protected_operation_item subprogram_declaration 
|  subprogram_body 
|  entry_body 
|  representation_clause 
 
protected_type_declaration protected   type   defining_identifier  [   known_discriminant_part  ]   is   protected_definition  ;  
 
qualified_expression subtype_mark  '   (   expression  )  
|  subtype_mark  '   aggregate 
 
raise_statement raise   [   exception_name  ]   ;  
 
range range_attribute_reference 
|  simple_expression  ..   simple_expression 
 
range_attribute_designator range   [   (   static_expression  )   ]  
 
range_attribute_reference prefix  '   range_attribute_designator 
 
range_constraint range   range 
 
real_range_specification range   static_simple_expression  ..   static_simple_expression 
 
real_type_definition floating_point_definition 
|  fixed_point_definition 
 
record_aggregate (   record_component_association_list  )  
 
record_component_association [   component_choice_list  =>   ]   expression 
 
record_component_association_list record_component_association  {   ,   record_component_association  }  
|  null   record  
 
record_definition record   component_list  end   record  
|  null   record  
 
record_extension_part with   record_definition 
 
record_representation_clause for   first_subtype_local_name  use   record   [   mod_clause  ]   {   component_clause  }   end   record   ;  
 
record_type_definition [   [   abstract   ]   tagged   ]   [   limited   ]   record_definition 
 
relation simple_expression  [   relational_operator  simple_expression  ]  
|  simple_expression  [   not   ]   in   range 
|  simple_expression  [   not   ]   in   subtype_mark 
 
relational_operator =  
|  /=  
|  <  
|  <=  
|  >  
|  >=  
 
renaming_declaration object_renaming_declaration 
|  exception_renaming_declaration 
|  package_renaming_declaration 
|  subprogram_renaming_declaration 
|  generic_renaming_declaration 
 
representation_clause attribute_definition_clause 
|  enumeration_representation_clause 
|  record_representation_clause 
|  at_clause 
 
requeue_statement requeue   entry_name  [   with   abort   ]   ;  
 
restriction restriction_identifier 
|  restriction_parameter_identifier  =>   expression 
 
return_statement return   [   expression  ]   ;  
 
scalar_constraint range_constraint 
|  digits_constraint 
|  delta_constraint 
 
select_alternative accept_alternative 
|  delay_alternative 
|  terminate_alternative 
 
select_statement selective_accept 
|  timed_entry_call 
|  conditional_entry_call 
|  asynchronous_select 
 
selected_component prefix  .   selector_name 
 
selective_accept select   [   guard  ]   select_alternative  {   or   [   guard  ]   select_alternative  }   [   else   sequence_of_statements  ]   end   select   ;  
 
selector_name identifier 
|  character_literal 
|  operator_symbol 
 
sequence_of_statements statement  {   statement  }  
 
signed_integer_type_definition range   static_simple_expression  ..   static_simple_expression 
 
simple_expression [   unary_adding_operator  ]   term  {   binary_adding_operator  term  }  
 
simple_statement null_statement 
|  assignment_statement 
|  exit_statement 
|  goto_statement 
|  procedure_call_statement 
|  return_statement 
|  entry_call_statement 
|  requeue_statement 
|  delay_statement 
|  abort_statement 
|  raise_statement 
|  code_statement 
 
single_protected_declaration protected   defining_identifier  is   protected_definition  ;  
 
single_task_declaration task   defining_identifier  [   is   task_definition  ]   ;  
 
slice prefix  (   discrete_range  )  
 
statement {   label  }   simple_statement 
|   {   label  }   compound_statement 
 
statement_identifier direct_name 
 
string_element ""  
|  non_quotation_mark_graphic_character 
 
string_literal "   {   string_element  }   "  
 
subprogram_body subprogram_specification  is   declarative_part  begin   handled_sequence_of_statements  end   [   designator  ]   ;  
 
subprogram_body_stub subprogram_specification  is   separate   ;  
 
subprogram_declaration subprogram_specification  ;  
 
subprogram_default default_name 
|  <>  
 
subprogram_renaming_declaration subprogram_specification  renames   callable_entity_name  ;  
 
subprogram_specification procedure   defining_program_unit_name  parameter_profile 
|  function   defining_designator  parameter_and_result_profile 
 
subtype_declaration subtype   defining_identifier  is   subtype_indication  ;  
 
subtype_indication subtype_mark  [   constraint  ]  
 
subtype_mark subtype_name 
 
subunit separate   (   parent_unit_name  )   proper_body 
 
task_body task   body   defining_identifier  is   declarative_part  begin   handled_sequence_of_statements  end   [   task_identifier  ]   ;  
 
task_body_stub task   body   defining_identifier  is   separate   ;  
 
task_definition {   task_item  }   [   private   {   task_item  }   ]   end   [   task_identifier  ]  
 
task_item entry_declaration 
|  representation_clause 
 
task_type_declaration task   type   defining_identifier  [   known_discriminant_part  ]   [   is   task_definition  ]   ;  
 
term factor  {   multiplying_operator  factor  }  
 
terminate_alternative terminate   ;  
 
timed_entry_call select   entry_call_alternative  or   delay_alternative  end   select   ;  
 
triggering_alternative triggering_statement  [   sequence_of_statements  ]  
 
triggering_statement entry_call_statement 
|  delay_statement 
 
type_conversion subtype_mark  (   expression  )  
|  subtype_mark  (   name  )  
 
type_declaration full_type_declaration 
|  incomplete_type_declaration 
|  private_type_declaration 
|  private_extension_declaration 
 
type_definition enumeration_type_definition 
|  integer_type_definition 
|  real_type_definition 
|  array_type_definition 
|  record_type_definition 
|  access_type_definition 
|  derived_type_definition 
 
unary_adding_operator +  
|  -  
 
unconstrained_array_definition array   (   index_subtype_definition  {   ,   index_subtype_definition  }   )   of   component_definition 
 
unknown_discriminant_part (   <>   )  
 
use_clause use_package_clause 
|  use_type_clause 
 
use_package_clause use   package_name  {   ,   package_name  }   ;  
 
use_type_clause use   type   subtype_mark  {   ,   subtype_mark  }   ;  
 
variant when   discrete_choice_list  =>   component_list 
 
variant_part case   discriminant_direct_name  is   variant  {   variant  }   end   case   ;  
 
with_clause with   library_unit_name  {   ,   library_unit_name  }   ;