This annex provides a summary of the syntax for VHDL. Productions are ordered alphabetically by left-hand nonterminal name. The clause number indicates the clause where the production is given.
abstract_literal ::= decimal_literal | based_literal [§ 13.4] access_type_definition ::= access subtype_indication [§ 3.3 ] actual_designator ::= [§ 4.3.2.2] expression | signal_name | variable_name | file_name | open actual_parameter_part ::= parameter_association_list [§ 7.3.3] actual_part ::= [§ 4.3.2.2] actual_designator | function_name ( actual_designator ) | type_mark ( actual_designator ) adding_operator ::= + | - | & [§ 7.2] aggregate ::= [§ 7.3.2] ( element_association { , element_association } ) alias_declaration ::= [§ 4.3.3] alias alias_designator [ : subtype_indication ] is name [ signature ] ; alias_designator ::= identifier | character_literal | operator_symbol [§ 4.3.3] allocator ::= [§ 7.3.6] new subtype_indication | new qualified_expression architecture_body ::= [§ 1.2] architecture identifier of entity_name is architecture_declarative_part begin architecture_statement_part end [ architecture ] [ architecture_simple_name ] ; architecture_declarative_part ::= [§ 1.2.1] { block_declarative_item } architecture_statement_part ::= [§ 1.2.2] { concurrent_statement } array_type_definition ::= [§ 3.2.1] unconstrained_array_definition | constrained_array_definition assertion ::= [§ 8.2] assert condition [ report expression ] [ severity expression ] assertion_statement ::= [ label : ] assertion ; [§ 8.2] association_element ::= [§ 4.3.2.2] [ formal_part => ] actual_part association_list ::= [§ 4.3.2.2] association_element { , association_element } attribute_declaration : [§ 4.4] attribute identifier : type_mark ; attribute_designator ::= attribute_simple_name [§ 6.6]
attribute_name ::= [§ 6.6] prefix [ signature ] ' attribute_designator [ ( expression ) ] attribute_specification ::= [§ 5.1] attribute attribute_designator of entity_specification is expression ; base ::= integer [§ 13.4.2] base_specifier ::= B | O | X [§ 13.7] based_integer ::= [§ 13.4.2] extended_digit { [ underline ] extended_digit } based_literal ::= [§ 13.4.2] base # based_integer [ . based_integer ] # [ exponent ] basic_character ::= [§ 13.1] basic_graphic_character | format_effector basic_graphic_character ::= [§ 13.1] upper_case_letter | digit | special_character| space_character basic_identifier ::= letter { [ underline ] letter_or_digit } [§ 13.3.1] binding_indication ::= [§ 5.2.1] [ use entity_aspect ] [ generic_map_aspect ] [ port_map_aspect ] bit_string_literal ::= base_specifier " [ bit_value ] " [§ 13.7] bit_value ::= extended_digit { [ underline ] extended_digit } [§ 13.7] block_configuration ::= [§ 1.3.1] for block_specification { use_clause } { configuration_item } end for ; block_declarative_item ::= [§ 1.2.1] subprogram_declaration | subprogram_body | 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 block_declarative_part ::= [§ 9.1]
{ block_declarative_item } block_header ::= [§ 9.1] [ generic_clause [ generic_map_aspect ; ] ] [ port_clause [ port_map_aspect ; ] ] block_specification ::= [§ 1.3.1] architecture_name | block_statement_label | generate_statement_label [ ( index_specification ) ] block_statement ::= [§ 9.1] block_label : block [ ( guard_expression ) ] [ is ] block_header block_declarative_part begin block_statement_part end block [ block_label ] ; block_statement_part ::= [§ 9.1] { concurrent_statement } case_statement ::= [§ 8.8] [ case_label : ] case expression is case_statement_alternative { case_statement_alternative } end case [ case_label ] ; case_statement_alternative ::= [§ 8.8] when choices => sequence_of_statements character_literal ::= ' graphic_character ' [§ 13.5] choice ::= [§ 7.3.2] simple_expression | discrete_range | element_simple_name | others choices ::= choice { | choice } [§ 7.3.2] component_configuration ::= [§ 1.3.2] for component_specification [ binding_indication ; ] [ block_configuration ] end for ; component_declaration ::= [§ 4.5] component identifier [ is ] [ local_generic_clause ] [ local_port_clause ] end component [ component_simple_name ] ; component_instantiation_statement ::= [§ 9.6] instantiation_label : instantiated_unit [ generic_map_aspect ] [ port_map_aspect ] ; component_specification ::= [§ 5.2]
instantiation_list : component_name composite_type_definition ::= [§ 3.2] array_type_definition | record_type_definition concurrent_assertion_statement ::= [§ 9.4] [ label : ] [ postponed ] assertion ; concurrent_procedure_call_statement ::= [§ 9.3] [ label : ] [ postponed ] procedure_call ; concurrent_signal_assignment_statement ::= [§ 9.5] [ label : ] [ postponed ] conditional_signal_assignment | [ label : ] [ postponed ] selected_signal_assignment concurrent_statement ::= [§ 9] block_statement | process_statement | concurrent_procedure_call_statement | concurrent_assertion_statement | concurrent_signal_assignment_statement | component_instantiation_statement | generate_statement condition ::= boolean_expression [§ 8.1] condition_clause ::= until condition [§ 8.1] conditional_signal_assignment ::= [§ 9.5.1] target <= options conditional_waveforms ; conditional_waveforms ::= [§ 9.5.1]