«…лишь недалекие люди боятся конкуренции, а люди подлинного творчества ценят общение с каждым талантом…» А. Бек, Талант.

Синтаксис языка VHDL-2008

Материал из Wiki
Перейти к: навигация, поиск
Annex C (informative)

Syntax summary

This annex provides a summary of the syntax for VHDL. Productions are ordered alphabetically by lefthand nonterminal name. The number listed to the right indicates the clause or subclause where the production is given.

A B C D E F G I L M N O P Q R S T U V W


A

absolute_pathname ::= . partial_pathname8.7]


abstract_literal ::= decimal_literal | based_literal15.5.1]


access_type_definition ::= access subtype_indication5.4.1]


actual_designator ::=      [§ 6.5.7.1]
  [ inertial ] expression
  | signal_name
  | variable_name
  | file_name
  | subtype_indication
  | subprogram_name
  | instantiated_package_name
  | open


actual_parameter_part ::= parameter_association_list      [§ 9.3.4]


actual_part ::=      [§ 6.5.7.1]
  actual_designator
  | function_name ( actual_designator )
  | type_mark ( actual_designator )


adding_operator ::= + | – | &      [§ 9.2]


aggregate ::=      [§ 9.3.3.1]
  ( element_association { , element_association } )


alias_declaration ::=      [§ 6.6.1]
  alias alias_designator [ : subtype_indication ] is name [ signature ] ;


alias_designator ::= identifier | character_literal | operator_symbol6.6.1]


allocator ::=      [§ 9.3.7]
  new subtype_indication
  | new qualified_expression


architecture_body ::=      [§ 3.3.1]
  architecture identifier of entity_name is
  architecture_declarative_part
  begin
  architecture_statement_part
  end [ architecture ] [ architecture_simple_name ] ;


architecture_declarative_part ::=      [§ 3.3.2]
  { block_declarative_item }


architecture_statement_part ::=      [§ 3.3.3]
  { concurrent_statement }


array_constraint ::=      [§ 5.3.2.1]
  index_constraint [ array_element_constraint ]
  | ( open ) [ array_element_constraint ]


array_element_constraint ::= element_constraint5.3.2.1]


array_element_resolution ::= resolution_indication6.3]


array_type_definition ::=      [§ 5.3.2.1]
  unbounded_array_definition | constrained_array_definition


assertion ::=      [§ 10.3]
  assert condition
  [ report expression ]
  [ severity expression ]


assertion_statement ::= [ label : ] assertion ;      [§ 10.3]


association_element ::=      [§ 6.5.7.1]
  [ formal_part => ] actual_part


association_list ::=      [§ 6.5.7.1]
  association_element { , association_element }


attribute_declaration ::=      [§ 6.7]
  attribute identifier : type_mark ;


attribute_designator ::= attribute_simple_name      [§ 8.6]


attribute_name ::=      [§ 8.6]
  prefix [ signature ] ' attribute_designator [ ( expression ) ]


attribute_specification ::=      [§ 7.2]
  attribute attribute_designator of entity_specification is expression ;


B

base ::= integer15.5.3]


base_specifier ::= B | O | X | UB | UO | UX | SB | SO | SX | D      [§ 15.8]


based_integer ::=      [§ 15.5.3]
  extended_digit { [ underline ] extended_digit }


based_literal ::=      [§ 15.5.3]
  base # based_integer [ . based_integer ] # [ exponent ]


basic_character ::=      [§ 15.2]
  basic_graphic_character | format_effector


basic_graphic_character ::=      [§ 15.2]
  upper_case_letter | digit | special_character| space_character


basic_identifier ::= letter { [ underline ] letter_or_digit }      [§ 15.4.2]


binding_indication ::=      [§ 7.3.2.1]
  [ use entity_aspect ]
  [ generic_map_aspect ]
  [ port_map_aspect ]


bit_string_literal ::= [ integer ] base_specifier " [ bit_value ] "      [§ 15.8]


bit_value ::= graphic_character { [ underline ] graphic_character }      [§ 15.8]


block_configuration ::=      [§ 3.4.2]
  for block_specification
  { use_clause }
  { configuration_item }
  end for ;


block_declarative_item ::=      [§ 3.3.2]
  subprogram_declaration
  | subprogram_body
  | subprogram_instantiation_declaration
  | package_declaration
  | package_body
  | package_instantiation_declaration
  | type_declaration
  | subtype_declaration
  | constant_declaration
  | signal_declaration
  | shared_variable_declaration
  | file_declaration
  | alias_declaration
  | component_declaration
  | attribute_declaration
  | attribute_specification
  | configuration_specification
  | disconnection_specification
  | use_clause
  | group_template_declaration
  | group_declaration
  | PSL_Property_Declaration
  | PSL_Sequence_Declaration
  | PSL_Clock_Declaration


block_declarative_part ::=      [§ 11.2]
  { block_declarative_item }


block_header ::=      [§ 11.2]
  [ generic_clause
  [ generic_map_aspect ; ] ]
  [ port_clause
  [ port_map_aspect ; ] ]


block_specification ::=      [§ 3.4.2]
  architecture_name
  | block_statement_label
  | generate_statement_label [ ( generate_specification ) ]


block_statement ::=      [§ 11.2]
  block_label :
  block [ ( guard_condition ) ] [ is ]
  block_header
  block_declarative_part
  begin
  block_statement_part
  end block [ block_label ] ;


block_statement_part ::=      [§ 11.2]
  { concurrent_statement }


C

case_generate_alternative ::=      [§ 11.8]
  when [ alternative_label : ] choices =>
  generate_statement_body


case_generate_statement ::=      [§ 11.8]
  generate_label :
  case expression generate
  case_generate_alternative
  { case_generate_alternative }
  end generate [ generate_label ] ;


case_statement ::=      [§ 10.9]
  [ case_label : ]
  case [ ? ] expression is
  case_statement_alternative
  { case_statement_alternative }
  end case [ ? ] [ case_label ] ;


case_statement_alternative ::=      [§ 10.9]
  when choices =>
  sequence_of_statements


character_literal ::= ' graphic_character '      [§ 15.6]


choice ::=      [§ 9.3.3.1]
  simple_expression
  | discrete_range
  | element_simple_name
  | others


choices ::= choice { | choice }      [§ 9.3.3.1]


component_configuration ::=      [§ 3.4.3]
  for component_specification
  [ binding_indication ; ]
  { verification_unit_binding_indication ; }
  [ block_configuration ]
  end for ;


component_declaration ::=      [§ 6.8]
  component identifier [ is ]
  [ local_generic_clause ]
  [ local_port_clause ]
  end component [ component_simple_name ] ;


component_instantiation_statement ::=      [§ 11.7.1]
  instantiation_label :
  instantiated_unit
  [ generic_map_aspect ]
  [ port_map_aspect ] ;


component_specification ::=      [§ 7.3.1]
  instantiation_list : component_name


composite_type_definition ::=      [§ 5.3.1]
  array_type_definition
  | record_type_definition


compound_configuration_specification ::=      [§ 7.3.1]
  for component_specification binding_indication ;
  verification_unit_binding_indication ;
  { verification_unit_binding_indication ; }
  end for ;


concurrent_assertion_statement ::=      [§ 11.5]
  [ label : ] [ postponed ] assertion ;


concurrent_conditional_signal_assignment ::=      [§ 11.6]
  target <= [ guarded ] [ delay_mechanism ] conditional_waveforms ;


concurrent_procedure_call_statement ::=      [§ 11.4]
  [ label : ] [ postponed ] procedure_call ;


concurrent_selected_signal_assignment ::=      [§ 11.6]
  with expression select [ ? ]
  target <= [ guarded ] [ delay_mechanism ] selected_waveforms ;


concurrent_signal_assignment_statement ::=      [§ 11.6]
  [ label : ] [ postponed ] concurrent_simple_signal_assignment
  | [ label : ] [ postponed ] concurrent_conditional_signal_assignment
  | [ label : ] [ postponed ] concurrent_selected_signal_assignment


concurrent_simple_signal_assignment ::=      [§ 11.6]
  target <= [ guarded ] [ delay_mechanism ] waveform ;


concurrent_statement ::=      [§ 11.1]
  block_statement
  | process_statement
  | concurrent_procedure_call_statement
  | concurrent_assertion_statement
  | concurrent_signal_assignment_statement
  | component_instantiation_statement
  | generate_statement
  | PSL_PSL_Directive


condition ::= expression10.2]


condition_clause ::= until condition10.2]


condition_operator ::= ??      [§ 9.2.1]


conditional_expressions ::=      [§ 10.5.3]
  expression when condition
  { else expression when condition }
  [ else expression ]


conditional_force_assignment ::=      [§ 10.5.3]
  target <= force [ force_mode ] conditional_expressions ;


conditional_signal_assignment ::=      [§ 10.5.3]
  conditional_waveform_assignment
  | conditional_force_assignment


conditional_variable_assignment ::=      [§ 10.6.3]
  target := conditional_expressions ;


conditional_waveform_assignment ::=      [§ 10.5.3]
  target <= [ delay_mechanism ] conditional_waveforms ;


conditional_waveforms ::=      [§ 10.5.3]
  waveform when condition
  { else waveform when condition }
  [ else waveform ]


configuration_declaration ::=      [§ 3.4.1]
  configuration identifier of entity_name is
  configuration_declarative_part
  { verification_unit_binding_indication ; }
  block_configuration
  end [ configuration ] [ configuration_simple_name ] ;


configuration_declarative_item ::=      [§ 3.4.1]
  use_clause
  | attribute_specification
  | group_declaration


configuration_declarative_part ::=      [§ 3.4.1]
  { configuration_declarative_item }


configuration_item ::=      [§ 3.4.2]
  block_configuration
  | component_configuration


configuration_specification ::=      [§ 7.3.1]
  simple_configuration_specification
  | compound_configuration_specification


constant_declaration ::=      [§ 6.4.2.2]
  constant identifier_list : subtype_indication [ := expression ] ;


constrained_array_definition ::=      [§ 5.3.2.1]
  array index_constraint of element_subtype_indication


constraint ::=      [§ 6.3]
  range_constraint
  | array_constraint
  | record_constraint


context_clause ::= { context_item }      [§ 13.4]


context_declaration ::=      [§ 13.3]
  context identifier is
  context_clause
  end [ context ] [ context_simple_name ] ;


context_item ::=      [§ 13.4]
  library_clause
  | use_clause
  | context_reference


context_reference ::=      [§ 13.4]
  context selected_name { , selected_name } ;


D

decimal_literal ::= integer [ . integer ] [ exponent ]      [§ 15.5.2]


delay_mechanism ::=      [§ 10.5.2.1]
  transport
  | [ reject time_expression ] inertial


design_file ::= design_unit { design_unit }      [§ 13.1]


design_unit ::= context_clause library_unit13.1]


designator ::= identifier | operator_symbol4.2.1]


direction ::= to | downto5.2.1]


disconnection_specification ::=      [§ 7.4]
  disconnect guarded_signal_specification after time_expression ;


discrete_range ::= discrete_subtype_indication | range5.3.2.1]


E

element_association ::=      [§ 9.3.3.1]
  [ choices => ] expression


element_constraint ::=      [§ 6.3]
  array_constraint
  | record_constraint


element_declaration ::=      [§ 5.3.3]
  identifier_list : element_subtype_definition ;


element_resolution ::= array_element_resolution | record_resolution6.3]


element_subtype_definition ::= subtype_indication5.3.3]


entity_aspect ::=      [§ 7.3.2.2]
  entity entity_name [ ( architecture_identifier ) ]
  | configuration configuration_name
  | open


entity_class ::=      [§ 7.2]
  entity
  | architecture
  | configuration
  | procedure
  | function
  | package
  | type
  | subtype
  | constant
  | signal
  | variable
  | component
  | label
  | literal
  | units
  | group
  | file
  | property
  | sequence


entity_class_entry ::= entity_class [ <> ]      [§ 6.9]


entity_class_entry_list ::=      [§ 6.9]
  entity_class_entry { , entity_class_entry }


entity_declaration ::=      [§ 3.2.1]
  entity identifier is
  entity_header
  entity_declarative_part
  [ begin
  entity_statement_part ]
  end [ entity ] [ entity_simple_name ] ;


entity_declarative_item ::=      [§ 3.2.3]
  subprogram_declaration
  | subprogram_body
  | subprogram_instantiation_declaration
  | package_declaration
  | package_body
  | package_instantiation_declaration
  | type_declaration
  | subtype_declaration
  | constant_declaration
  | signal_declaration
  | shared_variable_declaration
  | file_declaration
  | alias_declaration
  | attribute_declaration
  | attribute_specification
  | disconnection_specification
  | use_clause
  | group_template_declaration
  | group_declaration
  | PSL_Property_Declaration
  | PSL_Sequence_Declaration
  | PSL_Clock_Declaration


entity_declarative_part ::=      [§ 3.2.3]
  { entity_declarative_item }


entity_designator ::= entity_tag [ signature ]      [§ 7.2]


entity_header ::=      [§ 3.2.3]
  [ formal_generic_clause ]
  [ formal_port_clause ]


entity_name_list ::=      [§ 7.2]
  entity_designator { , entity_designator }
  | others
  | all


entity_specification ::=      [§ 7.2]
  entity_name_list : entity_class


entity_statement ::=      [§ 3.2.4]
  concurrent_assertion_statement
  | passive_concurrent_procedure_call_statement
  | passive_process_statement
  | PSL_PSL_Directive


entity_statement_part ::=      [§ 3.2.4]
  { entity_statement }


entity_tag ::= simple_name | character_literal | operator_symbol7.2]


enumeration_literal ::= identifier | character_literal5.2.2.1]


enumeration_type_definition ::=      [§ 5.2.2.1]
  ( enumeration_literal { , enumeration_literal } )


exit_statement ::=      [§ 10.2]
  [ label : ] exit [ loop_label ] [ when condition ] ;


exponent ::= E [ + ] integer | E – integer15.5.2]


expression ::=      [§ 9.1]
  condition_operator primary
  | logical_expression


extended_digit ::= digit | letter15.5.3]


extended_identifier ::= \ graphic_character { graphic_character } \      [§ 15.4.3]


external_name ::=      [§ 8.7]
  external_constant_name
  | external_signal_name
  | external_variable_name


external_constant_name ::=      [§ 8.7]
  << constant external_pathname : subtype_indication >>


external_signal_name ::=      [§ 8.7]
  << signal external_pathname : subtype_indication >>


external_variable_name ::=      [§ 8.7]
  << variable external_pathname : subtype_indication >>


external_pathname ::=      [§ 8.7]
  package_pathname
  | absolute_pathname
  | relative_pathname


F

factor ::=      [§ 9.1]
  primary [ ** primary ]
  | abs primary
  | not primary
  | logical_operator primary


file_declaration ::=      [§ 6.4.2.5]
  file identifier_list : subtype_indication [ file_open_information ] ;


file_logical_name ::= string_expression      [§ 6.4.2.5]


file_open_information ::=      [§ 6.4.2.5]
  [ open file_open_kind_expression ] is file_logical_name


file_type_definition ::=      [§ 5.5.1]
  file of type_mark


floating_type_definition ::= range_constraint5.2.5.1]


for_generate_statement ::=      [§ 11.8]
  generate_label :
  for generate_parameter_specification generate
  generate_statement_body
  end generate [ generate_label ] ;


force_mode ::= in | out10.5.2.1]


formal_designator ::=      [§ 6.5.7.1]
  generic_name
  | port_name
  | parameter_name


formal_parameter_list ::= parameter_interface_list      [§ 4.2.2.1]


formal_part ::=      [§ 6.5.7.1]
  formal_designator
  | function_name ( formal_designator )
  | type_mark ( formal_designator )


full_type_declaration ::=      [§ 6.2]
  type identifier is type_definition ;


function_call ::=      [§ 9.3.4]
  function_name [ ( actual_parameter_part ) ]


function_specification ::=      [§ 4.2.1]
  [ pure | impure ] function designator
  subprogram_header
  [ [ parameter ] ( formal_parameter_list ) ] return type_mark


G

generate_specification ::=      [§ 3.4.2]
  static_discrete_range
  | static_expression
  | alternative_label


generate_statement ::=      [§ 11.8]
  for_generate_statement
  | if_generate_statement
  | case_generate_statement


generate_statement_body ::=      [§ 11.8]
  [ block_declarative_part
  begin ]
  { concurrent_statement }
  [ end [ alternative_label ] ; ]


generic_clause ::=      [§ 6.5.6.2]
  generic ( generic_list ) ;


generic_list ::= generic_interface_list      [§ 6.5.6.2]


generic_map_aspect ::=      [§ 6.5.6.2]
  generic map ( generic_association_list )


graphic_character ::=      [§ 15.2]
  basic_graphic_character | lower_case_letter | other_special_character


group_constituent ::= name | character_literal6.10]


group_constituent_list ::= group_constituent { , group_constituent }      [§ 6.10]


group_declaration ::=      [§ 6.10]
  group identifier : group_template_name ( group_constituent_list ) ;


group_template_declaration ::=      [§ 6.9]
  group identifier is ( entity_class_entry_list ) ;


guarded_signal_specification ::=      [§ 7.4]
  guarded_signal_list : type_mark


I

identifier ::= basic_identifier | extended_identifier15.4.1]


identifier_list ::= identifier { , identifier }      [§ 5.3.3]


if_generate_statement ::=      [§ 11.8]
  generate_label :
  if [ alternative_label : ] condition generate
  generate_statement_body
  { elsif [ alternative_label : ] condition generate
  generate_statement_body }
  [ else [ alternative_label : ] generate
  generate_statement_body ]
  end generate [ generate_label ] ;


if_statement ::=      [§ 10.8]
  [ if_label : ]
  if condition then
  sequence_of_statements
  { elsif condition then
  sequence_of_statements }
  [ else
  sequence_of_statements ]
  end if [ if_label ] ;


incomplete_type_declaration ::= type identifier ;      [§ 5.4.2]


index_constraint ::= ( discrete_range { , discrete_range } )      [§ 5.3.2.1]


index_subtype_definition ::= type_mark range <>      [§ 5.3.2.1]


indexed_name ::= prefix ( expression { , expression } )      [§ 8.4]


instantiated_unit ::=      [§ 11.7.1]
  [ component ] component_name
  | entity entity_name [ ( architecture_identifier ) ]
  | configuration configuration_name


instantiation_list ::=      [§ 7.3.1]
  instantiation_label { , instantiation_label }
  | others
  | all


integer ::= digit { [ underline ] digit }      [§ 15.5.2]


integer_type_definition ::= range_constraint5.2.3.1]


interface_constant_declaration ::=      [§ 6.5.2]
  [ constant ] identifier_list : [ in ] subtype_indication [ := static_expression ]


interface_declaration ::=      [§ 6.5.1]
  interface_object_declaration
  | interface_type_declaration
  | interface_subprogram_declaration
  | interface_package_declaration


interface_element ::= interface_declaration6.5.6.1]


interface_file_declaration ::=      [§ 6.5.2]
  file identifier_list : subtype_indication


interface_function_specification ::=      [§ 6.5.4]
  [ pure | impure ] function designator
  [ [ parameter ] ( formal_parameter_list ) ] return type_mark


interface_incomplete_type_declaration ::= type identifier6.5.3]


interface_list ::=      [§ 6.5.6.1]
  interface_element { ; interface_element }


interface_object_declaration ::=      [§ 6.5.2]
  interface_constant_declaration
  | interface_signal_declaration
  | interface_variable_declaration
  | interface_file_declaration


interface_package_declaration ::=      [§ 6.5.5]
  package identifier is
  new uninstantiated_package_name interface_package_generic_map_aspect


interface_package_generic_map_aspect ::=      [§ 6.5.5]
  generic_map_aspect
  | generic map ( <> )
  | generic map ( default )


interface_procedure_specification ::=      [§ 6.5.4]
  procedure designator
  [ [ parameter ] ( formal_parameter_list ) ]


interface_signal_declaration ::=      [§ 6.5.2]
  [ signal ] identifier_list : [ mode ] subtype_indication [ bus ] [ := static_expression ]


interface_subprogram_declaration ::=      [§ 6.5.4]
  interface_subprogram_specification [ is interface_subprogram_default ]


interface_subprogram_default ::= subprogram_name | <>      [§ 6.5.4]


interface_subprogram_specification ::=      [§ 6.5.4]
  interface_procedure_specification | interface_function_specification


interface_type_declaration ::=      [§ 6.5.3]
  interface_incomplete_type_declaration


interface_variable_declaration ::=      [§ 6.5.2]
  [ variable ] identifier_list : [ mode ] subtype_indication [ := static_expression ]


iteration_scheme ::=      [§ 10.10]
  while condition
  | for loop_parameter_specification


L

label ::= identifier11.8]


letter ::= upper_case_letter | lower_case_letter      [§ 15.4.2]


letter_or_digit ::= letter | digit      [§ 15.4.2]


library_clause ::= library logical_name_list ;      [§ 13.2]


library_unit ::=      [§ 13.1]
  primary_unit
  | secondary_unit


literal ::=      [§ 9.3.2]
  numeric_literal
  | enumeration_literal
  | string_literal
  | bit_string_literal
  | null


logical_expression ::=      [§ 9.1]
  relation { and relation }
  | relation { or relation }
  | relation { xor relation }
  | relation [ nand relation ]
  | relation [ nor relation ]
  | relation { xnor relation }


logical_name ::= identifier13.2]


logical_name_list ::= logical_name { , logical_name }      [§ 13.2]


logical_operator ::= and | or | nand | nor | xor | xnor9.2.1]


loop_statement ::=      [§ 10.10]
  [ loop_label : ]
  [ iteration_scheme ] loop
  sequence_of_statements
  end loop [ loop_label ] ;


M

miscellaneous_operator ::= ** | abs | not9.2.1]


mode ::= in | out | inout | buffer | linkage6.5.2]


multiplying_operator ::= * | / | mod | rem9.2.1]


N

name ::=      [§ 8.1]
  simple_name
  | operator_symbol
  | character_literal
  | selected_name
  | indexed_name
  | slice_name
  | attribute_name
  | external_name


next_statement ::=      [§ 10.11]
  [ label : ] next [ loop_label ] [ when condition ] ;


null_statement ::= [ label : ] null ;      [§ 10.14]


numeric_literal ::=      [§ 9.3.2]
  abstract_literal
  | physical_literal


O

object_declaration ::=      [§ 6.4.2.1]
  constant_declaration
  | signal_declaration
  | variable_declaration
  | file_declaration


operator_symbol ::= string_literal4.2.1]


P

package_body ::=      [§ 4.8]
  package body package_simple_name is
  package_body_declarative_part
  end [ package body ] [ package_simple_name ] ;


package_body_declarative_item ::=      [§ 4.8]
  subprogram_declaration
  | subprogram_body
  | subprogram_instantiation_declaration
  | package_declaration
  | package_body
  | package_instantiation_declaration
  | type_declaration
  | subtype_declaration
  | constant_declaration
  | variable_declaration
  | file_declaration
  | alias_declaration
  | attribute_declaration
  | attribute_specification
  | use_clause
  | group_template_declaration
  | group_declaration


package_body_declarative_part ::=      [§ 4.8]
  { package_body_declarative_item }


package_declaration ::=      [§ 4.7]
  package identifier is
  package_header
  package_declarative_part
  end [ package ] [ package_simple_name ] ;


package_declarative_item ::=      [§ 4.7]
  subprogram_declaration
  | subprogram_instantiation_declaration
  | package_declaration
  | package_instantiation_declaration
  | type_declaration
  | subtype_declaration
  | constant_declaration
  | signal_declaration
  | variable_declaration
  | file_declaration
  | alias_declaration
  | component_declaration
  | attribute_declaration
  | attribute_specification
  | disconnection_specification
  | use_clause
  | group_template_declaration
  | group_declaration
  | PSL_Property_Declaration
  | PSL_Sequence_Declaration


package_declarative_part ::=      [§ 4.7]
  { package_declarative_item }


package_header ::=      [§ 4.7]
  [ generic_clause
  [ generic_map_aspect ; ] ]


package_instantiation_declaration ::=      [§ 4.9]
  package identifier is new uninstantiated_package_name
  [ generic_map_aspect ] ;


package_pathname ::=
  @ library_logical_name . { package_simple_name . } object_simple_name [§ 8.7]


parameter_specification ::=      [§ 10.10]
  identifier in discrete_range


partial_pathname ::= { pathname_element . } object_simple_name      [§ 8.7]


pathname_element ::=      [§ 8.7]
  entity_simple_name
  | component_instantiation_label
  | block_label
  | generate_statement_label [ ( static_expression ) ]
  | package_simple_name


physical_literal ::= [ abstract_literal ] unit_name      [§ 5.2.4.1]


physical_type_definition ::=      [§ 5.2.4.1]
  range_constraint
  units
  primary_unit_declaration
  { secondary_unit_declaration }
  end units [ physical_type_simple_name ]


port_clause ::=      [§ 6.5.6.3]
  port ( port_list ) ;


port_list ::= port_interface_list      [§ 6.5.6.3]


port_map_aspect ::=      [§ 6.5.7.3]
  port map ( port_association_list )


prefix ::=      [§ 8.1]
  name
  | function_call


primary ::=      [§ 9.1]
  name
  | literal
  | aggregate
  | function_call
  | qualified_expression
  | type_conversion
  | allocator
  | ( expression )


primary_unit ::=      [§ 13.1]
  entity_declaration
  | configuration_declaration
  | package_declaration
  | package_instantiation_declaration
  | context_declaration
  | PSL_Verification_Unit


primary_unit_declaration ::= identifier ;      [§ 5.2.4.1]


procedure_call ::= procedure_name [ ( actual_parameter_part ) ]      [§ 10.7]


procedure_call_statement ::= [ label : ] procedure_call ;      [§ 10.7]


procedure_specification ::=      [§ 4.2.1]
  procedure designator
  subprogram_header
  [ [ parameter ] ( formal_parameter_list ) ]


process_declarative_item ::=      [§ 11.3]
  subprogram_declaration
  | subprogram_body
  | subprogram_instantiation_declaration
  | package_declaration
  | package_body
  | package instantiation_declaration
  | type_declaration
  | subtype_declaration
  | constant_declaration
  | variable_declaration
  | file_declaration
  | alias_declaration
  | attribute_declaration
  | attribute_specification
  | use_clause
  | group_template_declaration
  | group_declaration


process_declarative_part ::=      [§ 11.3]
  { process_declarative_item }


process_sensitivity_list ::= all | sensitivity_list11.3]


process_statement ::=      [§ 11.3]
  [ process_label : ]
  [ postponed ] process [ ( process_sensitivity_list ) ] [ is ]
  process_declarative_part
  begin
  process_statement_part
  end [ postponed ] process [ process_label ] ;


process_statement_part ::=      [§ 11.3]
  { sequential_statement }


protected_type_body ::=      [§ 5.6.3]
  protected body
  protected_type_body_declarative_part
  end protected body [ protected_type_simple name ]


protected_type_body_declarative_item ::=      [§ 5.6.3]
  subprogram_declaration
  | subprogram_body
  | subprogram_instantiation_declaration
  | package_declaration
  | package_body
  | package_instantiation_declaration
  | type_declaration
  | subtype_declaration
  | constant_declaration
  | variable_declaration
  | file_declaration
  | alias_declaration
  | attribute_declaration
  | attribute_specification
  | use_clause
  | group_template_declaration
  | group_declaration


protected_type_body_declarative_part ::=      [§ 5.6.3]
  { protected_type_body_declarative_item }


protected_type_declaration ::=      [§ 5.6.2]
  protected
  protected_type_declarative_part
  end protected [ protected_type_simple_name ]


protected_type_declarative_item ::=      [§ 5.6.2]
  subprogram_declaration
  | subprogram_instantiation_declaration
  | attribute_specification
  | use_clause


protected_type_declarative_part ::=      [§ 5.6.2]
  { protected_type_declarative_item }


protected_type_definition ::=      [§ 5.6.1]
  protected_type_declaration
  | protected_type_body


Q

qualified_expression ::=      [§ 9.3.5]
  type_mark ' ( expression )
  | type_mark ' aggregate


R

range ::=      [§ 5.2.1]
  range_attribute_name
  | simple_expression direction simple_expression


range_constraint ::= range range5.2.1]


record_constraint ::=      [§ 5.3.3]
  ( record_element_constraint { , record_element_constraint } )


record_element_constraint ::= record_element_simple_name element_constraint5.3.3]


record_element_resolution ::= record_element_simple_name resolution_indication6.3]


record_resolution ::= record_element_resolution { , record_element_resolution }      [§ 6.3]


record_type_definition ::=      [§ 5.3.3]
  record
  element_declaration
  { element_declaration }
  end record [ record_type_simple_name ]


relation ::=      [§ 9.1]
  shift_expression [ relational_operator shift_expression ]


relational_operator ::= = | /= | < | <= | > | >= | ?= | ?/= | ?< | ?<= | ?> | ?>=      [§ 9.2.1]


relative_pathname ::= { ^ . } partial_pathname8.7]


report_statement ::=      [§ 10.4]
  [ label : ]
  report expression
  [ severity expression ] ;


resolution_indication ::=      [§ 6.3]
  resolution_function_name | ( element_resolution )


return_statement ::=      [§ 10.13]
  [ label : ] return [ expression ] ;


S

scalar_type_definition ::=      [§ 5.2.1]
  enumeration_type_definition
  | integer_type_definition
  | floating_type_definition
  | physical_type_definition


secondary_unit ::=      [§ 13.1]
  architecture_body
  | package_body


secondary_unit_declaration ::= identifier = physical_literal ;      [§ 5.2.4.1]


selected_expressions ::=      [§ 10.5.4]
  { expression when choices , }
  expression when choices


selected_force_assignment ::=      [§ 10.5.4]
  with expression select [ ? ]
  target <= force [ force_mode ] selected_expressions ;


selected_name ::= prefix . suffix8.3]


selected_signal_assignment ::=      [§ 10.5.4]
  selected_waveform_assignment
  | selected_force_assignment


selected_variable_assignment ::=      [§ 10.6.4]
  with expression select [ ? ]
  target := selected_expressions ;


selected_waveform_assignment ::=      [§ 10.5.4]
  with expression select [ ? ]
  target <= [ delay_mechanism ] selected_waveforms ;


selected_waveforms ::=      [§ 10.5.4]
  { waveform when choices , }
  waveform when choices


sensitivity_clause ::= on sensitivity_list10.2]


sensitivity_list ::= signal_name { , signal_name }      [§ 10.2]


sequence_of_statements ::=      [§ 10.1]
  { sequential_statement }


sequential_statement ::=      [§ 10.1]
  wait_statement
  | assertion_statement
  | report_statement
  | signal_assignment_statement
  | variable_assignment_statement
  | procedure_call_statement
  | if_statement
  | case_statement
  | loop_statement
  | next_statement
  | exit_statement
  | return_statement
  | null_statement


shift_expression ::=      [§ 9.1]
  simple_expression [ shift_operator simple_expression ]


shift_operator ::= sll | srl | sla | sra | rol | ror9.2.1]


sign ::= + | –      [§ 9.2.1]


signal_assignment_statement ::=      [§ 10.5.1]
  [ label : ] simple_signal_assignment
  | [ label : ] conditional_signal_assignment
  | [ label : ] selected_signal_assignment


signal_declaration ::=      [§ 6.4.2.3]
  signal identifier_list : subtype_indication [ signal_kind ] [ := expression ] ;


signal_kind ::= register | bus6.4.2.3]


signal_list ::=      [§ 7.4]
  signal_name { , signal_name }
  | others
  | all


signature ::= [ [ type_mark { , type_mark } ] [ return type_mark ] ]      [§ 4.5.3]


simple_configuration_specification ::=      [§ 7.3.1]
  for component_specification binding_indication ;
  [ end for ; ]


simple_expression ::=      [§ 9.1]
  [ sign ] term { adding_operator term }


simple_force_assignment ::=      [§ 10.5.2.1]
  target <= force [ force_mode ] expression ;


simple_name ::= identifier8.2]


simple_release_assignment ::=      [§ 10.5.2.1]
  target <= release [ force_mode ] ;


simple_signal_assignment ::=      [§ 10.5.2.1]
  simple_waveform_assignment
  | simple_force_assignment
  | simple_release_assignment


simple_waveform_assignment ::=      [§ 10.5.2.1]
  target <= [ delay_mechanism ] waveform ;


simple_variable_assignment ::=      [§ 10.6.2.1]
  target := expression ;


slice_name ::= prefix ( discrete_range )      [§ 8.5]


string_literal ::= " { graphic_character } "      [§ 15.7]


subprogram_body ::=      [§ 4.3]
  subprogram_specification is
  subprogram_declarative_part
  begin
  subprogram_statement_part
  end [ subprogram_kind ] [ designator ] ;


subprogram_declaration ::=      [§ 4.2.1]
  subprogram_specification ;


subprogram_declarative_item ::=      [§ 4.3]
  subprogram_declaration
  | subprogram_body
  | subprogram_instantiation_declaration
  | package_declaration
  | package_body
  | package_instantiation_declaration
  | type_declaration
  | subtype_declaration
  | constant_declaration
  | variable_declaration
  | file_declaration
  | alias_declaration
  | attribute_declaration
  | attribute_specification
  | use_clause
  | group_template_declaration
  | group_declaration


subprogram_declarative_part ::=      [§ 4.3]
  { subprogram_declarative_item }


subprogram_header ::=      [§ 4.2.1]
  [ generic ( generic_list )
  [ generic_map_aspect ] ]


subprogram_instantiation_declaration ::=      [§ 4.4]
  subprogram_kind identifier is new uninstantiated_subprogram_name [ signature ]
  [ generic_map_aspect ] ;


subprogram_kind ::= procedure | function4.3]


subprogram_specification ::=      [§ 4.2.1]
  procedure_specification | function_specification


subprogram_statement_part ::=      [§ 4.3]
  { sequential_statement }


subtype_declaration ::=      [§ 6.3]
  subtype identifier is subtype_indication ;


subtype_indication ::=      [§ 6.3]
  [ resolution_indication ] type_mark [ constraint ]


suffix ::=      [§ 8.3]
  simple_name
  | character_literal
  | operator_symbol
  | all


T

target ::=      [§ 10.5.2.1]
  name
  | aggregate


term ::=      [§ 9.1]
  factor { multiplying_operator factor }


timeout_clause ::= for time_expression      [§ 10.2]


tool_directive ::= ` identifier { graphic_character }      [§ 15.11]


type_conversion ::= type_mark ( expression )      [§ 9.3.6]


type_declaration ::=      [§ 6.2]
  full_type_declaration
  | incomplete_type_declaration


type_definition ::=      [§ 6.2]
  scalar_type_definition
  | composite_type_definition
  | access_type_definition
  | file_type_definition
  | protected_type_definition


type_mark ::=      [§ 6.3]
  type_name
  | subtype_name


U

unbounded_array_definition ::=      [§ 5.3.2.1]
  array ( index_subtype_definition { , index_subtype_definition } )
  of element_subtype_indication


use_clause ::=      [§ 12.4]
  use selected_name { , selected_name } ;


V

variable_assignment_statement ::=      [§ 10.6.1]
  [ label : ] simple_variable_assignment
  | [ label : ] conditional_variable_assignment
  | [ label : ] selected_variable_assignment


variable_declaration ::=      [§ 6.4.2.4]
  [ shared ] variable identifier_list : subtype_indication [ := expression ] ;


verification_unit_binding_indication ::=      [§ 7.3.4]
  use vunit verification_unit_list


verification_unit_list ::= verification_unit_name { , verification_unit_name }      [§ 7.3.4]


W

wait_statement ::=      [§ 10.2]
  [ label : ] wait [ sensitivity_clause ] [ condition_clause ] [ timeout_clause ] ;


waveform ::=      [§ 10.5.2.1]
  waveform_element { , waveform_element }
  | unaffected


waveform_element ::=      [§ 10.5.2.2]
  value_expression [ after time_expression ]
  | null [ after time_expression ]


A B C D E F G I L M N O P Q R S T U V W