前へ | 次へ | 目次 | 索引 |
第 11.3.2.3 項 と 第 11.3.2.5 項 では,DEC COBOL と VAX COBOL のコマンド行修飾子を比較しています。OpenVMS Alphaオペレーティング・システムの DEC COBOL のコマンド行修飾子の詳細については,OpenVMS Alpha のシステム・プロンプトで
HELP COBOLと入力して,オンライン・ヘルプを参照してください。VAX COBOL のコマンド行修飾子については,『VAX COBOL User Manual』を参照してください。
11.3.2.1 /NATIONALITY={JAPAN|US}
/NATIONALITY=JAPANが指定されていると,円記号(¥) が省略時の通貨記号になり,日本語サポート機能が有効になります。また,この場合は/NODIAGNOSTICSと/NOANALYSIS_DATAが暗黙のうちに指定されます。
OpenVMS Alpha 上の DEC COBOL で/NATIONALITY=JAPANを指定した場合,Oracle CDD/Repository はサポートされません。
コンパイル・コマンド行で/NATIONALITY=USを指定すると,ドル記号($)が省略時の通貨記号になり,日本語サポート機能は無効になります。
11.3.2.2 /STANDARD=MIA
コンパイル・コマンド行で/STANDARD=MIAが指定されていると,コンパイラはMIA仕様に準拠していない言語要素について診断情報を発行します。
診断情報を表示するには,/WARNINGS=ALL修飾子か/WARNING=INFORMATION修飾子が必要です。
省略時の設定はNOMIAです。
11.3.2.3 DEC COBOL 固有の修飾子
以下のコマンド行修飾子は DEC COBOL でのみ使用できます。
1 この修飾子に対する DEC COBOL の動作は,VAX COBOL の省略時の動作に近くなるように設計されています。 |
『OpenVMS Calling Standard』の呼び出し規則では,データ・フィールドが (その規則で定められている)特定のアドレスにアラインされている必要があります。これと同じ規則に,すべてのデータ・レコードは,そのアラインメントの倍数でなくてはならないと定められています。
コンパイル・コマンド行で/ALIGNMENT=PADDINGが指定されていると,COBOL のグループ・データ項目はその自然な境界上にアラインされ,これらのグループ項目はアラインメントの倍数になるようにパッドが挿入されます。Alphaのアラインメントとパッドの挿入が行われるときの基本データ項目のアラインメントの詳細については,『DEC COBOL Reference Manual』を参照してください。
11.3.2.5 VAX COBOL 固有の修飾子
表 11-6 は,VAX COBOL に固有のコマンド行修飾子と修飾子オプションの組み合わせを示しています。これらは DEC COBOL では使用できません。
修飾子 | 説明 |
---|---|
/DESIGN | 詳細設計として入力ファイルをコンパイラが処理を行かどうかを制御する。 |
/INSTRUCTION_SET[=option] | VAX 命令セットの異なる部分を使用して,シングル・チップ VAX プロセッサ上で実行時の性能を改良する。 |
/STANDARD=OPENVMS_AXP | DEC COBOL コンパイラでサポートされない言語機能に関する情報メッセージを出力する( 第 11.3.2.7 項 および『 VAX COBOL バージョン5.1 リリース・ノート』を参照) |
/STANDARD=PDP11 | COBOL -81 コンパイラでサポートされない言語機能に関する情報メッセージを出力する |
/WARNINGS=STANDARD | DECによる拡張機能である言語機能に関する情報メッセージを出力する。DEC COBOL の同等な機能は /STANDARD=SYNTAX 修飾子である |
DEC COBOL は,VAX COBOL の/STANDARD=V3修飾子のインプリメンテーションがサポートしているいくつかの機能をサポートしていません。
/WARNING=ALL修飾子を使用すると,/STANDARD=V3 の効果がわかりやすくなります。特に,DEC COBOLは,/STANDARD=V3 が指定されていると,以下の情報メッセージを生成します。
/STANDARD=V3 evaluation order not supported for this construct |
/STANDARD=V3 variable length item rules not supported for this construct |
/STANDARD=V3修飾子の VAX COBOL のインプリメンテーションの詳細については,『VAX COBOL User Manual』の修飾子に関する付録を参照してください。
11.3.2.7 /STANDARD=OPENVMS_AXP
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 に固有の動作について説明します。
11.3.3.1 プログラム構造メッセージ
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. |
$ COBOL /ANSI/WARNINGS=ALL T1.COB $ |
プログラムはコンパイルされます。VAX COBOL コンパイラはメッセージを出力しません。
$ 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修飾子はありません。
11.3.3.2 プログラム・リスティングの違い
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". |
前へ | 次へ | 目次 | 索引 |