使用Cobol 5编译器编译Cobol 4

4

我需要在z/OS UNIX上使用Cobol 4编译器编译Cobol源代码,但我只有Cobol 5编译器。是否有选项可以将Cobol 5限制为Cobol 4编译?我正在使用cob2命令,它被挂载到我在z/OS上安装的Cobol的IGY520.HFS PDS中。我在IBM文档中搜索了一下,但没有找到任何相关信息。

3个回答

5

不需要。我强烈建议您阅读迁移指南,以及关于迁移主题的任何 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

Whether the program displays ‘ZERO’ or ‘NOT ZERO’ depends on the compiler options you use in COBOL V4 and earlier and in COBOL V6

请注意,压缩数据处理方式的差异,参见这个最近的问题

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


感谢您详细的回答。 - Timothée

3
我并不知道。我认为以下内容可能会有用。
CMPR2,FLAGMIG和NOCOMPILE编译器选项
COBOL CMPR2、FLAGMIG和NOCOMPILE选项用于标识需要转换为Enterprise COBOL下编译的源代码语句。CMPR2和FLAGMIG选项在Enterprise COBOL中不可用,但您可以使用旧的编译器并带上这些选项来标记需要更改以便与Enterprise COBOL编译的语句。
Enterprise COBOL>V4.2 FLAGMIG4编译器选项
新的编译器选项FLAGMIG4适用于APAR PM93450的Enterprise COBOL V4.2,可帮助您迁移到Enterprise COBOL V5或V6。建议安装APAR PI12240、PI26838和PI58762的PTF,因为它们包含FLAGMIG4选项的更新。FLAGMIG4选项标识Enterprise COBOL V4程序中不支持或以不同方式支持的语言元素。编译器为所有此类语言元素生成警告诊断消息。

COBOL 6.2 迁移指南


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

我不确定如果我在COBOL 5中编译程序,它是否与大多数z/OS兼容。 COBOL 5编译的对象是否需要在目标z/OS上安装特定的库,还是它们只是对象,没有任何方法可以使COBOL 4对象工作而COBOL 5不行? 此外,我的源代码中有特定的COBOL4语法。 - Timothée
1
COBOL V5可以编译COBOL V4可以编译的程序;你可能会遇到的唯一语法问题是,如果你的程序恰好使用了V5中的新保留字,那么这很容易修复。在编译时,您不需要任何库。当您运行使用V5编译的程序时,您将需要V5运行时,但是假设V5和LE(语言环境,其中COBOL运行时是其一部分)已经正确安装,那么这不会成为问题。 - Mike Chase
1
就与其他程序的兼容性而言,V5代码与除了使用OS/VS COBOL编译的代码之外的任何旧版COBOL代码都兼容。如果您的应用程序中的任何COBOL程序使用无效数据,则可能会出现行为差异。我会定期举行有关迁移到COBOL V5/V6的挑战的演示,您可以查看这里的以往记录和幻灯片:https://ibm.ent.box.com/v/COBOLMigrationWorkshops - Mike Chase
V4和V5编译代码之间有一个主要区别:EC V5生成GOFF格式的目标代码,绑定程序使用它来生成程序对象而不是加载模块。因此,使用V5需要所有加载库都是PDSE而不是PDS(我不确定目标库是否也是如此,但在那里使用PDSE也不会有问题)。 - piet.t

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