软件工程师手册/语言词典/COBOL
COBOL 是一种计算机编程语言,其名称是 "COmmon Business-Oriented Language" 的缩写。它广泛应用于金融服务行业,通常用于大型机上的应用程序。从 20 世纪 60 年代开始广泛使用。COBOL 是为商业应用程序而设计的,因此它在实现时就包含了定点算术支持。这是 COBOL 的优势之一,因为它允许在没有舍入误差的情况下完整、准确地计算财务值。
COBOL 是一种完整的过程式语言。
COBOL 程序分为四个部分,所有四个部分都必须以以下顺序出现在每个程序中:标识;环境;数据和过程。每个部分包含若干个必选和可选节和段落。
标识部分包含有关程序的信息,包括其名称、作者、编译日期等。它必须包含PROGRAM-ID
段落,该段落以唯一名称命名程序。所有其他段落都是可选的。
环境部分描述程序执行的环境。例如,它包括输入和输出文件以及目标执行平台的详细信息。该部分包含两个节:配置节和输入输出节。
数据部分包含文件节,它完整地描述每个输入和输出文件的记录布局,以及工作存储节,其中声明了变量。它还包含连接节,该节描述了将在相互调用的程序之间传递的数据。
过程部分包含可执行程序指令。执行入口点是该部分中的第一条语句。
很难概述 COBOL 的通用语法,因为该语言有 500 多个保留字。此外,语法(与其他早期语言(包括 FORTRAN)一样)不是设计为遵循正式语法;出于这个原因,COBOL 和 FORTRAN 解析器很少使用自动代码生成器来实现。
以下是一些示例赋值语句
MOVE A TO B.
COMPUTE GROSS-PAY = HOURS-WORKED * HOURLY-RATE.
MULTIPLY HOURLY-RATE BY HOURS-WORKED GIVING GROSS-PAY.
SET MY-INDEX UP BY 1.
SET ADDRESS OF MY-LINKAGE-SECTION-ITEM TO MY-POINTER.
READ TRANSACTION-FILE INTO TRANSACTION-RECORD-WS.
虽然许多站点仍然使用全大写字符,但现代 COBOL 编译器不区分大小写。以下两个语句完全相同
MOVE MY-NUMBER TO YOUR-NUMBER.
Move my-number to Your-Number.
对于引号括起来的文字(字符串),会保留字符大小写。
通常,指定注释的唯一方法是在指示器区域(第 7 列)中放置一个星号。整行都是注释。块注释必须在每行的第 7 列都有 *。在 2002 年的标准中,允许部分行作为注释
MOVE A TO B. *> THIS IS A COMMENT ON THE SAME LINE AS A STATEMENT
有几种称为特殊寄存器的类型的变量不需要定义,但通常所有变量都必须在 COBOL 中定义,与解释型 BASIC 不同。
COBOL 有多种数据类型,但最常见的是数值类型(带有用于内部格式的说明符)、数值编辑数据、字母数字数据和记录(类似于 C 中的结构体)
01 TRANSACTION-RECORD.
05 RECORD-NUMBER PICTURE S9(7) COMP-3 VALUE ZERO.
05 RECORD-DESCRIPTION PICTURE X(30) VALUE SPACES.
05 EDITED-AMOUNT PIC $$$$,$$$,$$$.99-.
05 FILLER PIC X(60) VALUE SPACES.
简单的示例,声明一个整数,可能看起来像这样
77 I pic s9(4) usage is binary.
COBOL 还支持重新定义,这与 C 中的联合 somewhat 类似。
COBOL 提供面向对象扩展,但绝大多数 COBOL 程序员没有使用它们,也认为没有必要。
但是,如果 COBOL 程序员想要创建一个类,这很容易做到。例如,这是一个HelloWorld类,带有一个instanceMethod
IDENTIFICATION DIVISION.
CLASS-ID. HelloWorld.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
IDENTIFICATION DIVISION.
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
IDENTIFICATION DIVISION.
METHOD-ID. instanceMethod.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
DISPLAY "Hello World"
GOBACK.
END METHOD instanceMethod.
END OBJECT.
END CLASS HelloWorld.
COBOL 程序工作存储节中包含的所有数据都是全局的。某些数据项可以定义为外部的,对加载模块中的其他程序可见。COBOL 子程序中的数据项对于子程序是全局的,但由于调用方无法看到它们,因此是局部的。通常,数据是通过引用从 COBOL 主程序传递到子程序的。还存在 "按内容" 或 "按值" 的替代方法,但它们通常只用于调用用 C 或其他通常不使用按引用调用的语言编写的子程序。
某些供应商提供扩展,例如线程本地存储节和本地存储节。这些扩展允许将数据的作用域限定为线程本地或程序临时数据。
有很多这样的语句。以下是一些示例
If my-number is numeric
continue
else
display 'data field "my-number" is not numeric'
end-if
evaluate record-type
when 'a'
perform process-record-type-a
when 'b'
perform process-record-type-b
when 'c'
continue
when 'd'
when 'e'
perform process-record-type-d-or-e
when other
perform process-invalid-record-type
end-evaluate
READ TRANSACTION-FILE INTO MY-TRAN-REC-WS
AT END
SET ALL-RECORDS-PROCESSED TO TRUE
NOT AT END
ADD +1 TO TRAN-REC-COUNT
PERFORM PROCESS-1-TRANSACTION
END-READ
也有好几种。
Perform 6 times
add +1 to loop-count
end-perform
Perform process-1-billing-record
until all-records-processed
Perform clear-1-table-entry
varying tbl-index from +1 by +1
until tbl-index is greater than max-table-entries
Search table-entry varying tbl-index
at end
set entry-not-found to true
when table-key equal customer-id
move tbl-customer-name to print-customer-name
end-search
以下是一些示例。
DISPLAY "Hello, World!"
display 'hello, world!' with no advancing
Write billing-record from transaction-record-ws
对于键控顺序文件,支持START
、READ
、WRITE
、REWRITE
和DELETE
。
容器
[edit | edit source]不适用于 COBOL。
算法
[edit | edit source]递归通常不受支持,但可以通过迭代模拟。
垃圾回收
[edit | edit source]通过系统 API(如 malloc)动态分配的内存应使用适当的“free”调用释放。
使用 CLASS 的 COBOL 程序可能需要调用“finalize”方法来释放对象。例如
invoke myObject "finalize" returning myObject
如果 COBOL 应用程序在虚拟机(如 Java 虚拟机或 Microsoft 的 CLR)下执行,则适用标准的垃圾回收规则。
否则..
COBOL 程序员通常不知道或不关心什么是垃圾回收。他们很少需要分配内存或在之后清理内存。
物理结构
[edit | edit source]COBOL 源文件可能(但不一定)包含类似于 C 中 .h 文件的 copybook。已编译的程序通常使用动态加载的服务例程的 COBOL 运行时库。COBOL 源文件本身包含四个部分:IDENTIFICATION DIVISION
、ENVIRONMENT DIVISION
、DATA DIVISION
和 PROCEDURE DIVISION
。
提示
[edit | edit source]<请包括从其他语言切换到这种语言更容易的提示。>
网页参考
[edit | edit source]- COBOL 常见问题解答(.DOC 格式)
- GnuCOBOL 常见问题解答和操作方法
- GnuCOBOL 手册和指南
- COBOL 用户组 (COBUG)(网站已关闭,2013 年的存档)
- cob-rte
- svalgard
- swbell 页面
- dissert
- csis.ul.ie 页面
- infogoal 页面
- COBOL 博客
书籍和文章
[edit | edit source]<列出可能对您有帮助的额外书籍和文章。请包括参考资料适合什么级别的读者。(初学者/中级/高级)>
工具
[edit | edit source]- Cobos 项目 开源 Cobol / 主机 / CICS / DB2 集成开发环境(在 Eclipse 中)