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 
 
allocator new   name 
|  new   qualified_expression 
 
ancestor_part expression 
 
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   {   pragma  }   select_alternative  then   abort   abortable_part  end   select   ;  
 
at_clause for   direct_name  use   at   expression  ;  
 
attribute_definition_clause for   local_name  use   [   at   ]   expression  ;  
 
attribute_designator identifier 
|  access  
|  delta  
|  digits  
 
attribute_reference prefix  '   attribute_designator 
 
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   {   pragma  }   case_statement_alternative  {   case_statement_alternative  }   end   case   ;  
 
case_statement_alternative when   discrete_choice_list  =>   sequence_of_statements 
 
choice_parameter_specification defining_identifier 
 
code_statement qualified_expression  ;  
 
compilation {   compilation_unit  }  
 
compilation_unit context_clause  library_item 
|  context_clause  subunit 
|  pragma 
|  library_item 
|  subunit 
 
component_choice_list component_selector_name  {   |   component_selector_name  }  
|  others  
 
component_clause component_local_name  at   position  range   first_bit  ..   last_bit  ;  
|  pragma 
|  mod_clause 
 
component_declaration defining_identifier_list  :   component_definition  [   :=   default_expression  ]   ;  
 
component_definition [   aliased   ]   subtype_indication 
 
component_item component_declaration 
|  representation_clause 
 
component_list {   component_item  }   [   variant_part_pragma_list  ]  
|  null   ;   {   pragma  }  
 
composite_constraint index_constraint 
|  discriminant_constraint 
 
compound_name identifier  {   .   identifier  }  
 
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_or_pragma  }  
 
context_item with_clause 
|  use_clause 
 
context_item_or_pragma context_item 
|  pragma 
 
decimal_fixed_point_definition delta   static_expression  digits   static_expression  [   real_range_specification  ]  
 
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 string_literal 
 
defining_program_unit_name compound_name 
 
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 compound_name 
|  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 name  range_constraint 
|  range_attribute_reference 
|  simple_expression  ..   simple_expression 
 
discrete_subtype_definition discrete_subtype_indication 
|  range_attribute_reference 
|  simple_expression  ..   simple_expression 
 
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  ;  
 
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_list  :   exception   renames   exception_name  ;  
 
exit_statement exit   [   loop_name  ]   [   when   condition  ]   ;  
 
explicit_actual_parameter expression 
|  variable_name 
 
explicit_dereference prefix  .   all  
 
explicit_generic_actual_parameter expression 
 
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  }  
 
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_compound_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  [   discriminant_part  ]   is   type_definition  ;  
|  task_type_declaration 
|  protected_type_declaration 
 
function_call function_prefix  record_aggregate 
 
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 
|  pragma 
 
generic_instantiation package   defining_program_unit_name  is   new   generic_package_compound_name  [   generic_actual_part  ]   ;  
|  subprogram_specification  is   new   compound_name  [   generic_actual_part  ]   ;  
 
generic_package_declaration generic_formal_part  package_specification  ;  
 
generic_renaming_declaration generic_formal_part  package   defining_program_unit_name  renames   generic_package_name  ;  
|  generic_formal_part  subprogram_specification  renames   name  ;  
 
generic_subprogram_declaration generic_formal_part  subprogram_specification  ;  
 
goto_statement goto   label_name  ;  
 
guard when   condition  =>  
 
handled_sequence_of_statements sequence_of_statements  [   exception   {   pragma  }   exception_handler  {   exception_handler  }   ]  
 
highest_precedence_operator **  
|  abs  
|  not  
 
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 
 
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 compound_name 
|  local_name  '   attribute_designator 
 
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 
|  selected_component 
|  attribute_reference 
|  function_call 
|  character_literal 
 
named_array_aggregate (   array_component_association  {   ,   array_component_association  }   )  
 
null_statement null   ;  
 
number_declaration defining_identifier_list  :   constant   :=   static_expression  ;  
 
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_list  :   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   [   compound_name  ]   ;  
 
package_body_stub package   body   defining_program_unit_name  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   [   compound_name  ]  
 
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  =>   ]   expression 
 
prefix name 
 
primary integer_literal 
|  real_literal 
|  null  
|  aggregate 
|  name 
|  qualified_expression 
|  allocator 
 
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 prefix  '   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 [   discrete_choice_list  =>   ]   expression 
|  discrete_range 
 
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   {   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   simple_expression 
 
relational_operator =  
|  /=  
|  <  
|  <=  
|  >  
|  >=  
 
renaming_declaration object_renaming_declaration 
|  exception_renaming_declaration 
|  package_renaming_declaration 
|  subprogram_renaming_declaration 
|  generic_renaming_declaration 
 
representation_clause attribute_definition_clause 
|  record_representation_clause 
|  pragma 
 
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 
|  entry_call_alternative 
 
select_statement selective_accept 
|  asynchronous_select 
 
selected_component prefix  .   selector_name 
 
selective_accept select   [   guard  ]   {   pragma  }   select_alternative  {   or   [   guard  ]   {   pragma  }   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_constraint 
 
simple_expression [   unary_adding_operator  ]   term  {   binary_adding_operator  term  }  
 
simple_statement null_statement 
|  assignment_statement 
|  exit_statement 
|  goto_statement 
|  return_statement 
|  entry_call_statement 
|  requeue_statement 
|  delay_statement 
|  abort_statement 
|  raise_statement 
|  code_statement 
|  pragma 
 
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 defining_identifier 
 
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 
|  function   defining_designator 
 
subtype_declaration subtype   defining_identifier  is   subtype_indication  ;  
 
subtype_indication subtype_mark  [   scalar_constraint  ]  
 
subtype_mark subtype_name 
 
subunit separate   (   compound_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   ;   {   pragma  }  
 
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   {   pragma  }   variant  {   variant  }   end   case   ;  
 
variant_part_pragma_list variant_part  {   pragma  }  
 
with_clause with   library_unit_name  {   ,   library_unit_name  }   ;