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>
El código de ejemplo al final de esta sección muestra el archivo XML de salida del compilador. El compilador genera el archivo XML del compilador cuando se utilizan las opciones de compilación adecuadas. Estas opciones de compilador se insertan automáticamente cuando se realiza una comprobación de sintaxis, una compilación o una operación de mostrar dependencias. El archivo XML del compilador tiene un formato algo distinto al del archivo XML del preprocesador. Los preprocesadores y los programas de creación escritos por usuario deberán seguir el formato del archivo XML del preprocesador.
El archivo XML del compilador muestra que hay un error de compilación: "DSPLAY" no es válido. Se ha saltado al siguiente verbo, punto o definición de nombre de procedimiento. Este error pertenece a la línea 56 del archivo de entrada 1, SYS09225.T113157.RA000.MEL1.TEMPFILE.H01. El compilador solo informa de errores en el archivo que se le ha proporcionado. El compilador no conoce la existencia de MEL.A001.DATA.COBOL(DEMODATA). Conoce el archivo de entrada número 1, SYS09225.T113157.RA000.MEL1.TEMPFILE.H01. A partir del convenio de denominación y del procedimiento JCL que se utilizó para invocar al preprocesador y al compilador, puede determinar que SYS09225.T113157.RA000.MEL1.TEMPFILE.H01 es un archivo temporal que se ha suprimido una vez finalizado el trabajo.
oln = 56 ofn = 1A partir de la STATEMENTTABLE, debe encontrar iln, y ifn donde el cuádruple ordenado es (56,1,iln,ifn). A partir de esto puede determinar lo siguiente:
iln = 54 ifn = 1Resumiendo, el compilador ha informado de un error en la línea 56 del archivo SYS09225.T113157.RA000.MEL1.TEMPFILE.H01. Esta línea corresponde a la línea 54 de MEL.A001.DATA.COBOL(DEMODATA). El error del compilador deberá figurar en la línea 54 del archivo MEL.A001.DATA.COBOL(DEMODATA).
<?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> La sentencia "PERFORM" no tenía un terminador de ámbito coincidente. Se ha asumido un terminador en la línea 82. Los resultados de la ejecución pueden no ser correctos. </MSGTEXT> </MESSAGE> <MESSAGE> <MSGNUMBER>IGYPS2072-S</MSGNUMBER> <MSGLINE>56</MSGLINE> <MSGFILE>1</MSGFILE> <MSGTEXT> "DSPLAY" no es válido. Se ha saltado al siguiente verbo, punto o definición de nombre de procedimiento. </MSGTEXT> </MESSAGE> <MESSAGE> <MSGNUMBER>IGYPS0002-E</MSGNUMBER> <MSGLINE>57</MSGLINE> <MSGFILE>1</MSGFILE> <MSGTEXT> Se ha encontrado un carácter distinto a "*", "D", "/" o "-" en la columna 7. Se ha asumido un blanco. </MSGTEXT> </MESSAGE> <MESSAGE> <MSGNUMBER>IGYPS2008-E</MSGNUMBER> <MSGLINE>57</MSGLINE> <MSGFILE>1</MSGFILE> <MSGTEXT> Era necesario un punto antes del nombre de procedimiento "T". Se ha asumido un punto antes de "T". </MSGTEXT> </MESSAGE> <MESSAGE> <MSGNUMBER>IGYPS2145-E</MSGNUMBER> <MSGLINE>57</MSGLINE> <MSGFILE>1</MSGFILE> <MSGTEXT> Era necesario un punto. Se ha asumido un punto antes de "NOTTHERE". </MSGTEXT> </MESSAGE> <MESSAGE> <MSGNUMBER>IGYPS2015-I</MSGNUMBER> <MSGLINE>57</MSGLINE> <MSGFILE>1</MSGFILE> <MSGTEXT> El párrafo o sección anterior al párrafo o sección "NOTTHERE" no contenía sentencias. </MSGTEXT> </MESSAGE> <MESSAGE> <MSGNUMBER>IGYPS2145-E</MSGNUMBER> <MSGLINE>58</MSGLINE> <MSGFILE>1</MSGFILE> <MSGTEXT> Era necesario un punto. Se ha asumido un punto antes de "DISPLAY". </MSGTEXT> </MESSAGE> <MESSAGE> <MSGNUMBER>IGYPS2113-E</MSGNUMBER> <MSGLINE>75</MSGLINE> <MSGFILE>1</MSGFILE> <MSGTEXT> Se ha encontrado el terminador de ámbito explícito "END-PERFORM" sin un verbo correspondiente. Se ha descartado el terminador de ámbito. </MSGTEXT> </MESSAGE> </PACKAGE> </BUILD>