Rational Developer for System z

샘플 코드 훑어보기

이 주제에서는 샘플 코드 스니펫을 훑어보고, System z®용 Rational® Developer 오류 피드백 메커니즘과 여러 프리프로세서 지원을 사용하여 프리프로세서의 결과물을 링크할 수 있는 방법에 대해 설명합니다.

코드 스니펫

이 예제에서는 다음 코드 스니펫을 참조합니다.
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.
단편 MEL.A001.DATA.FRAGMENT(BYE)
***************************************************
*BYE
***************************************************
단편 MEL.A001.DATA.FRAGMENT(HELLO)
 **************************************************
 *HELLO
 ***************************************************

프리프로세서 출력

이 절의 끝에 있는 코드 샘플은 프리프로세서의 출력 XML 파일을 표시합니다. 프리프로세서 XML 파일에는 <FILEREFERENCETABLE>에서 읽힌 소스의 값 세트가 포함됩니다. 또한 이 XML 파일에는 <MESSAGE> 태그 사이에 프리프로세서가 생성한 메시지가 있습니다. <OUTFILEREFERENCETABLE> 값은 컴파일러 이용을 위해 프리프로세서가 작성한 출력 파일을 기술합니다. <STATEMENTTABLE> 값은 프리프로세서가 작성한 각각의 출력 행을 기술합니다. 4중 순서 지정된 각각은 단일 출력 행을 다음 방식으로 기술합니다.
(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; was invalid. Skipped to the next verb, period or procedure-name definition이 있음을 보여줍니다. 이 오류는 입력 파일 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은 작업이 완료되면 삭제되는 임시 파일임을 판별할 수 있습니다.

두 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에서 ilnifn을 찾아야 합니다. 여기서 4중 순서 지정은 (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>
The "PERFORM" statement did not have a matching scope terminator.  A scope terminator was assumed on line 82.  The execution results may not be correct.
</MSGTEXT>
	</MESSAGE>
	<MESSAGE>
<MSGNUMBER>IGYPS2072-S</MSGNUMBER>
<MSGLINE>56</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
"DSPLAY" was invalid.  Skipped to the next verb, period or procedure-name definition.
</MSGTEXT>
	</MESSAGE>
	<MESSAGE>
<MSGNUMBER>IGYPS0002-E</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
A character other than "*", "D", "/" or "-" was found in column 7.  A blank was assumed.
</MSGTEXT>
	</MESSAGE>
	<MESSAGE>
<MSGNUMBER>IGYPS2008-E</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
A period was required before procedure-name "T".  A period was assumed before "T".
</MSGTEXT>
	</MESSAGE>
	<MESSAGE>
<MSGNUMBER>IGYPS2145-E</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
A period was required.  A period was assumed before "NOTTHERE".
</MSGTEXT>
	</MESSAGE>
	<MESSAGE>
<MSGNUMBER>IGYPS2015-I</MSGNUMBER>
<MSGLINE>57</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
The paragraph or section prior to paragraph or section "NOTTHERE" did not contain any statements.
</MSGTEXT>
	</MESSAGE>
	<MESSAGE>
<MSGNUMBER>IGYPS2145-E</MSGNUMBER>
<MSGLINE>58</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
A period was required.  A period was assumed before "DISPLAY".
</MSGTEXT>
	</MESSAGE>
	<MESSAGE>
<MSGNUMBER>IGYPS2113-E</MSGNUMBER>
<MSGLINE>75</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
The explicit scope terminator "END-PERFORM" was found without a matching verb.  The scope terminator was discarded.
</MSGTEXT>
	</MESSAGE>
</PACKAGE>
</BUILD>

이용 약관 | 피드백

이 Information Center는 Eclipse 기술로 구현됩니다. (http://www.eclipse.org 웹사이트 참조)