GnuCOBOL

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文件概述頁面中。

## 範例程式

### 傳統寫法

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

```
编译和执行： 
```

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

### 現代，自由格式寫法

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

```
编译和执行： 
```

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

### 最短寫法

使用GnuCOBOL 2.0中的寬鬆語法選項，最短的有效COBOL程式是一個空白文件。編譯和執行如下：

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

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

```cobolfree
display"Hello, world!".
```

```
编译和执行： 
```

```console
$ 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））： 
```

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

```
编译没有错误： 
```

```console
$ 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的官方發行版
- open-cobol
- 日本開源COBOL聯盟
- GnuCOBOL常見問題
- 添加1ToCOBOL開源Cobol和OpenCOBOL宣傳網站
- tiny-cobol
- 新的COBOL 語言使用者組

## 基本資料

- 作者：Keisuke Nishida, Roger While
- 開發者：Edward Hart, Sergey Kashyrin, Ron Norman, Simon Sobisch and many others.
- 發行日期：2002年1月25日
- 軟體版本週期：3.1.1
- 軟體版本週期：2020年12月8日
- 預覽版本：3.1rc-1
- 預覽版本：2020年7月7日
- 程式語言：C，有使用 C++ 的分支版本
- 語言：英語、德語、義大利語、日語、西班牙語
- 類型：程式語言
- 許可協議：GPL with runtime libraries under LGPL