* Free and open-source software主题

**GnuCOBOL** （曾称**OpenCOBOL** 、**GNU Cobol** ）是COBOL程式语言的免费版本，最初由Keisuke Nishida设计，由Roger While负责領導開發，最近的版本是由Simon Sobisch，Sergey Kashyrin，Ron Norman，Edward Hart和其他许多人领导。

历史
--

在Tiny COBOL上与Rildo Pragana合作时，Keisuke决定尝试建立相容於**GNU編譯器套裝**的COBOL 语言编译器，很快便成立了OpenCOBOL。 Keisuke担任首席开发人员到2005年和版本0.31為止，接著由Roger While領導，并于2007年12月27日发布了OpenCOBOL 1.0。 OpenCOBOL 1.1预先發表版本的工作一直持续到2009年2月。 2012年5月，开发转移到SourceForge ，將2009年2月的预先發表版本标记为发行版本。  2013年9月下旬，OpenCOBOL 语言被接受为GNU项目 ，更名为GNU Cobol，最后于2014年9月更名为GnuCOBOL。  Ron Norman添加了一个Report Writer模块作为GnuCobol 2.0的一个分支，Sergey Kashyrin开发了一个使用C ++（而非C語言）作为中介的版本 。 

目前最新的版本是2017年9月7日发布的v2.2 Final。 

2015年6月17日，將GnuCOBOL 语言源代码（包括具有GNU Cobol和OpenCOBOL拼写的版本）的版权转让给自由软件基金会。

開發原則
----

開發者力求与COBOL语言标准保持一致，符合当前的COBOL 2014规范，并包含现有编译器中常见的功能，但並不保證其標準一致性的程度。  即便如此，2.2最终版本通过了NIST COBOL 85测试套件中，9708個測試中的9,688個（99.79％），删除了20个。 

GnuCOBOL将COBOL 语言程序（原始码）转换为C語言，然後將C語言程式碼编译成電腦使用的機器語言代码（目标码），或其他程序可以呼叫（链接到）的库。 在UNIX和类似的操作系统（例如Linux ）下，使用GNU C编译器；在微軟Windows系統 ，Microsoft的Visual Studio Express提供了C编译器。 两階段的编译通常可以由单个命令执行，但是使用者也可以選擇只編譯到C語言程式碼即可。

文件
--

2002年至2012年开发团队的官方主页是opencobol.org网站，也是上游开发資料的最佳来源。  但是最近的开发工作都在SourceForge项目空间 （页面存档备份，存于）内进行，其中也包含最新的GnuCOBOL 语言文件和信息。 

由Gary Cutler撰写的OpenCOBOL程式設計指南是根据GNU自由文档许可证发布的， 已更新並包含GnuCOBOL 语言和Report Writer，并列在GnuCOBOL文件概述页面中。

範例程式
----

### 傳統寫法

```
000100\* HELLO.COB GnuCOBOL example
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. hello.
000400 PROCEDURE DIVISION.
000500 DISPLAY "Hello, world!".
000600 STOP RUN.

```
 编译和执行： 

```
$ cobc -x HELLO.COB
$ ./HELLO
Hello, world!

```

### 现代，免费格式寫法

```
\*> GnuCOBOL Hello World example
identification division.
program-id. hello.
procedure division.
display "Hello, world!" 
end-display.
goback.

```
 编译和执行： 

```
$ cobc -x -free hello.cob
$ ./hello
Hello, world!

```

### 最短寫法

使用GnuCOBOL 2.0中的寬鬆语法选项，最短的有效COBOL程式是一个空白文件。 编译和执行如下： 

```
$ cobc -x -frelax-syntax ./empty.cob
./empty.cob: 1: Warning: PROGRAM-ID header missing - assumed
$ ./empty
$

```
 对于早期版本和寬鬆的语法： 

```
display"Hello, world!".

```
 编译和执行： 

```
$ cobc -x -frelax-syntax -free hello.cob
hello.cob: 1: Warning: PROGRAM-ID header missing - assumed
hello.cob: 1: Warning: PROCEDURE DIVISION header missing - assumed
$ ./hello
Hello, world!

```
 任何版本的GnuCOBOL，GNU Cobol或OpenCOBOL，没有宽松的语法。 （注意，有7个前导空格，以符合FIXED布局COBOL源（FIXED layout COBOL source））： 

```
 program-id.h.procedure division.display "Hello, world!".

```
 编译没有错误： 

```
$ cobc -x smallest.cob
$ ./smallest
Hello, world!

```
 *请注意，这些小程式並不是良好的COBOL語言程式碼; COBOL 语言設計目標是成为一种可读的英语编程语言。*

實作
--

解析器和词法扫描器使用Bison和Flex 。 GPL许可编译器和LGPL许可的运行时库是用C语言编写的，并使用C ABI进行外部程序链接。 

构建包装使用GNU Build System 。 使用`make check进行`标准测试使用需要指定 Autoconf ，通过`make test`运行的ANSI85测试套件使用Perl脚本。 

设置GnuCOBOL编译的configure脚本具有以下选项： 

* 选择C编译器及其后期翻译编译选项
* 用于ISAM支持的数据库管理系统
* 包含iconv

可用版本
----

* SourceForge发布1.0版。
* 1.1版，由SourceForge发布
* SourceForge的2.0开发版本
* open-cobol Debian包。
* 2.2最终，2017年9月7日从SourceForge发布
* 2.2源自SourceForge代码树的2017年9月发布的文档。

外部链接
----

* GNU站点，GnuCOBOL的官方发行版 （页面存档备份，存于）
* SourceForge.net上的GnuCOBOL
* 日本开源COBOL联盟 （页面存档备份，存于）
* GnuCOBOL常见问题 （页面存档备份，存于）
* 添加1ToCOBOL开源Cobol和OpenCOBOL宣传网站（页面存档备份，存于）
* SourceForge.net上的tiny-cobol
* 新的COBOL 语言用户组 （页面存档备份，存于）