• COBOL 程序结构


    COBOL 程序结构

    COBOL程序结构由部(division)组成,如下图所示:

    程序结构

    这些部简介如下:

    • **Sections(节)**是程序逻辑的逻辑细分。节是段落的集合。
    • **Paragraphs(段)**是一个节或部的细分。它可以是用户定义或预定义的名称,后面跟一个句点,由零个或多个句子/条目组成。
    • **Sentences(句子)**是一个或多个声明的组合。句子只出现在过程部(Procedure division)。一个句子必须以句点结束。
    • **Statements(语句)**是有意义的COBOL语句,执行一些进程。
    • **Characters(字符)**是在层级中最低的,不可分割。

    你可以通过以下示例将上述术语与COBOL程序联系起来:

    PROCEDURE DIVISION.
    A0000-FIRST-PARA SECTION.
    FIRST-PARAGRAPH.
    ACCEPT WS-ID            - Statement-1  -----|
    MOVE '10' TO WS-ID      - Statement-2       |-- Sentence - 1
    DISPLAY WS-ID           - Statement-3  -----|
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    部(Division)

    COBOL程序包括四个部。

    标识部(Identification Division)

    这是每一个COBOL程序的第一个也是唯一强制要求的部。程序员和编译器使用这个部来识别该程序。在这个部中,PROGRAM-ID是唯一强制要求的段落。PROGRAM-ID指定的程序名可包含1至30个字符。

    试试下面的例子。

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    PROCEDURE DIVISION.
    DISPLAY 'Welcome to Tutorialspoint'.
    STOP RUN.
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下面是JCL执行上面的COBOL程序。

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
    //STEP1 EXEC PGM=HELLO
    
    • 1
    • 2

    当你编译和执行上面的程序时,会产生以下结果:

    Welcome to Tutorialspoint
    
    • 1

    环境部(Environment Division)

    环境部用于指定程序的输入和输出文件。它由两个节组成:

    • **配置节(Configuration section)**可提供有关编写和执行程序的系统信息。它由两个段组成:

      源计算机(source computer):用于编译程序的系统。

      对象计算机(object computer):用于执行程序的系统。

    • **输入输出节(Input-Output section)**提供有关程序中要使用的文件的信息。它由两个段组成:

      文件控制(file control):提供在程序中使用的外部数据集的信息。

      IO控制(I-O control):提供在程序中使用的文件的信息。

    ENVIRONMENT DIVISION.
    CONFIGURATION SECTION.
       SOURCE-COMPUTER. XXX-ZOS.
       OBJECT-COMPUTER. XXX-ZOS.
    
    INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT FILEN ASSIGN TO DDNAME
       ORGANIZATION IS SEQUENTIAL.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    数据部(Data Division)

    数据部用于定义程序中使用的变量。它由四个节组成:

    • **文件节(File section)**用于定义文件的记录结构。
    • **工作存储节(Working-Storage section)**用于声明程序中使用的临时变量和文件结构。
    • **本地存储节(Local-Storage section)**是类似于工作存储节。唯一的区别是每次程序开始执行时都会分配和初始化变量。
    • **连接节(Linkage section)**用于描述从外部程序接收到的数据名称。

    COBOL程序

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    ENVIRONMENT DIVISION.
    
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT FILEN ASSIGN TO INPUT.
              ORGANIZATION IS SEQUENTIAL.
              ACCESS IS SEQUENTIAL.
              
    DATA DIVISION.
       FILE SECTION.
       FD FILEN
       01 NAME PIC A(25).
       
       WORKING-STORAGE SECTION.
       01 WS-STUDENT PIC A(30).
       01 WS-ID PIC 9(5).
    
       LOCAL-STORAGE SECTION.
       01 LS-CLASS PIC 9(3).
       
       LINKAGE SECTION.
       01 LS-ID PIC 9(5).
       
    PROCEDURE DIVISION.
       DISPLAY 'Executing COBOL program using JCL'.
    STOP RUN.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    JCL执行上述COBOL程序如下:

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
    //STEP1 EXEC PGM=HELLO
    //INPUT DD DSN=ABC.EFG.XYZ,DISP=SHR
    
    • 1
    • 2
    • 3

    当你编译和执行上述程序时,会产生以下结果:

    Executing COBOL program using JCL
    
    • 1

    过程部(Procedure Division)

    过程部用于包含该程序的逻辑。它由使用数据部定义的变量的可执行语句组成。在这个部中,段和节的名称是用户定义的。

    在过程部中必须至少有一个语句。结束这个部的执行的最后一条语句是在调用程序中使用的STOP RUN或者是在被调用程序中使用的EXIT PROGRAM

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NAME PIC A(30).
       01 WS-ID PIC 9(5) VALUE '12345'.
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       DISPLAY 'Hello World'.
       MOVE 'TutorialsPoint' TO WS-NAME.
       DISPLAY "My name is : "WS-NAME.
       DISPLAY "My ID is : "WS-ID.
    STOP RUN.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    JCL执行上述COBOL程序:

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
    //STEP1 EXEC PGM=HELLO
    
    • 1
    • 2

    当你编译和执行上面的程序时,会产生以下结果:

    Hello World
    My name is : TutorialsPoint
    My ID is : 12345
    
    
    ```cobol
    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
    //STEP1 EXEC PGM=HELLO
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    当你编译和执行上面的程序时,会产生以下结果:

    Hello World
    My name is : TutorialsPoint
    My ID is : 12345
    
    • 1
    • 2
    • 3
  • 相关阅读:
    从新东方讲师到AI框架工程师,我的历次职业转折|OneFlow U
    Allegro PCB设置高亮某个网络,提高对比度
    质量问题不是不爆,时候未到
    接口技术:输入输出接口部分笔记
    stack-es-标准篇-ElasticsearchClient-match_phrase
    《大厂面试》之JVM篇21问与答
    vue3的新特性
    【Flask】Flask启程与实现一个基于Flask的最小应用程序
    vulnhub-xxe lab: 1
    springboot 2.6.6启动原理
  • 原文地址:https://blog.csdn.net/zhu_fangyuan/article/details/130839815