为什么COBOL必须缩进?

13

为什么 COBOL 必须像这样缩进,即在每个源文件中具有额外的空格?

考虑以下代码(注意额外的空格):

  IDENTIFICATION DIVISION.
  PROGRAM-ID. HELLO-WORLD.
  PROCEDURE DIVISION.
      DISPLAY 'Hello, world'.
      STOP RUN.

Fortran代码中也可以看到类似的格式:

   program hello
      print *, "Hello World!"
   end program hello

但为什么COBOL和Fortran需要这个空格?这是什么原因?


代码可能是Fortran 90或更新版本,而不是77。 - Vladimir F Героям слава
1个回答

21

Cobol不再需要缩进。据我所知,所有大多数现代编译器都支持格式自由的Cobol源代码。

最初的原因是处理打孔卡。 Cobol将第一行的前6个位置保留为行序号。第7列是续行符/注释/调试/分页符。区域"A"或列8-11指定某些特殊的语言构件,如01级别、部分或段落名称等。区域"B"或列12-72用于开放式代码。列73-80用于OS序列号。

您提到的这两种语言,Cobol和Fortran,都是在自动解析器生成之前编写的。他们没有真正的先前艺术可以借鉴如何创建可解析的源文本的好坏想法。因此,像区域“A”用于特殊部分标题之类的一些事情使得手动编写解析器的任务更容易。现代语言倾向于使用无上下文文法,以使解析器生成变得简单。但是这比Cobol晚。


3
IBM企业级COBOL编译器(主机版)仍然需要使用列。 - zarchasmpgmr
10
序列号的整个概念是为了让你如果把卡片组掉在地上,你可以将它放入卡片分类器中,并按顺序取回卡片。 - Joe Zitzelberger
1
区域A/B的原因是为了文档化。在Fortran中,你会得到类似于GOTO 100或GOTO 200这样的东西。在Cobol中,它将是GO TO 100-RESTART或GO TO 200-NEXT-PERSON。不需要注释:标签(如果经过适当思考)告诉您为什么要去那里。仿效Fortran,它们有自己的区域,以便突出显示并易于查找(如果它们按数字顺序排列也有帮助)。 - cup
4
如果不介绍早期情况,很难解释清楚。当我学习COBOL时,我们使用的是一台IBM 1401计算机,它只有8K主存储器、4K扩展盒和2.5MB磁盘(没有"操作系统")。除非你尝试在这样的环境下编写COBOL编译器,否则很难理解格式规则如何帮助编译器。 - user2338816
我同意你的观点,编写Cobol编译器并不难。但是我所说的并不是A区和上下文无关语法,而是非常复杂的约1000个保留字语言,因为其中大部分涉及上下文,所以并不适合使用简单的BNF表示法。在阅读时,我意识到自己在那里混合了几个概念。 - Joe Zitzelberger
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接