Ö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.
Ön işlemci XML dosyasından aşağıdaki bilgiler saptanabilir:
  • Ö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.
Şekil 1. Çıkış XML dosyası

<?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:&quot;DSPLAY&quot; 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.

İki XML dosyasını birleştirerek, derleme hatasını eşlemek için doğru kaynak satırını bulabilirsiniz:
  • 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.
Başka bir şekilde ifade etti:
oln = 56
ofn = 1
STATEMENTTABLE 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>