所谓嵌套,实际上也可以理解为一种包含关系。在COBOL中的嵌套子程序,存在两种包含关系。其中一种为直接包含,另一种为间接包含。直接包含对应于一层嵌套,间接包含对应于多层嵌套。下面,首先看一段嵌套子程序的代码示例。
IDENTIFICATION DIVISION.
PROGRAM-ID PGM-A.
PROCEDURE DIVISION.
DISPLAY ‘THIS IS PROGRAM A’.
CALL ‘PGM-B’.
CALL ‘PGM-C’.
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID PGM-B.
PROCEDURE DIVISION.
DISPLAY ‘THIS IS PROGRAM B’.
EXIT PROGRAM.
END PROGRAM B.
IDENTIFICATION DIVISION.
PROGRAM-ID PGM-C.
PROCEDURE DIVISION.
DISPLAY ‘THIS IS PROGRAM C’.
CALL ‘PGM-C1’.
CALL ‘PGM-C2’.
EXIT PROGRAM.
IDENTIFICATION DIVISION.
PROGRAM-ID PGM-C1.
PROCEDURE DIVISION.
DISPLAY ‘THIS IS PROGRAM C1’.
EXIT PROGRAM.
END PROGRAM C1.
IDENTIFICATION DIVISION.
PROGRAM-ID PGM-C2.
PROCEDURE DIVISION.
DISPLAY ‘THIS IS PROGRAM C2’.
EXIT PROGRAM.
END PROGRAM C2.
END PROGRAM C.
END PROGRAM A.
通过以上代码注意到,在嵌套子程序中通常是根据END PROGRAM语句表示程序的结束。实际上,对于以上嵌套子程序,分别有以下直接和间接包含关系。
q PGM-A为其中的主程序。该程序直接包含的程序有PGM-B和PGM-C。间接包含的程序有PGM-C1和PGM-C2。
q PGM-C直接包含的程序为PGM-C1和PGM-C2。该程序没有间接包含的程序。
q PGM-B以及PGM-C1和PGM-C2都既没有直接包含的程序,也没有间接包含的程序。
通过以上各程序间的包含(嵌套)关系,可以得出该嵌套子程序的内部结构。实际上,以上嵌套子程序中连同主程序在内共有5个程序。并且,里面嵌套层数最多为2层。
总之,了解嵌套子程序的结构,关键是要找准其中每一个程序的起始和结束标志。其中程序的起始标志是通过标志部字段IDENTIFICATION DIVISION表示的。而程序的结束标志在此处则是通过END PROGRAM语句表示。