aggregate record_aggregate 
|  extension_aggregate 
|  array_aggregate 
 
allocator new   name 
|  new   subtype_indication 
|  new   qualified_expression 
 
ancestor_part expression 
|  subtype_mark 
 
asynchronous_select select   {   pragma  }   select_alternative  then   abort   abortable_part  end   select   ;  
|  select   triggering_alternative  then   abort   abortable_part  end   select   ;  
 
attribute_definition_clause for   local_name  use   [   at   ]   expression  ;  
|  for   local_name  '   attribute_designator  use   expression  ;  
|  for   local_name  '   attribute_designator  use   name  ;  
 
attribute_designator identifier 
|  identifier  [   (   static_expression  )   ]  
|  access  
|  delta  
|  digits  
 
case_statement case   expression  is   {   pragma  }   case_statement_alternative  {   case_statement_alternative  }   end   case   ;  
|  case   expression  is   case_statement_alternative  {   case_statement_alternative  }   end   case   ;  
 
compilation_unit context_clause  library_item 
|  context_clause  subunit 
|  pragma 
|  library_item 
|  subunit 
 
component_clause component_local_name  at   position  range   first_bit  ..   last_bit  ;  
|  pragma 
|  mod_clause 
 
component_list {   component_item  }   [   variant_part_pragma_list  ]  
|  component_item  {   component_item  }  
|   {   component_item  }   variant_part 
|  null   ;   {   pragma  }  
|  null   ;  
 
compound_name identifier  {   .   identifier  }  
 
context_clause {   context_item  }  
|  context_item  {   context_item_or_pragma  }  
 
context_item_or_pragma context_item 
|  pragma 
 
defining_operator_symbol string_literal 
|  operator_symbol 
 
defining_program_unit_name compound_name 
|   [   parent_unit_name  .   ]   defining_identifier 
 
designator compound_name 
|   [   parent_unit_name  .   ]   identifier 
|  operator_symbol 
 
discrete_range name  range_constraint 
|  discrete_subtype_indication 
|  range_attribute_reference 
|  simple_expression  ..   simple_expression 
|  range 
 
discrete_subtype_definition discrete_subtype_indication 
|  range_attribute_reference 
|  simple_expression  ..   simple_expression 
|  range 
 
entry_call_statement entry_name  ;  
|  entry_name  [   actual_parameter_part  ]   ;  
 
exception_renaming_declaration defining_identifier_list  :   exception   renames   exception_name  ;  
|  defining_identifier  :   exception   renames   exception_name  ;  
 
explicit_dereference prefix  .   all  
|  name  .   all  
 
explicit_generic_actual_parameter expression 
|  variable_name 
|  subprogram_name 
|  entry_name 
|  subtype_mark 
|  package_instance_name 
 
expression relation 
|  relation  and   relation  {   and   relation  }  
|  relation  and   then   relation  {   and   then   relation  }  
|  relation  or   relation  {   or   relation  }  
|  relation  or   else   relation  {   or   else   relation  }  
|  relation  xor   relation  {   xor   relation  }  
 
formal_package_declaration with   package   defining_identifier  is   new   generic_package_compound_name  formal_package_actual_part  ;  
|  with   package   defining_identifier  is   new   generic_package_name  formal_package_actual_part  ;  
 
full_type_declaration type   defining_identifier  [   discriminant_part  ]   is   type_definition  ;  
|  type   defining_identifier  [   known_discriminant_part  ]   is   type_definition  ;  
|  task_type_declaration 
|  protected_type_declaration 
 
function_call function_name 
|  function_prefix  record_aggregate 
|  function_prefix  actual_parameter_part 
 
generic_formal_part_item generic_formal_parameter_declaration 
|  use_clause 
|  pragma 
 
generic_instantiation package   defining_program_unit_name  is   new   generic_package_compound_name  [   generic_actual_part  ]   ;  
|  package   defining_program_unit_name  is   new   generic_package_name  [   generic_actual_part  ]   ;  
|  subprogram_specification  is   new   compound_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_renaming_declaration generic_formal_part  package   defining_program_unit_name  renames   generic_package_name  ;  
|  generic   package   defining_program_unit_name  renames   generic_package_name  ;  
|  generic_formal_part  subprogram_specification  renames   name  ;  
|  generic   procedure   defining_program_unit_name  renames   generic_procedure_name  ;  
|  generic   function   defining_program_unit_name  renames   generic_function_name  ;  
 
handled_sequence_of_statements sequence_of_statements  [   exception   {   pragma  }   exception_handler  {   exception_handler  }   ]  
 
local_name compound_name 
|  direct_name  '   attribute_designator 
|  local_name  '   attribute_designator 
|  library_unit_name 
 
name direct_name 
|  explicit_dereference 
|  indexed_component 
|  slice 
|  selected_component 
|  attribute_reference 
|  type_conversion 
|  function_call 
|  character_literal 
 
object_renaming_declaration defining_identifier_list  :   subtype_mark  renames   object_name  ;  
|  defining_identifier  :   subtype_mark  renames   object_name  ;  
 
package_body package   body   defining_program_unit_name  is   declarative_part  [   begin   handled_sequence_of_statements  ]   end   [   compound_name  ]   ;  
|  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_program_unit_name  is   separate   ;  
|  package   body   defining_identifier  is   separate   ;  
 
package_specification package   defining_program_unit_name  is   {   basic_declarative_item  }   [   private   {   basic_declarative_item  }   ]   end   [   compound_name  ]  
|  package   defining_program_unit_name  is   {   basic_declarative_item  }   [   private   {   basic_declarative_item  }   ]   end   [   [   parent_unit_name  .   ]   identifier  ]  
 
pragma_argument_association [   pragma_argument_identifier  =>   ]   name 
|   [   pragma_argument_identifier  =>   ]   expression 
 
prefix name 
|  implicit_dereference 
 
primary integer_literal 
|  real_literal 
|  numeric_literal 
|  null  
|  string_literal 
|  aggregate 
|  name 
|  qualified_expression 
|  allocator 
|  (   expression  )  
 
qualified_expression prefix  '   aggregate 
|  subtype_mark  '   (   expression  )  
|  subtype_mark  '   aggregate 
 
record_component_association [   discrete_choice_list  =>   ]   expression 
|  discrete_range 
|   [   component_choice_list  =>   ]   expression 
 
record_representation_clause for   first_subtype_local_name  use   record   [   mod_clause  ]   {   component_clause  }   end   record   ;  
|  for   first_subtype_local_name  use   record   {   component_clause  }   end   record   ;  
 
relation simple_expression  [   relational_operator  simple_expression  ]  
|  simple_expression  [   not   ]   in   range 
|  simple_expression  [   not   ]   in   subtype_mark 
|  simple_expression  [   not   ]   in   simple_expression 
 
representation_clause attribute_definition_clause 
|  enumeration_representation_clause 
|  record_representation_clause 
|  at_clause 
|  pragma 
 
select_alternative accept_alternative 
|  delay_alternative 
|  terminate_alternative 
|  entry_call_alternative 
 
select_statement selective_accept 
|  timed_entry_call 
|  conditional_entry_call 
|  asynchronous_select 
 
selective_accept select   [   guard  ]   select_alternative  {   or   [   guard  ]   select_alternative  }   [   else   sequence_of_statements  ]   end   select   ;  
|  select   [   guard  ]   {   pragma  }   select_alternative  {   or   [   guard  ]   {   pragma  }   select_alternative  }   [   else   sequence_of_statements  ]   end   select   ;  
 
signed_integer_type_definition range_constraint 
|  range   static_simple_expression  ..   static_simple_expression 
 
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 
|  pragma 
 
statement_identifier defining_identifier 
|  direct_name 
 
subprogram_specification procedure   defining_program_unit_name  parameter_profile 
|  function   defining_designator  parameter_and_result_profile 
|  function   defining_designator 
 
subtype_indication subtype_mark  [   scalar_constraint  ]  
|  subtype_mark  [   constraint  ]  
 
subunit separate   (   compound_name  )   proper_body 
|  separate   (   parent_unit_name  )   proper_body 
 
terminate_alternative terminate   ;  
|  terminate   ;   {   pragma  }  
 
variant_part case   discriminant_direct_name  is   variant  {   variant  }   end   case   ;  
|  case   discriminant_direct_name  is   {   pragma  }   variant  {   variant  }   end   case   ;  
 
variant_part_pragma_list variant_part  {   pragma  }