構造体のメンバーまたは共用体のメンバーは、その名前が固有であれば、 名前だけで参照できます。 別のメンバーが同じ名前を持つ場合には、そのレベルが同じか、異なるのか、 またはあいまいになります。 あいまいになる場合、正しいメンバーを固有に識別するには修飾された参照を 行わなければなりません。
修飾された参照 とは、ピリオドによって接続された 親メンバーにあたる 1 つ以上の名前で修飾されているメンバー名のことです。 (修飾された 参照の構文については、式および参照を参照)。 ピリオドの前後には、ブランクがあってもかまいません。
修飾は、レベルの順番に従わなければなりません。 つまり、最高位レベルの名前は最初に、最低位レベルの名前は最後になければなりません。
レベル 1 の構造体名または共用体名は、ブロックの有効範囲内で 固有でなければなりませんが、メンバー名は、直接の親のもとで同じ 論理レベルに現れない限り、固有である必要はありません。 修飾名は、それが現れるブロック内で、同じ構造体で固有に 参照される必要がある場合にしか使用することができません。 次の例では、x.y (19) の値は表示されますが、 値 (17) は表示されません。
dcl Y fixed init(17); begin; dcl 1 X, 2 Y fixed init(19); display( Y ); end;
参照の実行は、通常、参照を含む一番内側にあるブロック内で宣言された名前に適用されます。
以下の例では、あいまいな参照とあいまいでない参照の両方を説明しています。 以下の例では、 A.C は内側のブロックの C を参照しています。 D.E は外側のブロックの E を参照しています。
declare 1 A, 2 C, 2 D, 3 E;
begin;
declare 1 A, 2 B, 3 C, 3 E;
A.C = D.E;
次の例では、D は 2 回宣言されています。 A.D の参照を行うと 2 番目の D が参照されます。 これは、A.D が、2 番目の D のみの 完全修飾だからです。 最初の D は、A.C.D として参照されます。
declare 1 A,
2 B,
2 C,
3 D,
2 D;
次の例では、A.C の参照はあいまいです。 これは、C がこの参照によって完全に修飾されないためです。
declare 1 A,
2 B,
3 C,
2 D,
3 C;
次の例では、A の参照を行うと最初の A が参照され、 A.A の参照を行うと 2 番目の A が参照され、 A.A.A の参照を行うと 3 番目の A が参照されます。
declare 1 A,
2 A,
3 A;
次の例では、X の参照を行うと 最初の DECLARE ステートメントが参照されます。 Y.Z の参照はあいまいなものとなります。 Y.Y.Z は 2 番目の Z を参照し、 Y.X.Z は最初の Z を参照します。
declare X;
declare 1 Y,
2 X,
3 Z,
3 A,
2 Y,
3 Z,
3 A;
名前の修飾については、宣言の有効範囲を参照してください。