0

作为一个例子,让我们假设以下设置:

具有显式标记的标记环境的模块定义 A 定义类型 foo。并且具有隐式标记环境的模块 B 导入 foo 并将其分配给 bar。

使用模块 B 读取流时,我不清楚哪种标记环境有效。模块 B 是否定义了 bar 的标记环境(隐式)(被导入 foo)或者声明它的模块的标记环境(模块 A 中的 foo 因此显式)有效?

我希望我能很好地解释这个问题

4

1 回答 1

2

首先,导入不是像 C 中的 #include 那样的文本内容。它只是使其他模块中的类型可以访问,而无需使用它们的模块名称来限定它们。

X.680 13.1 Note 4专门针对您的问题:

模块定义的“TagDefault”值仅影响模块中明确定义的那些类型。它不影响导入类型的解释。

但是请注意,如果在模块 B 中(导入了 foo),则编写:

酒吧 ::= [应用程序 5] Foo

这相当于:

Bar ::= [应用程序 5] 隐式 Foo

因为在定义 TaggedType 的模块 B 中,标记环境是隐式的。

注释的意思是,如果在模块 A 中,您有:

Foo ::= 序列 { x [0] INTEGER }

那么 x 上的标记是 EXPLICIT 标记,因为模块 A 中的标记环境是显式的,并且 Foo 将始终以这种方式处理,即使在使用其隐式标记环境导入模块 B 时也是如此。

于 2013-03-26T13:16:14.403 回答