Örnek kod gezme
Örnek kod parçacıkları, Developer for z/OS® hata geribildirim mekanizması ve birden çok ön işlemci desteği kullanılarak önişlemcilerin çıkışının nasıl bağlanabileceğini gösterir.
Kod Parçacıkları
Bu örnek, aşağıdaki kod parçacıklarını gösterir:- COBOL kesimi
- Aşağıdaki COBOL program bölümü DEMODATA kaynak kodundan geliyor. Bu program önceden işlendi ve derlendi. FRAGMENT ile başlayan çizgiler 48, 55 ve 74 numaralı satırlardır. Yanlış yazılmış görüntü birimi deyimi "DSPLAY" 54. satırda. Ön işlemcinin o satırdaki bir hatayı işaretlemesi için, FRAGMNT birleşiminde NOTorada üyesi kasıtlı olarak eksik.
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. - Parça MEL.A001.DATA.FRAGMENT(BYE)
*************************************************** *BYE ***************************************************- Parça MEL.A001.DATA.FRAGMENT(HELLO)
************************************************** *HELLO ***************************************************
Ön işlemci çıkışı
Bu bölümün sonundaki kod örneği, ön işlemcinin çıkış XML dosyasını gösterir. Ön işlemci XML dosyası, < FILEREFERENCETABLE> içinde okunan kaynak için bir değer kümesi içerir. Bu XML dosyası, ön işlemcinin < MESSAGE> etiketi arasında oluşturduğu iletileri de içeriyor. < OUTFILEREFERENCETABLE > değerleri, ön işlemcinin derleyici tarafından kullanım için yarattığı çıkış dosyalarını açıklar. < STATEMENTTABLE > değerleri, ön işlemcinin yarattığı her çıkış satırını açıklar. Sıralı dörtlülerin her biri, tek bir çıkış satırını aşağıdaki şekilde açıklar:(oln,ofn,iln,ifn)- oln
- Çıkış satırı numarası: Genişletilmiş kaynak dosyadaki satır numarası.
- n
- Çıkış dosyası numarası. Bir ön işlemci genellikle tek bir çıkış dosyası yayar, ancak bir ön işlemcinin kopya üyelerini derleyiciye beslemek için yazması mümkündür.
- iln
- Giriş satırı numarası: Çıkış satırının yazılmasına neden olmak için işlenen giriş dosyasındaki satır numarası.
- ifn
- Giriş dosyası numarası: Okunmakta olan giriş dosyasının dosya numarası. Iln tarafından açıklanan giriş satırını içerir.
- Önceden işlenen program MEL.A001.DATA.COBOL(DEMODATA)idi.
- Ön işlem sırasında kullanılan dosyalar: MEL.A001.DATA.COBOL(DEMODATA), MEL.A001.DATA.FRAGMENT(HELLO)ve MEL.A001.DATA.FRAGMENT(BYE).
- Ön işlemci SYS09225.T113157.RA000.MEL1.TEMPFILE.H01adlı tek bir çıkış dosyası üretti.
- Ön işlemci hatasıDD:FRAGMNT(NOTTHERE) not foundGiriş kaynak dosyası 1 'in ( MEL.A001.DATA.COBOL(DEMODATA)) 55. satırında oluştu.
- Deyim çizelgesi girişi (48,1,1, 2), çıkış kütüğü 1 'in ( SYS09225.T113157.RA000.MEL1.TEMPFILE.H01) 48 numaralı satırının, giriş kütüğü 2 'nin ( MEL.A001.DATA.FRAGMENT(HELLO)) 1 numaralı satırının okunmasının sonucu olarak yazıldığını gösterir.
<?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>
Derleyici çıkışı
Bu bölümün sonundaki kod örneği, derleyicinin çıkış XML dosyasını gösterir. Derleyici XML dosyası, uygun derleyici seçenekleri kullanıldığında derleyici tarafından oluşturulur. Bir sözdizimi denetimi, oluşturma ya da bağımlılıkları gösterme işlemi gerçekleştirildiğinde bu derleyici seçenekleri otomatik olarak eklenir. Derleyici XML dosyası, ön işlemci XML dosyasından biraz farklı bir biçime sahip. Kullanıcı tarafından yazılan önişlemciler ve oluşturucular, önişlemci XML dosyası biçimini izlemelidir.
Derleyici XML dosyası bir derleme hatası olduğunu gösteriyor:"DSPLAY" was invalid. Skipped to the next verb, period or procedure-name definition. Bu hata, giriş kütüğü 1 'in ( SYS09225.T113157.RA000.MEL1.TEMPFILE.H01) 56. satırıdır. Derleyici yalnızca, dosyaya beslenen dosyaya ilişkin hataları bildirir. Derleyicinin MEL.A001.DATA.COBOL(DEMODATA)hakkında bilgisi yoktur. Giriş dosyası numarası 1 'i ( SYS09225.T113157.RA000.MEL1.TEMPFILE.H01) biliyor. Adlandırma kuralından ve ön işlemciyi ve derleyiciyi çağırmak için kullanılan JCL yordamından, SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 dosyasının iş tamamlandıktan sonra silinen geçici bir dosya olduğunu saptayabilirsiniz.
- Derleme hatası, 1 numaralı dosyaya göre bildirildi.
- Derleyici FILEREFERENCETABLE, 1 numaralı kütüğün SYS09225.T113157.RA000.MEL1.TEMPFILE.H01olduğunu gösterir.
- Ön işlemci XML dosyasından, OUTFILEREFERENCETABLE içinde SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 kütüğünü bulabilirsiniz. OUTFILENUMBER değeri 1 'dir. Bu nedenle, çıkış dosyası numarası 1, çıkış satırı numarası 56 'dır.
oln = 56
ofn = 1STATEMENTTABLE içinden ilnve ifn' i (burada sıralı dörtlü) bulmanız gerekir (56,1,iln,ifn). Bu bilgilerden aşağıdaki değerleri belirleyebilirsiniz:iln = 54
ifn = 1Özet olarak, derleyici SYS09225.T113157.RA000.MEL1.TEMPFILE.H01dosyasının 56. satırında bir hata bildirdi. Bu satır, MEL.A001.DATA.COBOL(DEMODATA)içindeki 54 numaralı satıra karşılık gelir. Derleme hatası, MEL.A001.DATA.COBOL(DEMODATA)kütüğünün 54 numaralı satırında bildirildi.
<?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>