- (1)
- 下面给出的可见性规则决定了哪些声明是在程序中的每个位置都是可见的和直接可见的。可见性规则适用于显式声明和隐式声明。
静态语义
- (2)
- 声明定义为在名称所在的位置直接可见只包含标识符或运算符symbol就足以表示声明;也就是说,没有selectedcomponent符号或特殊上下文(如前面的=>在命名的关联中)对于表示宣言。声明定义为在任何直接位置可见可见,以及在某些名称(例如selectedcomponent)可以表示声明的其他位置。
- (3)
- 语法类别direct_name用于指示上下文需要直接可见。使用了语法类别selector_name指示可见性而非直接可见性所在的上下文必修的。
- (4)
- 有两种直接可见性:即时可见性和使用可视性。如果声明是直接可见,因为该位置在其直接范围内。一个如果声明由于useclause而直接可见,则声明是use-visible(见8.4)。这两个条件都适用。
- (5)
- 声明可以隐藏,既可以直接隐藏,也可以全部隐藏可见性,在其范围的某些部分内。隐藏的地方可见性,它根本不可见(既不使用direct_name也不使用选择器名称)。在不可见的地方,只有直接可见丢失;使用selector_name仍然可以实现可见性。
- (6)
- 如果两个或多个声明都具有相同的值,则重载它们定义名称时,有一个地方可以直接看到它们。
- (7)
- 可调用实体的声明(包括枚举文字)是可过载的,这意味着允许它们过载。
- (8)
- 如果两个声明具有相同的定义名称,并且,如果两者都是重载的,那么它们的配置文件是类型一致的。一个内在的声明隐藏了任何外部同形异义词,使其不可见。
- (9)
- 通常不允许两个同形异义词同时出现在同一个词中声明性区域,除非其中一个覆盖另一个(参见下面的合法性规则)。声明覆盖紧邻在在以下情况下使用相同的声明区域:
- (10)
- (11)
- (12)
- 继承子程序的隐式声明覆盖继承子程序的前一个隐式声明。
- (13)
- 对于中基本子程序的隐式声明通用单元,实例中有此声明的副本。然而,一组全新的基本子程序是隐式的的可见部分中声明的每个类型实例。这些新声明发生在类型声明,并覆盖复制的声明。复制的那些只能从实例内调用;新的可以是仅从实例外部调用,但对于标记的类型,新的主体可以通过调用旧的主体来执行。
- (14)
- 声明在其范围内是可见的,除非对所有人隐藏可见性,如下所示:
- (15)
- 重写的声明在中的所有可见性中都是隐藏的覆盖声明的范围。
- (16)
- (17)
- 对于记录类型或记录扩展,声明为仅在保留字之前隐藏所有可见性记录;
- (18)
- 对于package_declaration,任务声明,受保护声明、generic_package_declaration或subject_body,声明仅对所有可见性隐藏直到保留字出现在声明中。
- (19)
- 如果声明的完成是一个声明,则在完成的范围,第一个声明是隐藏的所有可见性。类似地,discriminant_specification或parameter_specification隐藏在相应完成或相应接受语句的相应判别规范或参数规范。
- (20)
- 库单元的声明(包括library_unit_renaming_declaration)对所有可见性都是隐藏的,除了位于其声明区域或范围内的位置引用它的with_clause。对于每个声明或将泛型单元重命名为某个父泛型的子单元包中,立即嵌套了相应的声明在父对象的每个实例中。这样的嵌套声明是除了在提到子级的withclause的范围。
- (21)
- 带有defining_identifier或defining_perator_symbol的声明是在其直接范围内立即可见(因此直接可见)除非隐藏在直接可见的位置,如下所示:
- (22)
- 声明在声明的同形异义词的直接作用域,如果同形异义词出现在内部声明区域内;
- (23)
- 声明在隐藏的地方也被隐藏,无法直接看到从所有能见度来看。
名称解析规则
- (24)
- direct_name应解析为表示直接可见的声明其定义名称与direct_name相同。选择器名称应解析为表示其定义名称与相同的可见声明选择器名称。
- (25)
- 这些关于可见性和直接可见性的规则不适用于context_clause、parent_unit_name或出现在位置的杂注编译单元。有关这些上下文,请参阅规则10.1.6中,``环境级别可见性规则“”。
合法性规则
- (26)
- 如果出现同形图,则显式声明是非法的直接位于同一声明区域内,该区域在该位置可见声明,并且不会被显式宣言。类似地,如果子单元的context_clause是非法的提到(在withclause中)某个库单元,并且有一个同义词在相应存根位置可见的库单元,以及同形异义词和提到的库单元都立即声明在同一声明区域内。这些规则也适用于调度在通用单元实例的可见部分声明的操作。然而,它们不适用于实例中的其他可重载声明;这样的声明在实例中可能有符合类型的概要文件,很长一段时间因为泛型中的相应声明不符合类型。
-
- (27)
(5) 编译单元的可见性遵循环境10.1.4中,除了需要应用with_clause以获得library_unit_declaration或library_unit_nameing_declariation的可见性之外。
- (28)
(6) 除了上述可见性规则外在中的给定位置出现direct_name或selector_name文本可以依赖于重载规则(见8.6).
- (29)
(7) 不是标识符、character_literal或operator_symbol需要相应的宣言。确定了不需要可见性的上下文通过在语法中直接使用这三个语法类别之一规则,而不是使用direct_name或selector_name。
--通过电子邮件将评论、补充、更正、抱怨、荣誉等发送至:
马格努斯·坎佩--M.Kempe@ieee.org
版权声明
最后生成的页面:95-03-12