本文内容源于对IBM英文文档的理解与归纳,不保证其准确性。仅用于自学,转载请注明出处。
-----------------------------------------------------------------------------------------------
1.编码格式
- 第1~6列为序号区,用于表示行号。行号不是必须的,也不必是顺序的,甚至可以是本机字符集中的任意字符,但正确的行号是很重要的。
- 第7列为指示区,可以包含如下指示符:
-
"*"指示本行内容为注释。
"-"指示本行代码为上一行的延续。
"D"指示本行代码为调试代码,将在启用DEBUGGING模式时被编译,未启用时将被忽略。
"/"指示编译器为源码列表开始新的一页,并且本行将被视为注释。
- 第8~11列为A区。下列项必须从A区开始:
-
部标题(DIVISION)
节标题(SECTION)
段名(段标题)
层指示符FD和SD,层号01和77
DECLARATIVES 和 END DECLARATIVES
END PROGRAM
- 第12~72列为B区。作为程序主体的条目(entries),句子(sentences),语句(statements),从句(clauses)和续行(/)等都必须从B区开始。
*句法说明:
节(SECTIONs)和段(paragraphs)定义了程序,它们又细分为以下部分:
条目(entries):以句点(.)结尾的一系列从句。构造于标识部、环境部和数据部。
从句(clauses):连续的COBOL字符串的有序集合,用于指定条目的某个属性。构造于标识部、环境部和数据部。
句子(sentences):以句点(.)结尾的一个或多个语句的序列。构造于过程部。
语句(statements):指定程序要执行的某个动作。构造于过程部。
短语(phrases):构成从句和语句的更小单元。
2.基本结构
----|----1----|----2----|----3----|----4----|----5----|----6----|----7----|----8
//标识部
000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. PGMNAME. //指定本程序名。此段是必须的,并且必须排在标识部的最前头。
//环境部
000003 ENVIRONMENT DIVISION.
//配置节
000004 CONFIGURATION SECTION.
000005 SOURCE-COMPUTER. IBM-PC WITH DEBUGGING MODE. //WITH从句指定启用调试代码。
000006 OBJECT-COMPUTER. IBM-PC.
000007 SPECIAL-NAMES.
000008 CURRENCY-SIGN IS $. //指定货币符号为"$"。
000009 DECIMAL-POINT IS COMMA. //在PIC字符串或数字字面值中交换逗号","和小数点"."的功能。
//输入输出节
000010 INPUT-OUTPUT SECTION.
000011 FILE-CONTROL. //命名程序所用文件,并将其与外部文件相关联。
000012 SELECT INPUT-FILE ASSIGN TO "IN.DAT".
//数据部
000013 DATA DIVISION.
//文件节
000014 FILE SECTION. //定义数据文件的结构。
000015 FD INPUT-FILE. //File Description.后面的文件名必须与前面SELECT语句中的一致。
000016 01 INPUT-RECORD-1 PIC X(100). //描述文件属性及与其关联的数据记录(可以是多个)。
000017 01 INPUT-RECORD-2 //同一存储区域的另一种定义。重定义INPUT-RECORD-1。
000018 03 ITEM-1 PIC X(20).
000019 03 ITEM-2 PIC X(80).
//工作存储节,描述程序处理过程中所涉及的不属于文件的数据记录。
//此存储区在运行单元开始时被分配,在运行单元结束时被销毁,在此过程中将保持其最后使用值。
000020 WORKING-STORAGE SECTION.
000021 01 WORK-FIELD PIC X(20).
//连接节,用于被调用程序,描述从调用程序传递过来的数据。
000022 LINKAGE SECTION.
000023 01 LNK-FIELD PIC X(10).
//过程部,被调用程序可以包含USING从句用于接收调用程序传递的参数数据,主调程序不需要。
000024 PROCEDURE DIVISION USING BY REFERENCE LNK-FIELD. //BY REFERENCE是默认值,可以省略。
000025 PGMNAME-START SECTION. //过程部处理逻辑的细分。
000026 PERFORM P-PROC-1-RTN.
000027 PERFORM P-PROC-2-RTN.
000028 EXIT PROGRAM. //返回调用程序(同GOBACK)。
000029 P-PROC-1-RTN SECTION.
000030 P-PROC-1.
000031 DISPLAY "first program:".