使用 Cobol 5 编译器编译 Cobol 4

Posted

技术标签:

【中文标题】使用 Cobol 5 编译器编译 Cobol 4【英文标题】:Compile Cobol 4 with a Cobol 5 compiler 【发布时间】:2019-01-16 14:58:52 【问题描述】:

我需要在 z/OS UNIX 上使用 Cobol 4 编译器编译 Cobol 源代码,但我只有一个 Cobol 5 编译器。是否有将 Cobol 5 限制为 Cobol 4 编译的选项? 我正在使用安装到 z/OS 上 Cobol 安装的 IGY520.HFS PDS 的 cob2 命令。 我在 IBM 文档中进行了搜索,但没有找到任何内容。

【问题讨论】:

【参考方案1】:

没有。我强烈建议您学习 the migration guide 和任何关于迁移主题的 SHARE 演示文稿,遗憾的是,SHARE 不再向非会员提供其出色的内容。

报告的最常见问题与旧编译器允许的无效数据有关。引用 Tom Ross 的 SHARE 演示文稿以上链接...

77 A1 PIC X(4) VALUE ’00 0’.  *> x’F0F040F0’, third byte
                              *> has x’4’ for zone bits.
                              *> OK in PIC X, not valid in
                              *> PIC 9 USAGE DISPLAY

77 A2 REDEFINES A1 PIC 9(4).

PROCEDURE DIVISION.    
    IF A2 = ZERO              *> Compiler could do character
      DISPLAY ’ZERO‘          *> or numeric compare
    ELSE
      DISPLAY ’NOT ZERO‘
    END-IF

程序显示“ZERO”还是“NOT ZERO”取决于 您在 COBOL V4 及更早版本和 COBOL V6 中使用的编译器选项

还要注意处理打包数据的方式不同,see this recent question。

NUMCHECK 编译选项可以在这些情况下为您提供帮助,但请注意编译选项无法在编译时检测无效数据,它们只能生成代码以在运行时检测无效数据。

【讨论】:

感谢您的详细解答【参考方案2】:

我不知道。我看到以下内容可能有用。

CMPR2、FLAGMIG 和 NOCOMPILE 编译器选项

COBOL CMPR2, FLAGMIG 和 NOCOMPILE 选项标识需要 转换为在 Enterprise COBOL 下编译。 CMPR2 和 FLAGMIG 选项在 Enterprise COBOL 中不可用,但您可以使用您的 具有这些选项的旧编译器来标记需要 进行更改以使用 Enterprise COBOL 进行编译。

Enterprise COBOL> V4.2 FLAGMIG4 编译器选项

新的编译器选项 FLAGMIG4 是 可与 APAR PM93450 for Enterprise COBOL V4.2 一起为您提供帮助 迁移到 Enterprise COBOL V5 或 V6。还建议您 为 APAR PI12240、PI26838 和 PI58762 安装 PTF,因为它们包含 FLAGMIG4 选项的更新。 FLAGMIG4 选项标识 Enterprise COBOL V4 程序中的语言元素不是 支持,或者在 Enterprise COBOL V5 中以不同方式支持,或 V6。编译器会为所有此类生成警告诊断消息 语言元素。

COBOL 6.2 Migration Guide

【讨论】:

【参考方案3】:

COBOL 5 程序与 COBOL 4 向后兼容(它们可以相互调用),但 COBOL 5 不生成 COBOL 4 对象模块。为什么需要 COBOL 4 编译?

【讨论】:

如果我在 COBOL 5 中编译它,我不确定我的程序是否与大多数 z/OS 兼容。COBOL 5 编译的对象是否需要在目标 z/OS 上安装特定的库或者是他们只是反对,COBOL 4 对象不可能工作,而 COBOL 5 不能?此外,我的资料中有特定的 COBOL4 语法。 COBOL V5 将编译 COBOL V4 可以编译的程序;您将遇到的唯一语法问题是您的程序是否碰巧使用了 V5 中的新保留字,如果是这样,那很容易修复。在编译时您不需要任何库。当您运行使用 V5 编译的程序时,您将需要 V5 运行时,但假设正确安装了 V5 和 LE(语言环境,COBOL 运行时是其中的一部分),那将不是问题。 就与其他程序的兼容性而言,V5 代码与任何较旧的 COBOL 代码兼容,但使用 OS/VS COBOL 编译的代码除外。如果您的应用程序中的任何 COBOL 程序使用无效数据,您可能会看到行为差异。我每季度就迁移到 COBOL V5/V6 的挑战进行一次演示,您可能想了解一下;以前的录音和幻灯片可以在这里找到:ibm.ent.box.com/v/COBOLMigrationWorkshops V4 和 V5 编译代码之间有一个主要区别:EC V5 生成 GOFF 格式的目标代码,绑定器使用它来生成程序对象而不是加载模块。因此,对于 V5,要求所有加载库都是 PDSE 而不是 PDS(我不确定对象库,但 PDSE 也不会受到伤害)。

以上是关于使用 Cobol 5 编译器编译 Cobol 4的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS 下设置 COBOL 编译器?

从 COBOL mainprog 调用 COBOL/DB2 subprog 从 subprog 的编译单元返回 CEE3204S 错误

IBM为Linux on x86创建了一个COBOL编译器

Open-COBOL Uknown错误

COBOL 中带有“REPLACING”的“COPY”语句

在源代码中嵌入编译器选项