割り当ての実行方法
エレメントの割り当て
エレメントの割り当ては、次のように行われます。
- 最初に評価されるのは、ターゲット変数の添え字、POSITION 属性式、およびロケーター修飾、ならびに SUBSTR 疑似変数参照の 2 番目と 3 番目の引数です。
- 次に右辺の式が評価されます。
- それぞれのターゲット変数ごとに (左から右の順で)、式の値がデータ変換規則に従ってターゲット変数の特性に変換されます。
そのあと、変換後の値がターゲット変数に割り当てられます。
集合の割り当て
集合の割り当て (配列割り当ておよび構造体割り当て) は、
次のように一連のエレメントの割り当てに展開されます。
- 元のステートメントのラベル接頭部が、生成された別のステートメントの先頭にある
ヌル・ステートメントに付けられます。
- 配列割り当てや構造体割り当ては、複数あるときは、繰り返し行われます。
- 先行の配列割り当てまたは構造体割り当てによって、なんらかの代入ステートメントが
生成されることがあります。
集合割り当てにおける最初のターゲット変数を、マスター変数と
いいます
(これは疑似変数の最初の引数であることもあります)。 マスター変数が
配列の場合は、配列式が実行されます。それ以外の場合は、構造式が実行されます。
- 集合割り当てが所定の 1 組の条件を満たしているときは、集合割り当ては、
一連のエレメント割り当てに展開されずに、全体として行われます。
1 組の条件とは、配列が介在配列でないか、または複数の構造体が隣接しており、
しかも同一フォーマットになっているかということです。
配列割り当てでは、
すべての配列オペランドの次元数および境界が同じでなければなりません。
配列の割り当ては、次のようにループに展開されます。
do J1 = lbound(Master-variable,1) to
hbound(Master-variable,1);
do J2 = lbound(Master-variable,2) to
hbound(Master-variable,2);
·
·
·
do Jn = lbound(Master-variable,N) to
hbound(Master-variable,N);
generated assignment statement
end;
この展開において、n は、
この割り当てに関与するマスター変数の次元数です。
生成された代入ステートメントでは、すべての配列オペランドに、
ダミー変数 j1 から jn を
使用して (左から右へ) 完全に添え字が付けられます。
添え字を付けずに配列オペランドを書いた場合、その配列オペランドは、j1 から jn の添え字だけを持つことになります。
クロスセクション表記を使用する場合、アスタリスクは、j1 から jn で置き換えられます。
元の代入ステートメントにこの条件接頭語が付いている場合は、
生成された代入ステートメントにこの条件接頭語が付けられます。
生成された代入ステートメントが構造体の割り当てであれば、
そのステートメントは次のように展開されます。
BY NAME オプションの指定がない構造体割り当ての場合、
- どのオペランドも、配列であってはなりませんが、配列を含む構造体に
することはできます。
- 構造体に直接含まれる項目数は、すべての構造体オペランドについて同数 k でなければ
なりません。
-
代入ステートメントは、生成された k 個の代入ステートメントで
置き換えられます。
- i 番目の生成された代入ステートメントが、
それぞれの構造体オペランドを i 番目に含まれる項目で置き換えることによって、
もとの代入ステートメントから派生します。
そのように生成された代入ステートメントは、さらに展開を要求することができます。
- 元のステートメントの条件接頭語が、生成されたすべての代入ステートメントに付けられます。
BY NAME オプションの指定がある構造体割り当ての
場合、構造体の割り当ては下記のステップに従って展開されます。
これらのステップでは、さらに配列の割り当てや構造体の割り当てを
生成することができます。
どのオペランドも配列であってはなりません。
- マスター変数に直接含まれている最初の項目が検討の対象になります。
- それぞれの構造体オペランドとターゲット変数に同じ名前の項目が直接
含まれている場合は、以下に述べるようにして
代入ステートメントが生成されます。
- それぞれの構造体オペランドとターゲット変数を、
それぞれに直接含まれている同名の項目で置き換えるという方法で、
代入ステートメントが派生します。
いずれかの構造体に同名の項目が含まれていない場合は、ステートメントは
生成されません。
- 生成された代入ステートメントが構造体の割り当てまたは構造体の配列の割り当てで
ある場合は、BY NAME が付けられます。
- 元の代入ステートメントの条件接頭語が、生成されたすべての代入ステートメントに
付けられます。
- ターゲット構造体には、共用体は含まれません。
- マスター変数に直接含まれている各項目ごとに、ステップ 2 が
繰り返されます。
マスター変数に含まれている項目の順に、
代入ステートメントが生成されます。
|
This information center is powered by Eclipse technology. (http://www.eclipse.org)