BNF for vhdl.jj

NON-TERMINALS

abstract_literal ::= <decimal_literal>
| <based_literal>
access_type_definition ::= <ACCESS> subtype_indication
actual_designator ::= expression
| signal_name
| variable_name
| file_name
| <OPEN>
| terminal_name
| quantity_name
actual_parameter_part ::= parameter_association_list
actual_part ::= ( function_name "(" actual_designator ")" | type_mark "(" actual_designator ")" | actual_designator )
adding_operator ::= <ADD>
| <SUB>
| <CONCAT>
aggregate ::= "(" element_association ( "," element_association )* ")"
alias_declaration ::= <ALIAS> alias_designator ( ":" subtype_indication )? <IS> name signature ";"
alias_designator ::= ( identifier | <character_literal> | operator_symbol )
allocator ::= <NEW> ( qualified_expression | subtype_indication )
architecture_body ::= <ARCHITECTURE> identifier <OF> entity_name <IS> architecture_declarative_part <BEGIN> architecture_statement_part <END> ( <ARCHITECTURE> )? ( architecture_simple_name )? ";"
architecture_declarative_part ::= ( block_declarative_item )*
architecture_statement_part ::= ( architecture_statement )*
architecture_statement ::= ( block_statement | process_statement | concurrent_procedure_call_statement | concurrent_assertion_statement | concurrent_signal_assignment_statement | component_instantiation_statement | generate_statement | concurrent_break_statement | simultaneous_statement )
array_nature_definition ::= unconstrained_nature_definition
| constrained_nature_definition
unconstrained_nature_definition ::= <ARRAY> "(" index_subtype_definition ( "," index_subtype_definition )* ")" <OF> subnature_indication
constrained_nature_definition ::= <ARRAY> index_constraint <OF> subnature_indication
array_type_definition ::= unconstrained_array_definition
| constrained_array_definition
assertion ::= <ASSERT> condition ( <REPORT> expression )? ( <SEVERITY> expression )?
assertion_statement ::= ( label ":" )? assertion ";"
association_element ::= ( formal_part "=>" )? actual_part
association_list ::= association_element ( "," association_element )*
attribute_declaration ::= <ATTRIBUTE> identifier ":" type_mark ";"
attribute_designator ::= attribute_simple_name
attribute_name ::= prefix signature "\'" attribute_designator ( "(" expression ( "," expression )* ")" )?
attribute_specification ::= <ATTRIBUTE> attribute_designator <OF> entity_specification <IS> expression ";"
base_unit_declaration ::= identifier ";"
binding_indication ::= ( <USE> entity_aspect )? ( generic_map_aspect )? ( port_map_aspect )?
block_configuration ::= <FOR> block_specification ( use_clause )* ( configuration_item )* <END> <FOR> ";"
block_declarative_item ::= ( 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 | nature_declaration | subnature_declaration | quantity_declaration | terminal_declaration )
block_declarative_part ::= ( block_declarative_item )*
block_header ::= ( generic_clause ( generic_map_aspect ";" )? )? ( port_clause ( port_map_aspect ";" )? )?
block_specification ::= ( architecture_name | block_statement_label | generate_statement_label ( "(" index_specification ")" )? )
block_statement ::= block_label ":" <BLOCK> ( "(" guard_expression ")" )? ( <IS> )? block_header block_declarative_part <BEGIN> block_statement_part <END> <BLOCK> ( block_label )? ";"
block_statement_part ::= ( architecture_statement )*
break_statement ::= ( label ":" )? <BREAK> ( break_list )? ( <WHEN> condition )? ";"
break_list ::= break_element ( "," break_element )*
break_element ::= ( selector_clause )? quantity_name "=>" expression
selector_clause ::= <FOR> quantity_name <USE>
case_statement ::= ( case_label ":" )? <CASE> expression <IS> case_statement_alternative ( case_statement_alternative )* <END> <CASE> ( case_label )? ";"
case_statement_alternative ::= <WHEN> choices "=>" sequence_of_statements
choice ::= ( simple_expression | discrete_range | element_simple_name | <OTHERS> )
choices ::= choice ( "|" choice )*
component_configuration ::= <FOR> component_specification ( binding_indication ";" )? ( block_configuration )? <END> <FOR> ";"
component_declaration ::= <COMPONENT> identifier ( <IS> )? ( local_generic_clause )? ( local_port_clause )? <END> <COMPONENT> ( component_simple_name )? ";"
component_instantiation_statement ::= instantiation_label ":" instantiated_unit ( generic_map_aspect )? ( port_map_aspect )? ";"
composite_nature_definition ::= array_nature_definition
| record_nature_definition
component_specification ::= instantiation_list ":" component_name
composite_type_definition ::= ( array_type_definition | record_type_definition )
concurrent_assertion_statement ::= ( label ":" )? ( <POSTPONED> )? assertion ";"
concurrent_procedure_call_statement ::= ( label ":" )? ( <POSTPONED> )? procedure_call ";"
concurrent_signal_assignment_statement ::= ( label ":" )? ( <POSTPONED> )? ( conditional_signal_assignment | selected_signal_assignment )
condition ::= boolean_expression
condition_clause ::= <UNTIL> condition
conditional_signal_assignment ::= target "<=" options_ conditional_waveforms ";"
conditional_waveforms ::= waveform ( <WHEN> condition <ELSE> waveform )* ( <WHEN> condition )?
configuration_declaration ::= <CONFIGURATION> identifier <OF> entity_name <IS> configuration_declarative_part block_configuration <END> ( <CONFIGURATION> )? ( configuration_simple_name )? ";"
configuration_declarative_item ::= ( use_clause | attribute_specification | group_declaration )
configuration_declarative_part ::= ( configuration_declarative_item )*
configuration_item ::= block_configuration
| component_configuration
configuration_specification ::= <FOR> component_specification binding_indication ";"
constant_declaration ::= <CONSTANT> identifier_list ":" subtype_indication ( ":=" expression )? ";"
constrained_array_definition ::= <ARRAY> index_constraint <OF> element_subtype_indication
constraint ::= range_constraint
| index_constraint
context_clause ::= ( context_item )*
context_item ::= library_clause
| use_clause
terminal_declaration ::= <TERMINAL> identifier_list ":" subnature_indication ";"
terminal_aspect ::= plus_terminal_name ( <TO> minus_terminal_name )?
delay_mechanism ::= ( <TRANSPORT> | ( <REJECT> time_expression )? <INERTIAL> )
design_file ::= ( design_unit )+ <EOF>
design_unit ::= context_clause library_unit
designator ::= identifier
| operator_symbol
direction ::= ( <TO> | <DOWNTO> )
disconnection_specification ::= <DISCONNECT> guarded_signal_specification <AFTER> time_expression ";"
discrete_range ::= range
| discrete_subtype_indication
| range
element_association ::= ( choices "=>" )? expression
element_declaration ::= identifier_list ":" element_subtype_definition ";"
element_subtype_definition ::= subtype_indication
entity_aspect ::= ( <ENTITY> entity_name ( "(" architecture_identifier ")" )? | <CONFIGURATION> configuration_name | <OPEN> )
entity_class ::= <ENTITY>
| <ARCHITECTURE>
| <CONFIGURATION>
| <PROCEDURE>
| <FUNCTION>
| <PACKAGE>
| <TYPE>
| <SUBTYPE>
| <CONSTANT>
| <SIGNAL>
| <VARIABLE>
| <COMPONENT>
| <LABEL>
| <LITERAL>
| <UNITS>
| <GROUP>
| <FILE>
| <SUBNATURE>
| <NATURE>
| <TERMINAL>
entity_class_entry ::= entity_class ( "<>" )?
entity_class_entry_list ::= entity_class_entry ( "," entity_class_entry )*
entity_declaration ::= <ENTITY> identifier <IS> entity_header entity_declarative_part ( <BEGIN> entity_statement_part )? <END> ( <ENTITY> )? ( entity_simple_name )? ";"
entity_declarative_item ::= ( subprogram_declaration | subprogram_body | 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 | nature_declaration | subnature_declaration | terminal_declaration )
nature_declaration ::= <NATURE> identifier <IS> nature_definition ";"
nature_definition ::= scalar_nature_definition
| composite_nature_definition
subnature_declaration ::= <SUBNATURE> identifier <IS> subnature_indication ";"
subnature_indication ::= nature_mark ( index_constraint )? ( <TOLERANCE> string_expression <ACROSS> string_expression <THROUGH> )?
nature_mark ::= nature_name
| subnature_name
entity_declarative_part ::= ( entity_declarative_item )*
entity_designator ::= entity_tag signature
entity_header ::= ( formal_generic_clause )? ( formal_port_clause )?
entity_name_list ::= ( entity_designator ( "," entity_designator )* | <OTHERS> | <ALL> )
entity_specification ::= entity_name_list ":" entity_class
entity_statement ::= concurrent_assertion_statement
| passive_process_statement
| passive_concurrent_procedure_call_statement
entity_statement_part ::= ( entity_statement )*
entity_tag ::= ( simple_name | <character_literal> | operator_symbol )
enumeration_literal ::= ( <character_literal> | identifier )
enumeration_type_definition ::= "(" enumeration_literal ( "," enumeration_literal )* ")"
exit_statement ::= ( label ":" )? <EXIT> ( loop_label )? ( <WHEN> condition )? ";"
expression ::= relation ( logical_operator relation )*
factor ::= <ABS> primary
| <NOT> primary
| primary ( <EXP> primary )?
file_declaration ::= <FILE> identifier_list ":" subtype_indication ( file_open_information )? ";"
file_logical_name ::= string_expression
file_open_information ::= ( <OPEN> file_open_kind_expression )? <IS> file_logical_name
file_type_definition ::= <FILE> <OF> type_mark
floating_type_definition ::= range_constraint
formal_designator ::= generic_name
| port_name
| parameter_name
formal_parameter_list ::= parameter_interface_list
formal_part ::= function_name "(" formal_designator ")"
| type_mark "(" formal_designator ")"
| formal_designator
full_type_declaration ::= <TYPE> identifier <IS> type_definition ";"
function_call ::= function_name ( "(" actual_parameter_part ")" )?
generate_statement ::= generate_label ":" generation_scheme <GENERATE> ( ( block_declarative_item )* <BEGIN> )? ( architecture_statement )* <END> <GENERATE> ( generate_label )? ";"
concurrent_break_statement ::= ( label ":" )? <BREAK> ( break_list )? ( sensitivity_clause )? ( <WHEN> condition )? ";"
generation_scheme ::= ( <FOR> generate_parameter_specification | <IF> condition )
generic_clause ::= <GENERIC> "(" generic_list ")" ";"
generic_list ::= generic_interface_list
generic_map_aspect ::= <GENERIC> <MAP> "(" generic_association_list ")"
group_constituent ::= ( name | <character_literal> )
group_constituent_list ::= group_constituent ( "," group_constituent )*
group_template_declaration ::= <GROUP> identifier <IS> "(" entity_class_entry_list ")" ";"
group_declaration ::= <GROUP> identifier ":" group_template_name "(" group_constituent_list ")" ";"
guarded_signal_specification ::= guarded_signal_list ":" type_mark
identifier ::= ( <basic_identifier> | <extended_identifier> )
identifier_list ::= identifier ( "," identifier )*
if_statement ::= ( 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 ";"
index_constraint ::= "(" discrete_range ( "," discrete_range )* ")"
index_specification ::= ( discrete_range | static_expression )
index_subtype_definition ::= type_mark <RANGE> "<>"
indexed_name ::= prefix "(" expression ( "," expression )* ")"
instantiated_unit ::= ( ( <COMPONENT> )? component_name | <ENTITY> entity_name ( "(" architecture_identifier ")" )? | <CONFIGURATION> configuration_name )
instantiation_list ::= ( instantiation_label ( "," instantiation_label )* | <OTHERS> | <ALL> )
integer_type_definition ::= range_constraint
interface_constant_declaration ::= ( <CONSTANT> )? identifier_list ":" ( <IN> )? subtype_indication ( ":=" static_expression )?
interface_declaration ::= interface_constant_declaration
| interface_signal_declaration
| interface_variable_declaration
| interface_file_declaration
| interface_terminal_declaration
| interface_quantity_declaration
interface_terminal_declaration ::= <TERMINAL> identifier_list ":" subnature_indication
interface_quantity_declaration ::= <QUANTITY> identifier_list ":" ( <IN> | <OUT> )? subtype_indication ( ":=" static_expression )?
interface_element ::= interface_declaration
interface_file_declaration ::= <FILE> identifier_list ":" subtype_indication
interface_list ::= interface_element ( ";" interface_element )*
interface_signal_declaration ::= ( <SIGNAL> )? identifier_list ":" ( mode )? subtype_indication ( <BUS> )? ( ":=" static_expression )?
interface_variable_declaration ::= ( <VARIABLE> )? identifier_list ":" ( mode )? subtype_indication ( ":=" static_expression )?
iteration_scheme ::= ( <WHILE> condition | <FOR> loop_parameter_specification )
label ::= identifier
library_clause ::= <LIBRARY> logical_name_list ";"
library_unit ::= primary_unit
| secondary_unit
literal ::= ( numeric_literal | enumeration_literal | <string_literal> | <bit_string_literal> | <NULL> )
logical_name ::= identifier
logical_name_list ::= logical_name ( "," logical_name )*
logical_operator ::= <AND>
| <OR>
| <NAND>
| <NOR>
| <XOR>
| <XNOR>
loop_statement ::= ( loop_label ":" )? ( iteration_scheme )? <LOOP> sequence_of_statements <END> <LOOP> ( loop_label )? ";"
miscellaneous_operator ::= <EXP>
| <ABS>
| <NOT>
mode ::= ( <IN> | <OUT> | <INOUT> | <BUFFER> | <LINKAGE> )
multiplying_operator ::= "*"
| "/"
| <MOD>
| <REM>
name ::= ( simple_name | operator_symbol ) ( name_extension )?
name_extension ::= ( signature "\'" attribute_designator ( "(" expression ")" )? | "." suffix | "(" discrete_range ")" | "(" expression ( "," expression )* ")" ) ( name_extension )?
nature_element_declaration ::= identifier_list ":" element_subnature_definition
element_subnature_definition ::= subnature_indication
next_statement ::= ( label ":" )? <NEXT> ( loop_label )? ( <WHEN> condition )? ";"
null_statement ::= ( label ":" )? <NULL> ";"
numeric_literal ::= physical_literal
| abstract_literal
object_declaration ::= ( constant_declaration | signal_declaration | variable_declaration | file_declaration | terminal_declaration | quantity_declaration )
operator_symbol ::= <string_literal>
options_ ::= ( <GUARDED> )? ( delay_mechanism )?
package_body ::= <PACKAGE> <BODY> package_simple_name <IS> package_body_declarative_part <END> ( <PACKAGE> <BODY> )? ( package_simple_name )? ";"
package_body_declarative_item ::= ( subprogram_declaration | subprogram_body | type_declaration | subtype_declaration | constant_declaration | shared_variable_declaration | file_declaration | alias_declaration | use_clause | group_template_declaration | group_declaration )
package_body_declarative_part ::= ( package_body_declarative_item )*
package_declaration ::= <PACKAGE> identifier <IS> package_declarative_part <END> ( <PACKAGE> )? ( package_simple_name )? ";"
package_declarative_item ::= ( subprogram_declaration | type_declaration | subtype_declaration | constant_declaration | signal_declaration | shared_variable_declaration | file_declaration | alias_declaration | component_declaration | attribute_declaration | attribute_specification | disconnection_specification | use_clause | group_template_declaration | group_declaration | nature_declaration | subnature_declaration | terminal_declaration )
package_declarative_part ::= ( package_declarative_item )*
parameter_specification ::= identifier <IN> discrete_range
physical_literal ::= ( abstract_literal )? unit_name
physical_type_definition ::= range_constraint <UNITS> base_unit_declaration ( secondary_unit_declaration )* <END> <UNITS> ( physical_type_simple_name )?
port_clause ::= <PORT> "(" port_list ")" ";"
port_list ::= port_interface_list
port_map_aspect ::= <PORT> <MAP> "(" port_association_list ")"
prefix ::= ( function_call | name )
primary ::= qualified_expression
| function_call
| name
| literal
| aggregate
| "(" expression ")"
| type_conversion
| allocator
primary_unit ::= entity_declaration
| configuration_declaration
| package_declaration
procedure_call ::= procedure_name ( "(" actual_parameter_part ")" )?
procedure_call_statement ::= ( label ":" )? procedure_call ";"
process_declarative_item ::= subprogram_declaration
| subprogram_body
| 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 ::= ( process_declarative_item )*
process_statement ::= ( process_label ":" )? ( <POSTPONED> )? <PROCESS> ( "(" sensitivity_list ")" )? ( <IS> )? process_declarative_part <BEGIN> process_statement_part <END> ( <POSTPONED> )? <PROCESS> ( process_label )? ";"
process_statement_part ::= ( sequential_statement )*
qualified_expression ::= type_mark "\'" ( aggregate | "(" expression ")" )
range ::= ( simple_expression direction simple_expression | range_attribute_name )
range_constraint ::= <RANGE> range
record_nature_definition ::= <RECORD> ( nature_element_declaration )+ <END> <RECORD> ( record_nature_simple_name )?
record_type_definition ::= <RECORD> ( element_declaration )+ <END> <RECORD> ( record_type_simple_name )?
relation ::= shift_expression ( relational_operator shift_expression )?
relational_operator ::= <EQ>
| <NEQ>
| <LO>
| <LE>
| <GT>
| <GE>
report_statement ::= ( label ":" )? <REPORT> expression ( <SEVERITY> expression )? ";"
return_statement ::= ( label ":" )? <RETURN> ( expression )? ";"
scalar_nature_definition ::= type_mark <ACROSS> type_mark <THROUGH>
scalar_type_definition ::= physical_type_definition
| enumeration_type_definition
| range_constraint
secondary_unit ::= architecture_body
| package_body
secondary_unit_declaration ::= identifier "=" physical_literal ";"
selected_name ::= ( simple_name | operator_symbol ) ( name_extension )?
selected_signal_assignment ::= <WITH> expression <SELECT> target "<=" options_ selected_waveforms ";"
selected_waveforms ::= waveform <WHEN> choices ( "," waveform <WHEN> choices )*
sensitivity_clause ::= <ON> sensitivity_list
sensitivity_list ::= signal_name ( "," signal_name )*
sequence_of_statements ::= ( sequential_statement )*
sequential_statement ::= ( 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 | break_statement )
shift_expression ::= simple_expression ( shift_operator simple_expression )?
shift_operator ::= <SLL>
| <SRL>
| <SLA>
| <SRA>
| <ROL>
| <ROR>
sign ::= ( "+" | "-" )
signal_assignment_statement ::= ( label ":" )? target "<=" ( delay_mechanism )? waveform ";"
signal_declaration ::= <SIGNAL> identifier_list ":" subtype_indication ( signal_kind )? ( ":=" expression )? ";"
signal_kind ::= ( <REGISTER> | <BUS> )
signal_list ::= ( signal_name ( "," signal_name )* | <OTHERS> | <ALL> )
signature ::= ( type_mark ( "," type_mark )* )? ( <RETURN> type_mark )?
simple_expression ::= ( sign )? term ( adding_operator term )*
simple_name ::= identifier
slice_name ::= prefix "(" discrete_range ")"
subprogram_body ::= subprogram_specification <IS> subprogram_declarative_part <BEGIN> subprogram_statement_part <END> ( subprogram_kind )? ( designator )? ";"
subprogram_declaration ::= subprogram_specification ";"
subprogram_declarative_item ::= subprogram_declaration
| subprogram_body
| 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 ::= ( subprogram_declarative_item )*
subprogram_kind ::= <PROCEDURE>
| <FUNCTION>
subprogram_specification ::= ( <PROCEDURE> designator ( "(" formal_parameter_list ")" )? | ( <PURE> | <IMPURE> )? <FUNCTION> designator ( "(" formal_parameter_list ")" )? <RETURN> type_mark )
subprogram_statement_part ::= ( sequential_statement )*
subtype_declaration ::= <SUBTYPE> identifier <IS> subtype_indication ";"
subtype_indication ::= ( resolution_function_name type_mark constraint ( tolerance_aspect )? | type_mark constraint ( tolerance_aspect )? | resolution_function_name type_mark ( tolerance_aspect )? | type_mark ( tolerance_aspect )? )
tolerance_aspect ::= <TOLERANCE> string_expression
quantity_declaration ::= free_quantity_declaration
| branch_quantity_declaration
| source_quantity_declaration
free_quantity_declaration ::= <QUANTITY> identifier_list ":" subtype_indication ( ":=" expression )? ";"
branch_quantity_declaration ::= <QUANTITY> ( across_aspect )? ( through_aspect )? terminal_aspect ";"
source_quantity_declaration ::= <QUANTITY> identifier_list ":" subtype_indication source_aspect ";"
across_aspect ::= identifier_list ( tolerance_aspect )? ( ":=" expression )? <ACROSS>
through_aspect ::= identifier_list ( tolerance_aspect )? ( ":=" expression )? <THROUGH>
source_aspect ::= ( <SPECTRUM> magnitude_simple_expression "," phase_simple_expression | <NOISE> magnitude_simple_expression )
suffix ::= simple_name
| <character_literal>
| operator_symbol
| <ALL>
target ::= name
| aggregate
term ::= factor ( multiplying_operator factor )*
timeout_clause ::= <FOR> time_or_real_expression
type_conversion ::= type_mark "(" expression ")"
type_declaration ::= full_type_declaration
| incomplete_type_declaration
type_definition ::= scalar_type_definition
| composite_type_definition
| access_type_definition
| file_type_definition
type_mark ::= type_name
| subtype_name
unconstrained_array_definition ::= <ARRAY> "(" index_subtype_definition ( "," index_subtype_definition )* ")" <OF> element_subtype_indication
use_clause ::= <USE> selected_name ( "," selected_name )* ";"
variable_assignment_statement ::= ( label ":" )? target ":=" expression ";"
variable_declaration ::= ( <SHARED> )? <VARIABLE> identifier_list ":" subtype_indication ( ":=" expression )? ";"
wait_statement ::= ( ":" label ":" )? <WAIT> ( sensitivity_clause )? ( condition_clause )? ( timeout_clause )? ";"
waveform ::= ( waveform_element ( "," waveform_element )* | <UNAFFECTED> )
waveform_element ::= ( <NULL> ( <AFTER> time_expression )? | value_expression ( <AFTER> time_expression )? )
simultaneous_statement_part ::= ( simultaneous_statement )*
simultaneous_statement ::= simple_simultaneous_statement
| simultaneous_if_statement
| simultaneous_case_statement
| simultaneous_procedural_statement
| simultaneous_null_statement
simple_simultaneous_statement ::= ( label ":" )? ( <PURE> | <IMPURE> )? simple_expression "==" simple_expression ( tolerance_aspect )? ";"
simultaneous_if_statement ::= ( if_label ":" )? <IF> condition <USE> simultaneous_statement_part ( <ELSIF> condition <USE> simultaneous_statement_part )* ( <ELSE> simultaneous_statement_part )? <END> <USE> ( if_label )? ";"
simultaneous_case_statement ::= ( case_label ":" )? <CASE> expression <USE> ( simultaneous_alternative )* <END> <CASE> ( case_label )? ";"
simultaneous_alternative ::= <WHEN> choices <USE> simultaneous_statement_part
simultaneous_procedural_statement ::= ( procedural_label ":" )? ( <PURE> | <IMPURE> )? <PROCEDURAL> ( <IS> )? procedural_declarative_part <BEGIN> procedural_statement_part <END> <PROCEDURAL> ( procedural_label )? ";"
procedural_label ::= label
procedural_declarative_part ::= ( procedural_declarative_item )*
procedural_declarative_item ::= subprogram_declaration
| subprogram_body
| type_declaration
| subtype_declaration
| constant_declaration
| variable_declaration
| alias_declaration
| attribute_declaration
| attribute_specification
| use_clause
| group_template_declaration
| group_declaration
procedural_statement_part ::= ( sequential_statement )*
simultaneous_null_statement ::= ( label ":" )? <NULL> ";"
block_label ::= label
block_statement_label ::= label
case_label ::= label
generate_label ::= label
generate_statement_label ::= label
if_label ::= label
instantiation_label ::= label
loop_label ::= label
process_label ::= label
architecture_simple_name ::= simple_name
attribute_simple_name ::= simple_name
| <RANGE>
component_simple_name ::= simple_name
configuration_simple_name ::= simple_name
element_simple_name ::= simple_name
entity_simple_name ::= simple_name
package_simple_name ::= simple_name
architecture_name ::= name
entity_name ::= name
file_name ::= name
function_name ::= name
configuration_name ::= name
component_name ::= name
generic_name ::= name
group_template_name ::= name
parameter_name ::= name
physical_type_simple_name ::= simple_name
port_name ::= name
procedure_name ::= name
range_attribute_name ::= name
signal_name ::= name
type_name ::= name
record_nature_simple_name ::= simple_name
record_type_simple_name ::= simple_name
resolution_function_name ::= name
subtype_name ::= name
unit_name ::= name
variable_name ::= name
architecture_identifier ::= identifier
static_expression ::= expression
boolean_expression ::= expression
file_open_kind_expression ::= expression
guard_expression ::= expression
time_expression ::= expression
time_or_real_expression ::= expression
value_expression ::= expression
string_expression ::= expression
guarded_signal_list ::= signal_list
parameter_association_list ::= association_list
port_association_list ::= association_list
generic_association_list ::= association_list
generic_interface_list ::= interface_list
parameter_interface_list ::= interface_list
port_interface_list ::= interface_list
formal_port_clause ::= port_clause
local_port_clause ::= port_clause
formal_generic_clause ::= generic_clause
local_generic_clause ::= generic_clause
element_subtype_indication ::= subtype_indication
discrete_subtype_indication ::= subtype_indication
loop_parameter_specification ::= parameter_specification
generate_parameter_specification ::= parameter_specification
passive_concurrent_procedure_call_statement ::= concurrent_procedure_call_statement
passive_process_statement ::= process_statement
magnitude_simple_expression ::= simple_expression
phase_simple_expression ::= simple_expression
nature_name ::= name
subnature_name ::= name
terminal_name ::= name
quantity_name ::= name
plus_terminal_name ::= name
minus_terminal_name ::= name
shared_variable_declaration ::= ( <SHARED> )? <VARIABLE> identifier_list ":" subtype_indication ( ":=" expression )? ";"
error_skipto ::= java code