GnuCOBOL

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的官方发行版  
    
 日本开源COBOL联盟  
 GnuCOBOL常见问题  
 添加1ToCOBOL开源Cobol和OpenCOBOL宣传网站 
    
 新的COBOL 语言用户组  
GNU计划软件
自由編譯器與直譯器
编译器软件