COBOL2002 言語 拡張仕様編


24.3.3 日本語文字の扱い(-V3Rec,Fixed,-V3Rec,Variable)

〈この項の構成〉

(1) 機能

-V3Rec,Fixed,-V3Rec,Variableは,利用者がメインフレーム(VOS3)からファイル転送された,メインフレームでの固定長レコード形式または可変長レコード形式のCOBOL原始プログラムを,メインフレームの日本語の扱いに合わせて翻訳することを可能とするためにサポートした機能である。すなわち,この機能を用いると,日本語混在のCOBOL原始プログラムを,機能キャラクタが付加されたものとみなした,原始プログラムの領域の意識および語の構成規則のエラーチェックを行って翻訳することができる。また,このシステムでの標準コードと拡張コードの等価規則を無効とした形での翻訳を可能とする。

ここでは,日本語混在のCOBOL原始プログラムを,メインフレームの日本語の扱いに合わせて翻訳する上で,標準仕様と異なる言語仕様について述べる。

(2) 文字集合

日本語文字を用いる場合,日本語文字列の直前と直後に,メインフレームでの「KEISコード開始」と「EBCDIKコード開始」を表す2バイトの機能キャラクタ(シフトコード)が,それぞれ付加されたものとみなす。ここでは,以降,これらの機能キャラクタをそれぞれ,[漢]と[E]で表す。

(a) [漢],[E]を仮定する条件

-V3Recオプションの指定が有効な場合,このシステムで[漢],[E]が仮定される条件を次に示す。

  • [漢]が仮定される条件

    空白を除く1件または連続する拡張コードの直前に[漢]が仮定される。

  • [E]が仮定される条件

    直前に[漢]を仮定された拡張コードの文字列の後ろで,最初に出現した空白を除く標準コードの直前に[E]が仮定される。

(b) 空白に関する機能キャラクタの扱いによるメインフレームとの差異

このシステムは,空白に関する機能キャラクタの扱いで,メインフレームと以下の差異がある。

  • 拡張コードの空白を標準コードの空白2個と等価とみなし,日本語文字列の開始文字として扱わない。このため,拡張コードの空白の直前には[漢]が仮定されない。

  • 日本語文字列に続く標準コードの空白は日本語文字列として扱う。このため,日本語文字列と改行の間が0個以上の半角空白だけのとき,[E]が仮定されない。

空白に関する機能キャラクタの扱いをメインフレームと同等にしたい場合,-V3Recオプションと合わせて-V3RecFCSpaceオプションを指定する。-V3RecFCSpaceオプションについては,マニュアル「COBOL2002 ユーザーズガイド」またはマニュアル「COBOL2002 使用の手引 手引編」の-V3RecFCSpaceオプションを参照のこと。

(例)

日本語文字が含まれた語に対して,機能キャラクタが仮定される例を以下に示す。

-V3Recオプション指定がない場合
      01  得意先.
        02  データ    PIC N(2) VALUE N'日立'.
        02  空白      PIC N(2) VALUE N'▲▲'.
-V3Recオプション指定だけがある場合
       01 [漢]得意先[E].
        02  [漢]データ    [E]PIC N(2) VALUE N'[漢]日立[E]'.
        02  [漢]空白      [E]PIC N(2) VALUE N'▲▲'.
-V3Recオプションと合わせて-V3RecFCSpaceオプションを指定した場合
       01 [漢]得意先[E].
        02  [漢]データ    [E]PIC N(2) VALUE N'[漢]日立[E]'.
        02  [漢]空白      [E]PIC N(2) VALUE N'[漢]▲▲[E]'.

(凡例)▲:日本語空白

(3) 文字列

利用者定義語,定数および注釈に日本語文字を使用できる。

(a) COBOLの語

COBOLの語とは,31字以下の文字列であって,利用者定義語,システム名,予約語および関数名のどれかとする。

この機能では,標準コードの文字に換算して31字以下の文字列とする。

各英小文字は,その対応する英大文字に等価とみなす。ただし,空白を除く,拡張コードの各文字は,その対応する標準コードの各文字に等価とはみなさない。

拡張コードの空白は,標準コードの2字の空白と等価とみなす。

  • 利用者定義語

    日本語(拡張コード)文字を用いて,利用者が定義できる語には,次のものがある。

    • 符号系名(alphabet-name)

    • データ名(data-name)

    • レコード名(record-name)

    • 条件名(condition-name)

    • ファイル名(file-name)

    • 指標名(index-name)

    • 呼び名(mnemonic-name)

    • 記号文字(symbolic-character)

    • 字類名(class-name)

    • 段落名(paragraph-name)

    • 節名(section-name)

    各利用者定義語の語を構成する文字列のサイズは,機能キャラクタを含めて,31バイト以下でなければならない。したがって,日本語文字だけで語を構成する場合は,拡張コードの文字に換算して,13字以下でなければならない。

(b) 定数

72カラム以前に改行文字がある場合,改行文字から72カラムに空白を仮定する。

  • 英数字定数

    英数字定数を構成する文字列のサイズは,機能キャラクタを含めて,160バイト以下でなければならない。

構文規則

  1. 文字列が引用符を表すならば,引用符の1字を表すのに,標準コードの連続する2字の引用符を用いなければならない。

  • 日本語文字定数

    日本語文字定数を構成する文字列のサイズは,機能キャラクタを含めて,160バイト以下でなければならない。したがって,日本語文字だけで語を構成する場合は,78字以下でなければならない。

形式

[図データ]

構文規則

  • 文字1は,拡張コードの任意の文字および標準コードの空白とする。

  • 拡張コードの引用符は,分離符の引用符とはみなさない。したがって,拡張コードの引用符は,文字1内の任意の位置に書くことができる。

(4) コーディング規則

(a) 行と文字位置

原始プログラムは英数字文字を1文字(1バイト)単位,日本語文字を2バイト単位として80文字で構成される行中に記述する。

メインフレームの固定長レコード形式によって翻訳する場合,日本語文字定数など前後に付ける機能キャラクタは,プログラム原文領域(8カラムから72カラム)中になければならない。

メインフレームの可変長レコード形式によって翻訳する場合,日本語文字列の前後に付ける機能キャラクタを除くと,原始文記述はプログラム原文領域中に納まっていなければならない。

(b) 日本語文字の継続

日本語文字は,複数行にわたって定義できる。この場合,継続行はプログラム原文領域(8カラムから72カラム)で指定しなければならない。ただし,日本語文字の継続に関しては,機能キャラクタの扱いがメインフレームと異なるため,メインフレームとの完全な互換性はない。

(5) 原始文操作機能の特性

この機能では,原始文操作機能であるCOPY文のREPLACING指定およびREPLACE文によって語の置き換えがあり,置き換えられることによって,本来境界Rまでに納まっていた原文語が機能キャラクタを含めた形で論理的に境界Rを超える場合でも,見かけ上の境界Rまでに納まる場合は,そのまま置かれる。同様にCOPY文のPREFIXING/SUFFIXING指定によって語が付加された結果として,機能キャラクタを含めて,論理的に境界Rを超える場合でも,見かけ上の境界Rまでに納まる場合は,そのまま置かれる。また,日本語文字の置き換えが発生するCOPY文およびREPLACE文に関しては,機能キャラクタの扱いがメインフレームと異なるため,メインフレームとの完全な互換性はない。

また,COPY文のPREFIXING/SUFFIXING指定で指定する語1および語2に日本語文字を含めてはならない。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「3.2.2 COPY文

COBOL2002 言語 標準仕様編」 「3.2.3 REPLACE文