【问题标题】:Getting started with OpenCOBOL! ("Hello world!")开始使用 OpenCOBOL! (“你好世界!”)
【发布时间】:2014-01-28 18:28:17
【问题描述】:

我正在尝试制作一个非常简单的 COBOL 程序。我已经设置好我的目录、配置等,但是当我去编译它时,我得到了这个错误:

sampleCOBOL.cbl: In paragraph 'Main-Paragraph' :
sampleCOBOL.cbl:9: Error: syntax error, unexpected "end of file"

(“sampleCOBOL.cbl”是我的文件名)

这是我的文件包含的内容:

   Identification Division.
   Program-ID. sampleCOBOL.

   Data Division.

   Procedure Division.
   Main-Paragraph.
       Display "Hello World!"
       Stop Run.

我知道错误发生在第 9 行(“停止运行。”)。然而,为什么?

【问题讨论】:

  • 我猜你在Display "Hello World!"之后少了一个点
  • 您是否使用空格或制表符来缩进您的代码?如果使用制表符,请尝试切换到空格。如果这不起作用,请尝试以十六进制查看文件并将不可打印的字符替换为空格。
  • 我认为可能就是这样,或者至少指向正确的方向,@NealB。可能是选项卡和 Windows 行尾。我的答案中的链接有详细信息,也是使用 Notepad++ 的人的问题。我已更新以将详细信息放入正文中。
  • 您的问题中的程序没有制表符或其他非显示字符。我会粘贴到记事本中,这是标准的,随 Windows 一起交付的,然后保存,然后运行编译。如果仍然起作用,我会在 STOP RUN 之后添加另一个段落名称,执行该段落名称并将 DISPLAY 放在那里,看看您是否可以获得“移动”的错误消息。
  • 您似乎混合了 LF-only 和 CR-LF 行。我不知道这是否重要。我会将您原来的问题中的粘贴到 Windows 记事本中。在带有文本的每一行添加确保七个前导空格。节省。试试看。另请在几分钟内查看更新的答案。

标签: cobol gnucobol


【解决方案1】:

SourgeForge 支持 GNU COBOL(以前称为 OpenCOBOL)。

从那里,这里是相同错误消息的答案:https://sourceforge.net/p/open-cobol/discussion/109660/thread/cdfe04a5/#0996

您可以让您的 COBOL 程序遵循传统的固定列开始/结束,您可以将 >>SOURCE FORMAT IS FREE 放在程序的第一行第 12 列中。然后,您可以在不参考列号的情况下进行编码。

如果使用列号,则第 1-6 列不用于代码,第 7 列用于注释、调试或新页面标记,或者在极少数情况下,继续无法容纳在前一行的文字。

然后代码从第 8-11 列(又名“区域 a”)或第 12-71 列(“区域 b”)开始。

您不需要在 PROCEDURE DIVISION 中使用句号/句点,除非在 PROCEDURE DIVISION 标题、段落/SECTION 名称之前和程序结束之前结束。在遥远的过去,您曾经需要很多句号/句号,但很多年都不需要(尽管许多人仍在编写它们)。

如果您向下滚动链接到的讨论,请查看您对其他答案的评论和 NealB 对您的问题的评论:

我已经使用 Notepad++ 进行了很多我自己的编码。您可以设置 EOL 使用 UNIX 而不是 windows 或 UTF 编码。这也将解决 EOF 问题。此外,您需要确保在以下情况下设置“使用空间” 制表符。当从 Windows 编辑器中使用选项卡时,cobc 会出现问题。

总而言之,您使用的是 Windows、选项卡和不喜欢源代码中选项卡的 OpenCOBOL 版本。您需要直接做两件事才能使其正常工作,并且您可能希望在方便时获得最新版本的 GNU COBOL。

我建议你去这里,http://sourceforge.net/p/open-cobol/discussion/2526793/。如果您没有 SourceForge 帐户,请加入,如果有,请登录,然后在 Help getting started 中发帖。有些人使用 Windows(我没有)应该能够提供帮助。登录/加入的原因是,否则您将等待几个小时让您的问题首先“审核”,然后您将显示为匿名。

【讨论】:

  • 我尝试了那里提到的各种解决方案,除了使用新的编辑器。还是没有运气! SPFLite 正在下载,我将使用该程序重试。
  • 首先,感谢您一直以来的耐心等待和帮助!我已经尝试了您的建议(以上评论),但我仍然遇到同样的错误。我将在 SourceForge 页面上询问,看看我是否可以在那里获得一些帮助。如果我弄明白了,我会回来更新。
【解决方案2】:

找出问题所在。我在“标识部门”和“程序 ID”之间多了一条线。

我不知道我是怎么错过的。

小子,我是不是觉得自己很蠢。

【讨论】:

  • 其实不用觉得自己傻。你可以在那里有四百个空白行,它仍然应该编译。我认为您所做的是删除以 LineFeed 结尾且没有 CarriageReturn 的行。如果你的程序中没有这样的行,那么你就有了答案。 不是空行本身就是问题所在。
【解决方案3】:

IDENTIFICATION 的I 必须位于第 8 列(前面有 7 个空格)。

   ---- sampleCOBOL.cob -------------------------
         * Sample COBOL program
          IDENTIFICATION DIVISION.
          PROGRAM-ID. sampleCOBOL.
          PROCEDURE DIVISION.
          DISPLAY "Hello World!".
          STOP RUN.
    ----------------------------------------

【讨论】:

  • Notepad++ 告诉我它确实从第 8 列开始。当我的光标位于“I”之前时,它会在屏幕底部显示“Col: 8”。这是否意味着我的光标已经“经过”了 I,或者它“在” I?
  • 你在“Hello World!”.之后还缺少.
【解决方案4】:

我最近刚开始学习 COBOL 时遇到了同样的问题。关键是每一行都应该以 CRLF 结尾。您可以参考here 了解如何实现这一目标。

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 2022-11-10
    • 2016-08-14
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多