Rational Developer for System z バージョン 7.6

サンプル・コードのウォークスルー

このトピックでは、サンプル・コード・スニペットをウォークスルーし、プリプロセッサーからの出力を、Rational® Developer for System z® エラー・フィードバック・メカニズムおよび複数プリプロセッサー・サポートを使用してどのようにリンクできるかについて説明します。

コード・スニペット

この例では、以下のコード・スニペットへの参照を作成します。
COBOL セグメント
以下の COBOL プログラム・セグメントは、DEMODATA ソース・コードからのものです。 このプログラムは、プリプロセスされ、コンパイルされました。FRAGMENT で始まる行は、48 行目、55 行目、および 74 行目にあります。誤ったつづりで表示されているステートメント「DSPLAY」は、54 行目にあります。メンバー NOTTHERE は、意図的に FRAGMNT 連結から除かれているため、プリプロセッサーはその行にエラーのフラグを立てます。
       Procedure Division.
FRAGMENT HELLO;
           Initialize Program-pass-fields
                      Program-other-fields
                      Program-flags.
           copy  MYINC6.
           Perform until Loop-done
               Dsplay " "
FRAGMENT NOTTHERE;
               Display "Enter a name or Q to quit:"
               Move Spaces to Input-name
               Accept Input-name
               IF Input-name = Spaces
                 Move "Q" to Input-name
               End-IF

               Move 1 to Char-count
               Inspect Input-name Tallying Char-count For Leading Spaces
               Move Input-name(Char-count: 30 - Char-count) to Temp-name

               If function upper-case (Temp-name) = "Q"
                     or Temp-name = Spaces
                  Set Loop-done to true
               Else
                  Call 'PrintApp' using Program-pass-fields
               End-if
           End-perform.
FRAGMENT BYE;
           Goback.
Fragment MEL.A001.DATA.FRAGMENT(BYE)
***************************************************
*BYE
***************************************************
Fragment MEL.A001.DATA.FRAGMENT(HELLO)
 **************************************************
 *HELLO
 ***************************************************

プリプロセッサーの出力

このセクションの最後に表示されているコード・サンプルは、プリプロセッサーの出力 XML ファイルを示しています。 プリプロセッサー XML ファイルには、読み取られるソースの値 <FILEREFERENCETABLE> が含まれています。この XML ファイルには、<MESSAGE> タグ間に、プリプロセッサーが生成したメッセージも含まれます。<OUTFILEREFERENCETABLE> の値は、コンパイラーによる使用のためにプリプロセッサーが作成した出力ファイルを説明します。 <STATEMENTTABLE> の値は、プリプロセッサーが作成した各出力行を説明します。 順序が付けられた各クワッドは、以下のようにして、単一の出力行を説明します。
(oln,ofn,iln,ifn)
oln
出力行番号。これは、拡張ソース・ファイル内の行番号です。
ofn
出力ファイル番号。これは、出力ファイル番号です。通常、プリプロセッサーは単一の出力ファイルしか出しませんが、プリプロセッサーは、コンパイラーに送られるコピー・メンバーを書き出すこともできます。
iln
入力行番号。これは、出力行が書き込まれるように処理された入力ファイルからの行番号です。
ifn
入力ファイル番号。これは、読み取られる入力ファイルのファイル番号です。 これには、iln によって説明されている入力データの行が含まれます。
プリプロセッサー XML ファイルから、以下の情報を判別することができます。
<?xml version="1.0" standalone="yes"?>
<BUILD>
<PACKAGE>
<FILEREFERENCETABLE>
<FILECOUNT>3</FILECOUNT>
<FILE>
<FILENUMBER>1</FILENUMBER>
<FILENAME>
MEL.A001.DATA.COBOL(DEMODATA)
</FILENAME>
</FILE>
<FILE>
<FILENUMBER>2</FILENUMBER>
<FILENAME>
MEL.A001.DATA.FRAGMENT(HELLO)
</FILENAME>
</FILE>
<FILE>
<FILENUMBER>3</FILENUMBER>
<FILENAME>
MEL.A001.DATA.FRAGMENT(BYE)
</FILENAME>
</FILE>
</FILEREFERENCETABLE>
<MESSAGE>
<MSGNUMBER>DEMO9999E</MSGNUMBER>
<MSGLINE>55</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
DD:FRAGMNT(NOTTHERE) not found
</MSGTEXT>
</MESSAGE>
<OUTFILEREFERENCETABLE>
<OUTFILECOUNT>
1
</OUTFILECOUNT>
<OUTFILE>
<OUTFILENUMBER>
1
</OUTFILENUMBER>
<OUTFILENAME>
SYS09225.T113157.RA000.MEL1.TEMPFILE.H01
</OUTFILENAME>
</OUTFILE>
</OUTFILEREFERENCETABLE>
<STATEMENTTABLE>
(1,1,1,1);(2,1,2,1);(3,1,3,1);(4,1,4,1);(5,1,5,1);(6,1,6,1);
(7,1,7,1);(8,1,8,1);(9,1,9,1);(10,1,10,1);(11,1,11,1);(12,1,12,1);
(13,1,13,1);(14,1,14,1);(15,1,15,1);(16,1,16,1);(17,1,17,1);(18,1,18,1);
(19,1,19,1);(20,1,20,1);(21,1,21,1);(22,1,22,1);(23,1,23,1);(24,1,24,1);
(25,1,25,1);(26,1,26,1);(27,1,27,1);(28,1,28,1);(29,1,29,1);(30,1,30,1);
(31,1,31,1);(32,1,32,1);(33,1,33,1);(34,1,34,1);(35,1,35,1);(36,1,36,1);
(37,1,37,1);(38,1,38,1);(39,1,39,1);(40,1,40,1);(41,1,41,1);(42,1,42,1);
(43,1,43,1);(44,1,44,1);(45,1,45,1);(46,1,46,1);(47,1,47,1);(48,1,1,2);
(49,1,2,2);(50,1,3,2);(51,1,49,1);(52,1,50,1);(53,1,51,1);(54,1,52,1);
(55,1,53,1);(56,1,54,1);(57,1,55,1);(58,1,56,1);(59,1,57,1);(60,1,58,1);
(61,1,59,1);(62,1,60,1);(63,1,61,1);(64,1,62,1);(65,1,63,1);(66,1,64,1);
(67,1,65,1);(68,1,66,1);(69,1,67,1);(70,1,68,1);(71,1,69,1);(72,1,70,1);
(73,1,71,1);(74,1,72,1);(75,1,73,1);(76,1,1,3);(77,1,2,3);(78,1,3,3);
(79,1,75,1);(80,1,76,1);(81,1,77,1);(82,1,78,1);(83,1,79,1);
</STATEMENTTABLE>
</PACKAGE>
</BUILD>

コンパイラー出力

このセクションの最後に表示されているコード・サンプルは、コンパイラーの出力 XML ファイルを示しています。このコンパイラー XML ファイルは、該当するコンパイル・オプションが使用されると、コンパイラーによって生成されます。 これらのコンパイラー・オプションは、構文検査、ビルド、または依存関係の表示操作が実行されるときに、自動的に挿入されます。 コンパイラー XML ファイルのフォーマットは、プリプロセッサー XML ファイルのフォーマットとはやや異なります。ユーザー作成のプリプロセッサーおよびビルダーは、プリプロセッサー XML ファイル・フォーマットに従う必要があります。

コンパイラー XML ファイルは、コンパイル・エラーがあることを示します。つまり、&quot;DSPLAY&quot; は無効でした。 次の verb、期間、またはプロシージャー名の定義にスキップします。 このエラーは、入力ファイル 1 SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 の 56 行目に関連します。 コンパイラーは、コンパイラーに送られたファイルに対するエラーしか報告しません。 コンパイラーは、MEL.A001.DATA.COBOL(DEMODATA) を認識しません。 コンパイラーは、入力ファイル番号 1 SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 を認識します。 命名規則から、およびプリプロセッサーおよびコンパイラーを呼び出すために使用された JCL プロシージャーから、SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 は、ジョブが完了したら削除される一時ファイルであるということを判別できます。

2 つの XML ファイルを組み合わせることで、コンパイラー・エラーを戻してマップするソース内の正しい行を見つけることができます。
  • コンパイラー・エラーは、ファイル番号 1 に対して報告されました。
  • コンパイラー FILEREFERENCETABLE は、ファイル 1 が SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 であることを示しています。
  • プリプロセッサー XML ファイルから、OUTFILEREFERENCETABLE にあるファイル SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 を見つけることができます。 この OUTFILENUMBER は 1 です。そのため、出力ファイル番号は 1 で、出力行番号は 56 です。
別の方法で表現すると、以下のようになります。
oln = 56
ofn = 1
STATEMENTTABLE から、iln、および ifn を探す必要があります。ここで、順序付きクワッドは (56,1,iln,ifn) です。 このことから、以下のことを判別することができます。
iln = 54
ifn = 1
つまり、コンパイラーがエラーを、ファイル SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 の 56 行目で報告したということです。 この行は、MEL.A001.DATA.COBOL(DEMODATA) の 54 行目に対応します。 コンパイラー・エラーは、ファイル MEL.A001.DATA.COBOL(DEMODATA) の 54 行目に対して報告される必要があります。
<?xml version="1.0" standalone="yes"?>
<!-- ************************************************************************************ -->
<BUILD>
<PACKAGE>
<FILEREFERENCETABLE>
<FILECOUNT>2</FILECOUNT>
<FILE>
<FILENUMBER>1</FILENUMBER>
<FILENAME>SYS09225.T113157.RA000.MEL1.TEMPFILE.H01</FILENAME>
</FILE>
<FILE>
<FILENUMBER>2</FILENUMBER>
<FILENAME>MEL.A001.COPYLIB1.COPYLIB(MYINC6)</FILENAME>
</FILE>
</FILEREFERENCETABLE>
<MESSAGE>
<MSGNUMBER>IGYPS2112-E</MSGNUMBER>
<MSGLINE>55</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
「PERFORM」ステートメントには、一致する範囲終了符号がありませんでした。範囲終了符号は、82 行目にあると想定されました。実行結果が正しくない可能性があります。
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS2072-S</MSGNUMBER>
<MSGLINE>56</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
「DSPLAY」が無効でした。次の verb、期間、またはプロシージャー名の定義にスキップします。
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS0002-E</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
「*」、「D」、「/」または「-」以外の文字が、列 7 で見つかりました。ブランクが想定されました。
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS2008-E</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
プロシージャー名「T」の前に期間が必要でした。期間は、「T」の前に想定されました。
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS2145-E</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
期間が必要でした。期間は、「NOTTHERE」の前に想定されました。
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS2015-I</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
パラグラフまたはセクション「NOTTHERE」に先行するパラグラフまたはセクションに、ステートメントが含まれていませんでした。
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS2145-E</MSGNUMBER>
<MSGLINE>58</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
期間が必要でした。期間は、「DISPLAY」の前に想定されました。
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS2113-E</MSGNUMBER>
<MSGLINE>75</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
この明示範囲終了符号「END-PERFORM」は、一致する verb なしで検出されました。この範囲終了符号は破棄されました。
</MSGTEXT>
</MESSAGE>
</PACKAGE>
</BUILD>

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)