場合によっては、変換後の RPG IV ソースを実際にコンパイルするまでエラーが 見付からないことがあります。 このタイプの変換エラーは通常、/COPY コンパイラー指示ステートメントの使 用に関連しています。 これらのエラーは 2 つのカテゴリー、すなわち 組み合わせ問題および文脈依存問題に分類されます。 これらの問題が起こる理由およびその分析解決方法の説明は次のとおりです。
RPG III 言語と RPG IV 言語との相違点のために、変換援助プログラムは、特 定のソースの順序を変えなければなりません。この順序変えの例は、RPG III ソース・メンバー TEST1 の場合の ソース変換の例に示されています。データ構造 DS1 の配置を 図 215 と 図 216 で比較した場合に、データ構造 DS1 が レコード様式 FORMAT1 の前にくるように移動されたことが 分ります。
今、RPG III メンバー TEST1 が 2 つのメンバー TEST2 および COPYDS1 に分割 されているものとします。ここで、データ構造 DS1 と名前付き固定情報 CONST1 は、 コピー・メンバー COPYDS1 に入っています。 このコピー・メンバーはソース TEST2 に含まれます。 図 222 と 図 223 は、 それぞれ TEST2 と COPYDS1 のソースを示します。
H TSTPGM FFILE1 IF E DISK COMM1 FQSYSPRT O F 132 OF LPRINTER LQSYSPRT 60FL 56OL E ARR1 3 3 1 COMM2 E ARR2 3 3 1 IFORMAT1 I OLDNAME NAME /COPY COPYDS1 C ARR1,3 DSPLY C READ FORMAT1 01 C NAME DSPLY C SETON LR C EXCPTOUTPUT OQSYSPRT E 01 OUTPUT O ARR2,3 10 ** 123 ** 456
I* DATA STRUCTURE COMMENT IDS1 DS I 1 3 FIELD1 I* NAMED CONSTANT COMMENT I 'XYZ' C CONST1 COMM3 I 4 6 ARR1
この場合には、変換援助プログラムはメンバー TEST2 およびコピー・メンバー COPYDS1 の両方を正しく変換します。 ただし、コピー・メンバーは、コンパイル時に 組み込まれる時に、/COPY コンパイラー指示ステートメントが置かれている FORMAT1 の下に 挿入されます。 結果として、コピー・メンバー COPYDS1 のすべてのソース行が "ソース・レコードの順序が 違っている" というエラーを受け取ります。 RPG IV では、定義仕様書は入力仕様書より前になければなりません。
/COPY メンバーの内容が不明なので、変換援助 プログラムは /COPY 指示ステートメントを FORMAT1 の上に移動できなかった ことに、注意してください。
この種の問題の訂正方法には次の 2 つがあります。
この方法は簡単であり、時間を最も有効に利用できます。ただし、各ソース・メンバーに /COPY メンバーを 含むことにより、アプリケーション・プログラムの保守容易性は減少します。
この種の問題の例としては、ほかに次のものがあります。
RPG III の場合、ファイル仕様書 (補足 L) およびファイル仕様書 (補足 E) のレコード・アドレス・ファイルはファイル記述仕様書のキーワード (RAFDATA、FORMLEN、および FORMOFL) に変換されます。 /COPY メンバーの内容に、ファイル仕様書 (補足 L) または ファイル仕様書 (補足 E) の レコード・アドレス・ファイル、あるいはその両方が含まれているが、 対応するファイル記述仕様書が含まれていない場合には、 変換援助プログラムはキーワードの挿入位置が分りません。
ソース変換の例で述べたように、RPG IV では、独立型配列とデータ 構造サブフィールドを同じ名前で定義することはできません。したがって、例 TEST1 (図 216) で示したように、変換 援助プログラムはこの 2 つの定義を組み合わせなければなりません。しかし、配列およびデータ構造サブフィールドが同じソース・メンバーに ない (すなわち、一方または両方が /COPY メンバーにある) 場合には、 この組み合わせを実行することはできず、結果としてコンパイル時エラーと なります。
例 TEST1 (図 216) で示したように、コンパイル時配列がデー タ構造サブフィールド定義と組み合わされた場合には、配列データのロードが 影響を受けることがあります。 この問題を解決するために、少なくとも 1 つのコンパイル時配列が組み合わ された場合には、コンパイル時配列データが新しい **CTDATA 形式に変更され ます。 しかし、配列およびデータが同じソース・メンバーにない (すなわち、一方 または両方が COPY メンバーにある) 場合には、**CTDATA 形式を使用するコンパイル時 データ・レコードの命名は適切に進めることはできません。
RPG III では、基本ソース・メンバーの前後の仕様書の文脈がない /COPY メンバーで は仕様書のタイプを判別できないことがあります。 この問題には次の 2 つの場合があります。
I* RPG III ソース・メンバーが、以下のフィールド FIELD1 および I* FIELD2 を記述するソース・ステートメントしか含んでいない場合、 I* 変換援助プログラムは変換の方法を判別できません。 I* これらのステートメントは、(定義仕様書に変換される) I* データ構造フィールドである場合も、(入力仕様書に変換される) I* プログラム記述ファイル・フィールドである場合もあります。 I 1 3 FIELD1 I 4 6 FIELD2
I* RPG III ソース・メンバーが、以下のフィールド CHAR を I* 記述するソース・ステートメントしか含んでいない場合、 I* 変換援助プログラムは変換の方法を判別できません。 I* このステートメントは、(定義仕様書に変換される) I* 外部記述データ構造フィールドの名前変更である場合も、 I* (入力仕様書に変換される) 外部記述ファイル・フィールドの I* 名前変更である場合もあります。 I CHARACTER CHAR
上の 2 つの例では、データ構造が仮定され、定義仕様書が作成されます。 入力仕様書コードを含むコメントのブロックも作成されます。 例えば、変換援助プログラムは図 224 のソースを図 226 に示されているコードに変換します。 入力仕様書コードが必要な場合には、定義仕様書を削除し、 対応する入力仕様書からアスタリスクを消去してください。
D* RPG III ソース・メンバーが、以下のフィールド FIELD1 および D* FIELD2 を記述するソース・ステートメントしか含んでいない場合、 D* 変換援助プログラムは変換の方法を判別できません。 D* これらのステートメントは、(定義仕様書に変換される) D* データ構造フィールドである場合も、(入力仕様書に変換される) D* プログラム記述ファイル・フィールドである場合もあります。 D FIELD1 1 3 D FIELD2 4 6 I* 1 3 FIELD1 I* 4 6 FIELD2
この種の問題を訂正するためには 2 つの方法があることを覚えておいてください。CVTRPGSRC コマンドの EXPCPY(*YES) オプションを使用するか、あるいは変換 後にコードを手操作で訂正してください。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.