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.
*************************************************** *BYE ***************************************************
************************************************** *HELLO ***************************************************
(oln,ofn,iln,ifn)
<?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 파일이 컴파일 오류 "DSPLAY" 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은 작업이 완료되면 삭제되는 임시 파일임을 판별할 수 있습니다.
oln = 56 ofn = 1STATEMENTTABLE에서 iln과 ifn을 찾아야 합니다. 여기서 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>