日本-日本語
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  OpenVMS >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページ・サイズの拡大に対するアプリケーションの対応
第 6 章:共有データの整合性の維持
第 7 章:アプリケーション・データ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:アプリケーションのトランスレート
第 10 章: ネイティブなイメージとトランスレートされたイメージの間の相互操作性の確認
第 11 章:OpenVMS Alpha コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム
OpenVMS Alpha オペレーティング・システム | HPE 日本

OpenVMS Alpha
オペレーティング・システム
OpenVMS VAX から OpenVMS Alpha へのアプリケーションの移行


目次 索引



DEC COBOL は, VAX COBOL の/STANDARD=V3修飾子のインプリメンテーションがサポートしているいくつかの機能をサポートしていません。

  • STRING,UNSTRING,および INSPECT (Format 3) 文と, DIVIDE 文の REMAINDER 句における添え字が評価されるタイミング

  • STRING,UNSTRING,およびINSPECT (Format 3) 文で参照変更が評価されるタイミング

  • VARYING句に関連付けられた変数の値が, PERFORM... VARYING... AFTER文の中で増やされるタイミング (Format 4)

  • 一部の移動での PIC Pの数字の解釈

  • MOVE 文の中で,可変長テーブル(OCCURS DEPENDING ON)のサイズが決定されるタイミング

/WARNING=ALL修飾子を使用すると,/STANDARD=V3 の効果がわかりやすくなります。特に,DEC COBOLは,/STANDARD=V3 が指定されていると,以下の情報メッセージを生成します。

  • INSPECT,STRING,UNSTRING,および DIVIDE 文の評価順序によって影響を受ける項目


            /STANDARD=V3 evaluation order not 
              supported for this construct 
    

  • OCCURS DEPENDING ON が MOVE 文の異なる動作を必要とするような移動先


            /STANDARD=V3 variable length item 
              rules not supported for this construct 
    

/STANDARD=V3修飾子の VAX COBOL のインプリメンテーションの詳細については,『VAX COBOL User Manual』の修飾子に関する付録を参照してください。

VAX COBOL バージョン5.1(およびそれ以上)では, /STANDARD=OPENVMS_AXP修飾子オプションを指定して,既存の VAX COBOL プログラムの中の, OpenVMS Alpha システム上の DEC COBOL では使用できない言語要素を識別する新しいフラグ付けシステムを利用することができます。

/STANDARD=OPENVMS_AXPを指定すると, VAX COBOL コンパイラは DEC COBOL では使用できない言語構成体を通知する情報メッセージを生成します(これらのメッセージを表示するためには,同時に/WARNINGS=ALLまたは/WARNINGS=INFORMATIONALも指定する必要があります)。この情報を使用して, DEC COBOL を使用する前にプログラムを変更することができます。

省略時の/STANDARD=NOOPENVMS_AXPでは,これらの情報メッセージは表示されません。

11.3.3 DEC COBOL と VAX COBOL の動作の違い

この項では, VAX COBOL と DEC COBOL の動作の違いと, DEC COBOL に固有の動作について説明します。

DEC COBOL コンパイラは,到達不能コードやその他のロジック・エラーに関して, VAX COBOL コンパイラよりも詳細なメッセージを生成することがあります。

次の例に,サンプル・プログラムと, DEC COBOL コンパイラが発行するメッセージを示します。

ソース・ファイル:


       IDENTIFICATION DIVISION. 
       PROGRAM-ID. T1. 
       ENVIRONMENT DIVISION. 
       PROCEDURE DIVISION. 
       P0. 
           GO TO P1. 
       P2. 
           DISPLAY "This is unreachable code". 
       P1. 
           STOP RUN. 

OpenVMS VAX システム上でのメッセージ:


$  COBOL  /ANSI/WARNINGS=ALL T1.COB
$

プログラムはコンパイルされます。 VAX COBOL コンパイラはメッセージを出力しません。

OpenVMS Alpha システム上でのメッセージ:


$  COBOL /ANSI/OPTIMIZE/WARNINGS=ALL T1.COB
       P2. 
.......^ 
% COBOL -I-UNREACH, code can never be executed at label P2 
at line number 7 in file DISK$YOURDISK:[TESTDIR]T1.COB;1

DEC COBOL は,どちらのオペレーティング・システム上でも最適化を行います。最適化の1つの用途として,呼び出されていないルーチンや到達不能な段落の分析を行うことができます。コンパイラは,/NOOPTIMIZEを含むすべての最適化レベルで,到達不能コードの分析を実行します(省略時には完全な最適化が行われるので,上の例のようにコマンド行で修飾子やフラグを指定する必要はありません)。 VAX COBOL には/OPTIMIZE修飾子はありません。

VAX COBOL コンパイラと, OpenVMS Alpha システム上の DEC COBOL コンパイラには,出力されるプログラム・リスティングに違いがあります。

11.3.3.2.1 マシン・コード

DEC COBOL では,/NOOBJECT修飾子を指定すると,コンパイラはコード生成を抑止します。このため,リスティングでもオブジェクト・モジュールでも,マシン・コードは生成されません。

VAX COBOL では,/NOOBJECTは.OBJの作成を抑止するだけです。この場合でも, VAX COBOL はオブジェクト・コードを生成するための作業を実行しますので,その結果をリスティングに出力することができます。

プログラム・リスティングにマシン・コードを出力したい場合は, /NOOBJECTを使用しないでください。

11.3.3.2.2 モジュール名

DEC COBOL では,最初のプログラムの名前がコンパイル全体でのモジュール名になります。 VAX COBOL では,モジュール名は個々のプログラムごとに変わります。

11.3.3.2.3 COPY文とREPLACE文

DEC COBOL コンパイラと VAX COBOL コンパイラは, COBOL プログラムのCOPY文の注釈を,若干異なる形式で出力します。

次の2つのコンパイラ・リスティングは, DEC COBOL と VAX COBOL での, COBOL プログラムのリスティングにおける注釈の位置の違い("L"という文字)を示しています。

DEC COBOL におけるCOPY文のリスティング・ファイル:


 
              1 IDENTIFICATION DIVISION. 
              2 PROGRAM-ID. DCOP1B. 
              3 * 
              4 *       This program tests the copy library file. 
              5 *       with a comment in the middle of it. 
              6 *       It should not produce any diagnostics. 
              7         COPY 
              8 *       this is the comment in the middle 
              9                 LCOP1A. 
L            10 ENVIRONMENT DIVISION. 
L            11 INPUT-OUTPUT SECTION. 
L            12 FILE-CONTROL. 
L            13 SELECT FILE-1 
L            14         ASSIGN TO "FILE1.TMP". 
             15 DATA DIVISION. 
             16 FILE SECTION. 
             17 FD      FILE-1. 
             18 01      FILE1-REC       PIC X. 
             19 WORKING-STORAGE SECTION. 
             20 PROCEDURE DIVISION. 
             21 PE.     DISPLAY "***END***" 
             22         STOP RUN. 
 

VAX COBOL におけるCOPY文のリスティング・ファイル:


 
 
    1         IDENTIFICATION DIVISION. 
    2         PROGRAM-ID. DCOP1B. 
    3        * 
    4        *    This program tests the copy library file. 
    5        *    with a comment in the middle of it. 
    6        *    It should not produce any diagnostics. 
    7             COPY 
    8        *    this is the comment in the middle 
    9                     LCOP1A. 
   10L        ENVIRONMENT DIVISION. 
   11L        INPUT-OUTPUT SECTION. 
   12L        FILE-CONTROL. 
   13L        SELECT FILE-1 
   14L            ASSIGN TO "FILE1.TMP". 
   15         DATA DIVISION. 
   16         FILE SECTION. 
   17         FD  FILE-1. 
   18         01  FILE1-REC       PIC X. 
   19         WORKING-STORAGE SECTION. 
   20         PROCEDURE DIVISION. 
   21         PE. DISPLAY "***END***" 
   22             STOP RUN. 
 
 

11.3.3.2.4 複数のCOPY文

DEC COBOL コンパイラと VAX COBOL コンパイラは,複数のCOPY文が同じ行に含まれている COBOL プログラムのリスティングでも,若干異なる形式を使用します。

次の2つのコンパイラ・リスティングは, DEC COBOL と VAX COBOL での, COBOL プログラムの 1つの行に複数のCOPY文があったときの注釈の位置の違い("L"という文字)を示しています。

DEC COBOL における複数のCOPY文のリスティング・ファイル:


 
 
              1 IDENTIFICATION DIVISION. 
              2 PROGRAM-ID. DCOP1J. 
              3 * 
              4 *       Tests copy with three copy statements on 1 line. 
              5 * 
              6 ENVIRONMENT DIVISION. 
              7 DATA DIVISION. 
              8 PROCEDURE DIVISION. 
              9 THE. 
             10         COPY LCOP1J. COPY LCOP1J. COPY LCOP1J. 
L            11         DISPLAY "POIUYTREWQ". 
L            12         DISPLAY "POIUYTREWQ". 
L            13         DISPLAY "POIUYTREWQ". 
             14         STOP RUN. 
 
 

VAX COBOL における複数のCOPY文のリスティング・ファイル:


 
 
    1         IDENTIFICATION DIVISION. 
    2         PROGRAM-ID. DCOP1J. 
    3        * 
    4        *    Tests copy with three copy statements on 1 line. 
    5        * 
    6         ENVIRONMENT DIVISION. 
    7         DATA DIVISION. 
    8         PROCEDURE DIVISION. 
    9         THE. 
   10             COPY LCOP1J. 
   11L            DISPLAY "POIUYTREWQ". 
   12C                         COPY LCOP1J. 
   13L            DISPLAY "POIUYTREWQ". 
   14C                                      COPY LCOP1J. 
   15L            DISPLAY "POIUYTREWQ". 
   16             STOP RUN. 
 
 

11.3.3.2.5 COPY挿入文

COPY文が行の途中に文を挿入するときのコンパイラ・リスティング・ファイルは, DEC COBOL プログラムと VAX COBOL プログラムで異なります。

次の2つのコンパイラ・リスティングで,LCOP5D.LIBは"O"というテキストを含んでいます。 DEC COBOL コンパイラは行をそのまま残し, COPYファイルの内容をソース行の下に出力します。 VAX COBOL コンパイラは,元のソース行を2つの部分に分割します。

DEC COBOL におけるCOPY文のリスティング・ファイル:


 
        ----------------------------------------------------------- 
           13 P0.     MOVE COPY LCOP5D. TO ALPHA. 
        L  14              "O" 
 
 

VAX COBOL におけるCOPY文のリスティング・ファイル:


 
        ----------------------------------------------------------- 
        13         P0. MOVE COPY LCOP5D. 
        14L                 "O" 
        15C                              TO ALPHA. 
 
 

11.3.3.2.6 REPLACE文

COBOL ソース文のREPLACEとDATE-COMPILEDに対する診断メッセージにより,コンパイラ・リスティング・ファイルにソース行の複数のインスタンスが含まれることになります。

DEC COBOL プログラムのREPLACE文では, DEC COBOL コンパイラが置換テキストに関するメッセージを発行する場合,そのメッセージは次のコンパイラ・リスティング・ファイルに示すように,プログラムの元のテキストに対応するものになります。

DEC COBOL におけるREPLACE文のリスティング・ファイル:


 
 
                     18 P0.     REPLACE ==xyzpdqnothere== 
                     19                         BY ==nothere==. 
                     20 
                     21         copy "drep3hlib". 
        L            22         display xyzpdqnothere. 
                     ...................1 
             %COBOL-F-UNDEFSYM, (1) Undefined name 
 
        LR           22     display nothere. 
 

VAX COBOL プログラムでは,コンパイラ・メッセージは次のコンパイラ・リスティング・ファイルに示すように,置換後のテキストに対応するものになります。

VAX COBOL におけるREPLACE文のリスティング・ファイル:


 
 
        18         P0. REPLACE ==xyzpdqnothere== 
        19                             BY ==nothere==. 
        20 
        21             copy "drep3hlib". 
        22LR           display nothere. 
                               1 
             %COBOL-F-ERROR  349, (1) Undefined name 
 

11.3.3.2.7 DATE COMPILED文

次の2つのコンパイラ・リスティング・ファイルは, DEC COBOL と VAX COBOL でDATE-COMPILED文を使用した場合の違いを示しています。

DEC COBOL におけるDATE-COMPILED文のリスティング・ファイル:


 
             33 * 
             34 date-compiled 
                .............1 
%COBOL-E-NODOT, (1) Missing period is assumed 
 
             34 date-compiled  16-Jul-1992. 
             35 security. none. 

VAX COBOL におけるDATE-COMPILED文のリスティング・ファイル:


        
   33        * 
   34         date-compiled   16-Jul-1992. 
                           1 
%COBOL-E-ERROR   65, (1) Missing period is assumed 
   35         security. none. 
 

REPLACE文とCOPY REPLACING文を使用したとき,コンパイラ・リスティング・ファイルにおける行番号は DEC COBOL と VAX COBOL で異なります。 DEC COBOL は,置換後の行番号を元のソース・テキストの行番号に対応させます。このため,それ以降の行番号は食い違うことになります。 VAX COBOL は行番号を連続的に付けます。

次のソース・プログラムは,プログラムを DEC COBOL と VAX COBOL のどちらでコンパイルするかによって,コンパイラ・リスティング・ファイルの最後の行番号が変わります。

ソース・ファイル:


 
                REPLACE ==A VERY LONG STATEMENT== by ==EXIT PROGRAM==. 
                A 
                VERY 
                LONG 
                STATEMENT. 
                DISPLAY "To REPLACE or not to REPLACE". 
 

DEC COBOL におけるREPLACE文のリスティング・ファイル:


 
 
        ----------------------------------------------------------------- 
                1 REPLACE ==A VERY LONG STATEMENT== by ==EXIT PROGRAM==. 
                2 EXIT PROGRAM. 
                6 DISPLAY "To REPLACE or not to REPLACE". 
 

VAX COBOL におけるREPLACE文のリスティング・ファイル:


 
 
        ----------------------------------------------------------------- 
                1 REPLACE ==A VERY LONG STATEMENT== by ==EXIT PROGRAM==. 
                2 EXIT PROGRAM. 
                3 DISPLAY "To REPLACE or not to REPLACE". 

11.3.3.2.8 コンパイラ・リスティングと分割コンパイル

/SEPARATE_COMPILATION修飾子を指定すると,リスティングが個別に生成されます。/SEPARATE_COMPILATIONを 指定せずにコンパイルされた分割コンパイル・プログラム(SCP)では,リスティングは以下のようになります。

  • PROGRAM_1のソース・リスティング

  • PROGRAM_2のソース・リスティング

  • PROGRAM_3のソース・リスティング

  • PROGRAM_1のマシン・コード・リスティング

  • PROGRAM_2のマシン・コード・リスティング

  • PROGRAM_3のマシン・コード・リスティング

/SEPARATE_COMPILATIONを指定したときの結果は以下のようになります。

  • PROGRAM_1のソース・リスティング

  • PROGRAM_1のマシン・コード・リスティング

  • PROGRAM_2のソース・リスティング

  • PROGRAM_2のマシン・コード・リスティング

  • PROGRAM_3のソース・リスティング

  • PROGRAM_3のマシン・コード・リスティング

これは VAX COBOL が生成するリスティングと同じであることに注意してください。

VFU-CHANNEL

DEC COBOL はVFU-CHANNELをサポートしていないので, VFU と VFP (Vertical Forms Unit ユーティリティと Vertical Forms Printing) を直接にはサポートしません。

制御バイト・シーケンス

DEC COBOL と VAX COBOL は,似たような出力ファイル・フォーマッティングを実現するために, VFCファイルの中で異なる制御バイト・シーケンスを使用しなければならないことがあります。

画面のフォーマッティング

DEC COBOL と VAX COBOL は,似たような画面フォーマッティングを実現するために,ACCEPTとDISPLAYで異なるエスケープ・シーケンスを使用しなければならないことがあります。

VFCファイル

VFCフォーマットのREPORT WRITERまたはLINAGEファイルは,通常はTYPEコマンドを使用するか,プリントアウトして表示します。電子メールで送信したり,エディタで読み込んだりするためには,コンパイル・コマンド行で/NOVFCを指定してコンパイルを行います。

1つの.COBソース・ファイルでオープンされるすべてのREPORT WRITERおよび LINAGEファイルは,同じフォーマットを持つことになります(VFCまたはNOVFC)。省略時はVFCです。/NOVFC修飾子が指定されていると,各ソース・ファイルに対してNOVFC条件が設定されます。次に例を示します。


   $ COBOL A/NOVFC,B/VFC,C/NOVFC,D 

この例で,ソース・ファイルBとDはVFCフォーマットでレポートを生成します (ソース・ファイル・リスト項目がプラス(+)記号で区切られている場合には動作が異なります)。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項 ウェブマスターに連絡