Language Change Specification for Deferred Shared Variables Proposal

Secondary LCS:

This LCS details changes to enhance semantic information in BNF productions. This is applied to BNF 'subtype indicator' non-terminals indicating their limitations, plus BNF 'package declaration' and 'package body' non-terminals to indicate the enclosing VHDL declarative region.

LCS Number: LCS-2016-080b
Version: 2
Date: 18-Dec-16
Status: Ballot
Author: Brent Hayhoe
Email:  
Source Doc: Deferred Shared Variables
Summary: Clarification of semantics in BNF productions relating to 'subtype indications' and 'package declarative items'
Depends on LCS: LCS-2016-80a

Voting Results: Cast your votes here

  • Yes:
    1. Brent Hayhoe - 2016-12-18 - Version 2
    2. Patrick Lehmann - 2016-12-31 - Version 2

Details of Language Change:

Key:

  • LRM text is shown between single quotes '... P1076 LRM quoted text ...'
  • Existing LRM text is shown in BLACK coloured font
  • Additional LRM text is shown in RED coloured font
  • Deleted LRM text is shown in RED with strike-through
  • In order to try and emphasize text in italic font:
    • Italic font in existing LRM text is shown in GRAY italic font
    • Italic font in new LRM text is shown in ORANGE italic font
    • Italic font in deleted LRM text is shown in ORANGE with strike-through
  • Editing instructions are shown in GREEN coloured font

LRM 3.2.3 Entity declarative part

page 8 bottom

Replace the BNF productions with:


entity_declarative_part ::=
     { entity_declarative_item }

entity_declarative_item ::=
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonsequential_package_declaration
   | nonsequential_package_body
   | nonsequential_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_signal_declaration
   | shared_normal_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

LRM 3.3.2 Architecture declarative part

page 11 middle

Replace the BNF productions with:


architecture_declarative_part ::=
     { block_declarative_item }

block_declarative_item ::=
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonsequential_package_declaration
   | nonsequential_package_body
   | nonsequential_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_signal_declaration
   | shared_normal_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

LRM 4.3 Subprogram bodies

page 23 bottom & 24 top

Replace the BNF productions with:


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

subprogram_declarative_part ::=
     { subprogram_declarative_item }

subprogram_declarative_item ::=
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonconcurrent_package_declaration
   | nonconcurrent_package_body
   | nonconcurrent_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_variable_declaration
   | file_declaration
   | alias_declaration
   | attribute_declaration
   | attribute_specification
   | use_clause
   | group_template_declaration
   | group_declaration

subprogram_statement_part ::=
     { sequential_statement }

subprogram_kind ::= procedure | function

LRM 5.3.2.1 General

page 44 bottom

Replace the BNF productions with:


array_type_definition ::=
     unbounded_array_definition | constrained_array_definition

unbounded_array_definition ::=
     array ( index_subtype_definition { , index_subtype_definition } )
          of array_element_subtype_indication

constrained_array_definition ::=
     array index_constraint of array_element_subtype_indication

index_subtype_definition ::= type_mark range <>

LRM 5.3.3 Record types

page 51

Replace the BNF productions with:


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

element_declaration ::=
     identifier_list : element_subtype_definition ;

identifier_list ::= identifier { , identifier }

element_subtype_definition ::= record_element_subtype_indication

record_constraint ::=
     ( record_element_constraint { , record_element_constraint } )

record_element_constraint ::= record_element_simple_name element_constraint

LRM 5.6.3 Protected type bodies

page 59 middle

Replace the BNF productions with:


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

protected_type_body_declarative_part ::=
     { protected_type_body_declarative_item }

protected_type_body_declarative_item ::=
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonconcurrent_package_declaration
   | nonconcurrent_package_body
   | nonconcurrent_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_variable_declaration
   | file_declaration
   | alias_declaration
   | attribute_declaration
   | attribute_specification
   | use_clause
   | group_template_declaration
   | group_declaration

LRM 6.4.2.5 File declarations

page 72 top

Replace the BNF productions with:


file_declaration ::=
     file identifier_list : file_subtype_indication [ file_open_information ] ;

file_open_information ::= [ open file_open_kind_expression ] is file_logical_name

file_logical_name ::= string_expression

LRM 8.7 External names

page 113 middle

Replace the BNF productions with:


external_name ::=
     external_constant_name
   | external_signal_name
   | external_variable_name

external_constant_name ::=
     << constant external_pathname : constant_subtype_indication >>

external_signal_name ::=
     << signal external_pathname : signal_subtype_indication >>

external_variable_name ::=
     << variable external_pathname : protected_subtype_indication >>

external_pathname ::=
     package_pathname
   | absolute_pathname
   | relative_pathname

package_pathname ::=
     @ library_logical_name . package_simple_name . { package_simple_name . } object_simple_name

absolute_pathname ::= . partial_pathname

relative_pathname ::= { ^ . } partial_pathname

partial_pathname ::= { pathname_element . } object_simple_name

LRM 11.3 Process statement

page 170 middle & 171 top

Replace the BNF productions with:


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

process_sensitivity_list ::= all | sensitivity_list

process_declarative_part ::=
     { process_declarative_item }

process_declarative_item ::=
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonconcurrent_package_declaration
   | nonconcurrent_package_body
   | nonconcurrent_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_variable_declaration
   | file_declaration
   | alias_declaration
   | attribute_declaration
   | attribute_specification
   | use_clause
   | group_template_declaration
   | group_declaration

process_statement_part ::=
     { sequential_statement }

LRM 13.1 Design units

page 195 top

Replace the BNF productions with:


design_file ::= design_unit { design_unit }

design_unit ::= context_clause library_unit

library_unit ::=
     primary_unit
   | secondary_unit

primary_unit ::=
     entity_declaration
   | configuration_declaration
   | nonsequential_package_declaration
   | nonsequential_package_instantiation_declaration
   | context_declaration
   | PSL_Verification_Unit

secondary_unit ::=
     architecture_body
   | nonsequential_package_body

LRM Annex C Syntax summary

page 479

Replace the 'block_declarative_item' BNF production with the %following:


block_declarative_item ::=                                              [ 3.3.2]
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonsequential_package_declaration
   | nonsequential_package_body
   | nonsequential_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_signal_declaration
   | shared_normal_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

page 483

Replace the 'constrained_array_definition' BNF production with %the following:


constrained_array_definition ::=                                        [ 5.3.2.1]
     array index_constraint of array_element_subtype_indication

page 484

Replace the 'element_subtype_definition' BNF production with the %following:


element_subtype_definition ::= record_element_subtype_indication        [ 5.3.3]

page 484 & 485

Replace the 'entity_declarative_item' BNF production with the %following:


entity_declarative_item ::=                                             [ 3.2.3]
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonsequential_package_declaration
   | nonsequential_package_body
   | nonsequential_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_signal_declaration
   | shared_normal_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

page 486

Replace the 'external_constant_name' BNF production with the %following:


external_constant_name ::=                                              [ 8.7]
     << constant external_pathname : constant_subtype_indication >>


Replace the 'external_signal_name' BNF production with the %following:


external_signal_name ::=                                                [ 8.7]
     << signal external_pathname : signal_subtype_indication >>


Replace the 'external_variable_name' BNF production with the %following:


external_variable_name ::=                                              [ 8.7]
     << variable external_pathname : protected_subtype_indication >>


Replace the 'file_declaration' BNF production with the %following:


file_declaration ::=                                                    [ 6.4.2.5]
     file identifier_list : file_subtype_indication [ file_open_information ] ;

page 489

Replace the 'interface_file_declaration' BNF production with the %following:


interface_file_declaration ::=                                          [ 6.5.2]
     file identifier_list : file_subtype_indication

page 493

Replace the 'primary_unit' BNF production with the following:


primary_unit ::=                                                        [ 13.1]
     entity_declaration
   | configuration_declaration
   | nonsequential_package_declaration
   | nonsequential_package_instantiation_declaration
   | context_declaration
   | PSL_Verification_Unit

page 494

Replace the 'process_declarative_item' BNF production with the %following:


process_declarative_item ::=                                            [ 11.3]
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonconcurrent_package_declaration
   | nonconcurrent_package_body
   | nonconcurrent_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_variable_declaration
   | file_declaration
   | alias_declaration
   | attribute_declaration
   | attribute_specification
   | use_clause
   | group_template_declaration
   | group_declaration


Replace the 'protected_type_body_declarative_item' BNF %production with the following:


protected_type_body_declarative_item ::=                                [ 5.6.3]
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonconcurrent_package_declaration
   | nonconcurrent_package_body
   | nonconcurrent_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_variable_declaration
   | file_declaration
   | alias_declaration
   | attribute_declaration
   | attribute_specification
   | use_clause
   | group_template_declaration
   | group_declaration

page 496

Replace the 'secondary_unit' BNF production with the following:


secondary_unit ::=                                                      [ 13.1]
     architecture_body
   | nonsequential_package_body


Replace the 'subprogram_declarative_item' BNF production with %the following:


subprogram_declarative_item ::=                                         [ 4.3]
     subprogram_declaration
   | subprogram_body
   | subprogram_instantiation_declaration
   | nonconcurrent_package_declaration
   | nonconcurrent_package_body
   | nonconcurrent_package_instantiation_declaration
   | type_declaration
   | subtype_declaration
   | normal_constant_declaration
   | normal_variable_declaration
   | file_declaration
   | alias_declaration
   | attribute_declaration
   | attribute_specification
   | use_clause
   | group_template_declaration
   | group_declaration

page 500

Replace the 'unbounded_array_definition' BNF production with the %following:


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

Comments

I don't understand the point of these changes. Are they just adding italicized (informative) prefixes?

-- Ryan Hinton - 2016-12-15

This is just EBNF cleanup work to clarify the rules a bit more. Other parts of the EBNF rule set have already such italic prefixes for clarification.

-- Patrick Lehmann - 2016-12-15

Version 2

BNF productions of entity structures declarative items have been moved here from LCS-2016-080a. They are as follows:

  • entity_declarative_part
  • architecture_declarative_part
  • block_declarative_part
  • subprogram_declarative_part
  • protected_type_body_declarative_part
  • process_declarative_part
  • primary_unit
  • secondary_unit

Italic prefixes have been added to the BNF entity structures declarative items mentioned above to reflect package declarative region usage. Package declarative items are prefixed as either 'non-sequential' (indicating that they may contain 'general' or 'concurrent' declarative items), or 'non-concurrent' (indicating that they may contain 'general' or 'sequential' declarative items).

-- Brent Hayhoe - 2016-12-17

This LCS does not only relate to LCS 080a, it depends on LCS 080a. Because the non-terminal symbols

  • normal_shared_variable_declaration
  • normal_variable_declaration
  • normal_constant_declaration
  • normal_signal_declaration

are introduced by LCS 080a. They are not part of the current LRM.

-- Martin Zabel - 2017-03-08

This proposal attempts to reformulate semantic rules of the current LRM as syntax rules. It does so without proposing any changes to the semantic rules. There are several problems with this approach:

  • It is at odds with the philosophy of the language definition, which attempts to make the EBNF free of ambiguities and reasonably free of conflicts by resolving nuances with semantic rules.
  • Not proposing any changes to semantic rules while adopting the syntax changes has several effects. First, the terminology used in the semantic rules no longer matches the EBNF. Second, expressing in essence the same rules both syntactically and semantically is a recipe for disaster because these rules get out of sync very quickly. If out of sync, which one governs?
  • A change of this kind will be problematic for tool developers because all diagnostic messages in their tools would have to be reworked to match a modified LRM, with no gain.
I disagree with Partick Lehmann's comments that this is just EBNF cleanup work, since several productions are proposed to be renamed. I agree, though, with Martin Zabel that this is not a stand-alone LCS.

-- Ernst Christen - 2017-03-21

Topic revision: r20 - 2020-02-17 - 15:34:42 - JimLewis
 
Copyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback