Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

PICTURE 属性

PICTURE 属性は、ピクチャー文字とデータ項目内の各文字位置に関連付けることにより、文字データ項目の特性を指定します。 ピクチャー文字は、その位置を占有できる文字のカテゴリーを指定します。

構文図を読む構文図をスキップする>>-PICTURE--'--picture-specification--'------------------------><
 

省略形 PIC

picture-specification
文字データ項目または数字データ項目のいずれかを記述します。 有効な文字については、文字データ用のピクチャー文字 または 数字データ用のピクチャー文字を参照してください。

数字ピクチャー指定は、定数の表示によって指定する場合と同じように、数字データの算術属性を指定します。

数字データは、算術値を持ちますが、文字フォーマットで保管されます。 数字データは、算術演算が行われる前にコード化算術データに変換されます。

数字データ項目の基数は、10 進数です。 そのスケールは、固定小数点または浮動小数点のいずれかです (K または E というピクチャー文字は浮動小数点スケールを表します)。 数字データ項目の精度は、有効数字の桁数です (浮動小数点については指数を除きます)。 有効数字は、桁位置および条件式のピクチャー文字で指定されます。 数字データ項目のスケール因数は、V または F のピクチャー文字、もしくは V と F の組み合わせに基づいて決められます。

10 進データだけは、ピクチャー文字で表示することができます。 複素数データを宣言するには、固定小数点または浮動小数点データ項目を記述する 1 つのピクチャー指定と共に COMPLEX 属性を指定します。

数字データの詳細については、数字データを参照してください。

文字データ

CHARACTER 属性のついたデータには、文字セットによって サポートされる 256 個のどの文字も入れることができます。 PICTURE 属性のついたデータは、 ピクチャー指定文字と一致する文字を持たなければなりません。 それぞれの文字は 1 バイトのストレージを占有します。

文字定数

文字定数は、連続した一連の文字を単一引用符または二重引用符で囲んだものです。

定数内に含まれる引用符は、引用符の使用でリストされる規則に従います。 文字定数の長さは、開始引用符と閉じ引用符の間にある文字の個数です。 ただし、2 つの引用符は、1 文字として数えられます。

ヌル文字定数とは、間にブランクを入れずに引用符を 2 つ書いたものです。 文字定数の構文は、以下のとおりです。

構文図を読む構文図をスキップする   .-------------------.
   V                   |
>>---'-+-----------+-'-+---------------------------------------><
       '-character-'
 

文字定数の例は以下のとおりです。

定数
長さ
'Shakespeare''s "Hamlet"'
22
"Shakespeare's ""Hamlet"""
22
"Page 5"
6
'/* This is a comment */'
27
''
0
(2)'Walla '
12

最後の例の、括弧内の数はストリング反復因数 であり、 そのあとにある一連の文字を指定回数だけ反復することを表します。 この例は、定数 "Walla Walla " と同等です。 ストリング反復因数は、定数であり、括弧で囲まれなければなりません。

X (16 進数) 文字定数

X という文字定数は、単一または二重引用符で囲まれている 16 進数が偶数個連続した列のことです。そのすぐ後ろに X という英字が続きます。 各組みの 16 進数は、1 つの文字を表します。

X 定数の長さは、指定された 16 進数の数の半分になります。

ヌルの X 定数は 2 つの引用符として書かれ、そのあとに接尾部 X が続きます。

構文図を読む構文図をスキップする     .-------------------------.
     V                         |
>>-'---+---------------------+-+-'X----------------------------><
       '-hex-digit hex-digit-'
 

X 定数の例は以下のとおりです。

定数
長さ
"0d0A"x
2
''X
0
注:
X 定数を使用すると、プログラムの移植性が制限されることがあります。

ビット・データ

BIT 属性を持つデータでは、ビット単位でストレージの操作を行うことができます。 ストレージの 1 バイトは 8 ビットで構成されます。

ビット定数

ビット定数は、単一または二重引用符で囲まれた一連の 2 進数の列であり、 そのすぐ後ろに B が続きます。

構文図を読む構文図をスキップする     .----------------------.
     V                      |
>>-'-----+--------------+---+-'B-------------------------------><
         '-binary-digit-'
 

ヌルのビット定数は、2 つの引用符で書かれ、そのあとに B が続きます。

ビット定数の例を示します。

定数
長さ
'1'B
1
"1100_1010_11"B
10
(64)'0'B
64
''B
0
'0'B
1

3 番目の例の括弧内の数字はストリング反復因数であり、 指定した回数だけ後続のビットを反復することを示します。 上記の例では、64 個のゼロのビットからなるストリングになります。

(ビット・データから文字データへの変換、 および文字データからビット・データへの変換に関する説明については、 ソースからターゲットへの変換規則を参照してください。)

B4 (16 進) ビット定数

B4 ビット定数は、単一引用符または二重引用符で囲まれた 一連の 16 進数の列であり、そのすぐあとに B4 が続きます。 各 16 進数は、4 つのビットを表します。 BX は、B4 の同義語です。

構文図を読む構文図をスキップする     .---------------.
     V               |
>>-'---+-----------+-+-'-+-B4-+--------------------------------><
       '-hex-digit-'     '-BX-'
 

B4 定数の例をいくつか示します。

'CA'B4 "1100_1010"B と同等
'80'B4 '1000_0000'B と同等
'1'B4 '0001'B と同等
(2)'F'B4 '1111_1111'B と同等
(2)'F'B4 'FF'BX と同等
''B4 ""B と同等

B3 (8 進) ビット定数

B3 ビット定数は、単一引用符または二重引用符で囲まれた一連の 8 進数の列であり、そのすぐ後に B3 が続きます。 各 8 進数は、3 つのビットを表します。

B3 定数の例をいくつか示します。

'22'B3 "010_010"B と同等
'40'B3 '100_000'B と同等
'1'B3 '001'B と同等
(2)'7'B3 '111_111'B と同等
''B3 ""B と同等

グラフィック・データ

GRAPHIC データには、すべての DBCS 文字を入れることができます。 各 DBCS 文字は、2 バイトのストレージを占有します。

グラフィック定数

グラフィック定数は、単一引用符または二重引用符で囲まれた一連の DBCS 文字 の列です。 グラフィック定数は、定数内の各 DBCS 文字ごとに最大 2 バイトのストレージを使用します。

G リテラルは、前後を DBCS 引用符で囲んで指定でき、またその場合は G 全体を DBCS で指定することもできます。

構文図を読む構文図をスキップする      .--------.
      V        |
>>-'<---+----+-+->'G-------------------------------------------><
        '-kk-'
 

GRAPHIC コンパイラー・オプションは、 受け入れられるグラフィック定数に対して有効でなければなりません。 GRAPHIC ENVIRONMENT オプションがグラフィック定数を含む STREAM 入出力ファイルに 指定されていない場合には、CONVERSION 条件が生じます。

GX (16 進) グラフィック定数

GX グラフィック定数は、単一引用符または二重引用符で囲まれた一連の 16 進数の 列 (4 の倍数) であり、そのすぐあとに GX が続きます。 4 桁の 16 進の各グループは、1 つの DBCS 文字を表します。

構文図を読む構文図をスキップする     .---------------------------------------------.
     V                                             |
>>-'---+-----------------------------------------+-+-'GX-------><
       '-hex-digit hex-digit hex-digit hex-digit-'
 

例:

'81a1'gx
1 個の DBCS 文字を表します。
""gX
''g と同じです。
注:
GX を使用すると、プログラムの移植性が制限されることがあります。

混合文字データ

混合文字データには、SBCS および DBCS 文字を入れることができます。 混合データは、CHARACTER データ・タイプによって表され、CHARACTER データの処理規則にしたがいます。

OPTIONS 属性の CHARGRAPHIC オプション、および MPSTR 組み込み関数は、 混合データ処理を援助するために使用することができます。 CHARGRAPHIC についての詳細は、OPTIONS オプションとその属性を参照してください。 MPSTR については、MPSTRを参照してください。

M (混合) 文字定数

M 定数は、引用符 (単一または二重) で囲まれた DBCS または SBCS 文字 (あるいはその両方) の連続したシーケンスであり、そのすぐ後に M という 英字が続きます。定数に含まれる引用符は、引用符の使用にリストされている 規則に従います。 定数 M の長さは、引用符の間にある SBCS 文字の数です。 ただし、2 つの単一引用符は 1 文字として計算され、 ストリング内の DBCS 文字の数を 2 倍にして計算します。

ヌルの M 定数は、2 つの引用符で書かれ、そのあとに M が書かれます。

構文図を読む構文図をスキップする     .---------------.
     V               |
>>-'---+-----------+-+-'M--------------------------------------><
       +-character-+
       '-<kk>------'
 

混合文字定数の例は、以下のとおりです。

定数
長さ
'IBM<kk>'M
z/OS では 7 バイト、その他のプラットフォームでは 5 バイト
'<.I.B.M>'M
z/OS では 8 バイト、その他のプラットフォームでは 6 バイト
''M
0

GRAPHIC コンパイラー・オプションは、受け入れられる混合定数に有効でなければなりません。 GRAPHIC ENVIRONMENT オプションは、混合定数を持つ STREAM 入出力ファイルに 指定されていない場合は、CONVERSION 条件が生じます。

z/OS では、以下の追加の規則が混合定数に適用されます。

注:
シフト・コードは z/OS でのみ使用されるため、混合データや M 定数を使用するとプログラムの移植性が制限されることもあります。

ワイド文字データ

WIDECHAR データには、すべての UTF-16 文字を入れることができます。 各ワイド文字は、2 バイトのストレージを占有します。

以下については、まだサポートされていません。

WX (16 進) ワイド文字定数

WX ワイド文字定数は、単一引用符または二重引用符で囲まれた一連の 16 進数の 列 (4 の倍数) であり、そのすぐあとに WX が続きます。 4 桁の 16 進の各グループは、1 つの UTF-16 文字を表します。

構文図を読む構文図をスキップする     .---------------------------------------------.
     V                                             |
>>-'---+-----------------------------------------+-+-'WX-------><
       '-hex-digit hex-digit hex-digit hex-digit-'
 

例:

'0031'wx
1 個の UTF-16 文字を表します。
""wX
''w と同じです。
注:
WX 定数は、ビッグ・エンディアン・フォーマットで指定する必要が あります (プログラムをリトル・エンディアンフォーマットで実行する場合でも同様です)。 このため、例えば文字 '1' のワイド文字値は、 常に '0031'wx ('3100'wx でなく) として指定する必要があります。
注:
WX を使用すると、プログラムの移植性が制限されることがあります。

数字データ

数字データ項目は、数字ピクチャー指定と PICTURE 属性を使用して宣言された変数の値です。 このデータ項目は、10 進固定小数点の値または 10 進浮動小数点の値を文字で表記したものです。

数字ピクチャー指定は、算術値に変換できるデータだけに割り当てられる文字ストリングを表します。

以下に例を示します。

  declare Price picture '999V99';

Price に割り当てられる値は、5 桁の 10 進数からなる文字ストリングで、 仮想小数点は右端から 2 桁目の前にあることを指定します。 Price に割り当てられるデータは、この仮想小数点を基準にして、10 進固定小数点データの場合の小数点位置合わせと同じ方法で位置合わせされます。

数字データは算術属性を持ちますが、コード化算術フォーマットでは保管されません。 文字ストリングとして保管されます。 したがって、このデータは、10 進固定小数点フォーマットまたは 10 進浮動小数点フォーマットに変換されない限り、算術演算に使用できません。 このような変換は自動的に行われますが、余分な処理時間が必要になります。

数字データはストリングのように文字フォーマットで表され、コード化算術データのように小数点位置合わせが行われますが、その処理方法は、コード化算術項目またはストリングのいずれとも異なります。 編集文字を数字データ項目内に挿入するように指定することができ、実際にデータ項目内に保存することができます。 したがって、その項目を文字ストリングとして印刷または処理する場合には、 代入演算に編集文字も含まれることになります。 ただし、数字データ項目を別の数字または算術変数に割り当てる場合は、 編集文字は代入演算には含まれません。 割り当てられるのは、実際の数字、符号、および想定小数点の位置だけです。 以下に例を示します。

  declare Price picture '$99V.99',
          Cost character (6),
          Amount fixed decimal (6,2);
  Price = 12.28;
  Cost = '$12.28';

PRICE のピクチャー指定では、通貨記号 ($) と 小数点 (.) が編集文字です。 これらの文字は、データ項目内の文字として保管されます。 これは、算術値の一部ではありません。 両方の代入ステートメントが実行されると、 PriceCost の実際の内部文字表記は 同じであると見なされることがあります。 印刷される場合は、全く同じに印刷されます。 ただし、常に同じ方法で機能するわけではありません。 以下に例を示します。

  Amount = Price;
  Cost   = Price;
  Amount = Cost;
  Price  = Cost;

最初の 2 つの代入ステートメントが実行されると、 Amount の値は 0012.28 となり、 Cost の値は '$12.28' となります。 Amount への Price の割り当てにおいて、 通貨記号と小数点は編集文字であり、割り当ての一部ではありません。 Price の数値は、内部コード化算術フォーマットに変換されます。 ただし、PriceCost に割り当てるときは、 文字ストリングへの割り当てなので、数字ピクチャー指定の編集文字も常に 割り当ての対象になります。 Price は文字フォーマットで保管されているので、変換は必要ありません。

3 番目と 4 番目の代入ステートメントを実行しようとすると、CONVERSION 条件が起こります。 ストリング内に通貨記号があれば算術定数としては有効でなくなるため、 Cost の値を Amount に割り当てることはできません。 これと同じ理由で、Cost の値を Price に 割り当てることもできません。 数字ピクチャー指定付きで宣言した変数に割り当てることができるのは、算術タイプの値か、算術タイプに変換できる値だけです。

小数点は編集文字でもあり、文字ストリング内の実際の文字にもなりますが、 算術フォーマットへの変換で CONVERSION 条件を引き起こしません。なぜなら、 算術定数内に小数点があってもよいからです。 正符号 (+) と負符号 (-) についても同様で、算術フォーマットに変換すると 算術定数の先頭に符号が付くからです。

数字ピクチャー指定では、その他の編集文字 (ゼロ抑制文字、浮動文字、挿入文字など) を使用することができます。 ピクチャー文字の詳細については、ピクチャー指定文字を参照してください。

日付属性

2 つのオペランドが DATE 属性を持っている場合、 コンパイラーは、暗黙の日付比較と変換を行います。 DATE 属性は、変数 (または引数または戻り値) が 日付を指定したパターンで保持することを指定します。

構文図を読む構文図をスキップする>>-DATE-+-------------+----------------------------------------><
        '-('pattern')-'
 
パターン
サポートされている日付のパターンの 1 つです。 パターンを指定しない場合、デフォルトの値 YYMMDD になります。

DATE 属性は、以下の属性の集合の 1 つを持つ変数がある場合のみ有効です。

n の長さまたは精度は、 pattern の長さと一致しなければなりません。

RESPECT コンパイル時オプションを指定すると (詳細は「プログラミング・ガイド」を参照)、次の事柄が起こります。

これで、エラー・メッセージが生成されなくても、 属性 DATE('YYMMDD') を持つ変数に DATE() を割り当てることができます。 DATE() が DATE 属性を持たない変数に割り当てられる場合には、 必ずエラー・メッセージが生成されます。

暗黙の DATE 比較

DATE 属性を指定して宣言された 2 つの変数を比較する場合、 DATE 属性は暗黙の共通化 を引き起こします。 1 つの変数のみが DATE 属性を持っている場合の比較には、フラグが付けられ、 もう一方の被比較数は、通常同じ DATE 属性を持っている場合と同様に 処理されます (適用されるいくつかの例外については、後述します)。

暗黙の共通化とは、共通の比較可能な表現に日付を変換するために コンパイラーがコードを生成することを意味します。 このプロセスでは、WINDOW コンパイル時オプションで 指定する window (限定時間帯) を使用して、2 桁の年を変換します。

次のコード・フラグメントでは、 DATE 属性を有効と見なした場合、 2 番目の DISPLAY ステートメントにある比較は時間帯が限定されます。 これは、window を 1900 で開始した場合、 この比較が偽を戻すということです。 しかし、window を 1950 で開始する場合、 この比較は真を戻します。

    dcl a   pic'(6)9' date;
    dcl b   pic'(6)9' def(a);
    dcl c   pic'(6)9' date;
    dcl d   pic'(6)9' def(c);

    b = '670101';
    d = '010101';

    display( b || ' < ' || d || ' ?' );
    display( a < c );

日付比較は、以下の位置で発生することがあります。

同様のパターンを持つ日付の比較

以下の条件化では、コンパイラーは同一のパターンを持つ日付を 比較する特別なコードを何も生成しません。

異なるパターンを持つ日付の比較

異なるパターンの日付を含む比較の場合、 共通の比較可能な表現に日付を変換するために、 コンパイラーはコードを生成します。 変換が行われてから、コンパイラーは 2 つの値を比較します。

DATE 属性とリテラルを含む比較

1 つの被比較数が DATE 属性を持っており、 他方の被比較数がリテラルの場合に比較を行うと、 コンパイラーは W レベルのメッセージを発行します。 次のコンパイラーの動作は、 以下に示すようにリテラルの値によって異なります。

  dcl start_date char(6) date;
  if start_date >= '' then /* no windowing */
  ...
  if start_date >= '851003' then /* windowed */
  ...
DATE 属性と非リテラルを含む比較

1 つの被比較数が DATE 属性を持っており、 他方の被比較数が日付でもリテラルでもない場合の比較では、 コンパイラーは E レベルのメッセージを発行します。 非日付値は、他方の被比較数と同じ日付パターンと window を 持っている場合と同様に処理されます。

  dcl start_date char(6) date;
  dcl non_date char (6);

  if start_date >= non_date then /* windowed */
  ...
暗黙の DATE 指定

日付パターンを指定して宣言された 2 つの変数を割り当てる際に、 DATE 属性は暗黙の変換の原因になることもあります。

ウィンドウ操作ソリューションを選択しなくても、 2 桁または 4 桁の年の両方を操作しなければならないコードが いくつかあることがあります。 次の状況では、複数の日付パターンを使用できます。

  dcl old_date char(6) date('YYMMDD');
  dcl new_date char(8) date('YYYYMMDD');

  new_date = old_date;
日付の診断

PL/I では、以下の場合に有効な 割り当てが起こります。

日付変数を以下のように使用すると、フラグが付けられます。

上記のすべての場合にコードが生成されますが、 ウィンドウ操作は起こりません。 結果では、DATE 属性は無視されます。

名前付き定数

名前付き定数は、他のデータ属性とともに VALUE 属性を使用して宣言されるスカラー ID です。 名前に対するすべての参照は、該当する定数への参照として 論理的に処理されますが、属性の完全セットは明示的に宣言されるか、 デフォルトが使用されるかのいずれかです。

注:
名前付き定数を使用すると、名前が付いていない場合とは 影響が異なってくることがあります。 名前付き定数についての属性は、 明示およびデフォルト属性を含む宣言から採用されます。 名前の付いていない定数についての属性は、定数の形、書式、 およびサイズから推論されます。 ストリング・データについては、長さが指定されない場合、 またはアスタリスクを使用して指定されている場合、 その長さは制限付き式の長さから判別します。

名前付き定数は、アプリケーション・プログラム内で使用するために より正確でなければなりません。また、それによって、 より予測しやすい結果が生じることになります。 例えば、名前が付いた定数 Unit を FIXED BINARY VALUE(1) として定義すると、 FIXED BINARY(15) VALUE(1) という属性を持ちます。 単に数字の 1 を使用すると、その属性は FIXED DECIMAL(1,0) になります。 起こりうるその他の違いについては、図 1 を参照してください。

また、名前付き定数により、アプリケーションの パラメーターを設定することができます。この結果、 デバッグと保守が容易になります。

名前付き定数は、算術データ、ストリング・データとして、 およびポインターやオフセットとして宣言することができます。 算術データとストリング・データ、ならびにそれらの属性については、 それぞれ ストリング・データとその属性コード化算術データとその属性を参照してください。 名前付き定数は、使用する前に宣言しなければなりません。

VALUE 属性
構文図を読む構文図をスキップする>>-VALUE(restricted-expression)--------------------------------><
 
restricted expression
式は、計算結果がスカラー値にならなければなりません。 制限付きの式に関する詳細については、制限付き式を参照してください。
名前付き定数の例

図 1 では、名前付き定数、ならびに名前付き定数と 名前の付いていない定数の間に生じる属性や精度の差を示しています。

図 1. 名前付き定数
    Dcl A4 value(148) fixed bin,
        C4 value(261) fixed bin,
        Whole value(800) fixed bin;
    Dcl Notes (4) static,
        init(a4,  (Whole/4),   /* 148, 200  */
             c4,  (Whole*2));  /* 261, 1600 */

 
    /* note that "Head" gets length equal to length of VALUE   */

 
    Dcl Head char VALUE('Feel the Power of PL/I'); /* char(22) */
    Dcl Headsize fixed bin value(length(Head));     /* 22       */
    Dcl 1 Head1 static,
          2 * char(Headsize) initial(Head),        /* char(22) */
          2 * char(20) init(''),
          2 * char(5) init('Page '),
          2 Page_number pic 'zz9',
          2 * char(0);
    Dcl TwoHeads char(2*Headsize);                /* char(44) */
    Dcl Page0 picture 'zz9' value(0);
    Dcl MyNullPtr ptr value(ptrvalue('ffff_ffff'xn));

 
    /* Differences in attributes/results of
       named and unnamed constants                                   */

 
    Dcl Pi float bin value (3.1416);  /* is FLOAT BINARY(21) but ... */
    3.1416                            /* is FIXED DECIMAL(5,4)       */

 
    Dcl Unit fixed bin value(1);      /* is FIXED BINARY(15) but ... */
    1                                 /* is FIXED DECIMAL(1,0)       */
    1.0                               /* is FIXED DECIMAL(2,1)       */
    1B                                /* is FIXED BINARY(1)          */
    0000_0000_0000_001B               /* is FIXED BINARY(15)         */

 
    Dcl Title char(20) value('SCIDS'); /* is CHAR(20)      but ... */
    Dcl Title2 char     value('SCIDS');/* is CHAR(5)               */
    'SCIDS'                            /* is CHAR(5)               */

名前付き定数は、定数が必要なときはいつでも使用することができます。 名前付き定数を、プログラムのあとのほうに出てくる制限付き式の中で使用して、独立定数の計算を行うこともできます。

プログラム制御のデータ・タイプとその属性

この節では、プログラム制御データとそれに関連する属性を説明しています。 プログラム制御データは、プログラムの実行を制御する値を指定するのに使います。

ラベル・データと LABEL 属性

ラベル とは、ラベル定数またはラベル変数の値です。

構文図を読む構文図をスキップする>>-LABEL--+--------------------------+-------------------------><
          |    .-,--------------.    |
          |    V                |    |
          '-(----label-constant-+--)-'
 

ラベル定数のリストが与えられる場合、変数はリストに含まれる定数を常にその値として持つ必要があります。そして、そのリスト内のラベル定数は、ラベル宣言を含むブロック内で既知である必要があります。 括弧で囲まれたラベル定数のリストは、ラベル配列に関する LABEL 属性仕様で使用できます。

ラベル定数は、ステートメント (PROCEDURE、ENTRY、PACKAGE、または FORMAT を除く) の ラベル接頭部として書かれる名前です。プログラム実行中に、この名前を参照して、 プログラム制御をそのステートメントに移すことができます。 (ステートメントでラベル接頭部の構文を説明しています。) 例えば、以下のコード行では、Abcde がラベル定数です。

  Abcde: Miles = Speed*Hours;

ラベルのついたステートメントは、通常の命令順序に従ってこの ステートメントを実行させることもできますし、 プログラム内の別の場所から GO TO ステートメントによって このステートメントに制御権を移動して実行させることもできます。

ラベル変数には、別のラベル変数の値またはラベル定数を 割り当てることができます。 そのような割り当てが行われると、ソース・ラベルの環境が ターゲット・ラベル変数に割り当てられます。 ラベルの静的配列が初期値を持つことを宣言した場合、その配列は割り当て不可と見なされます。

GO TO ステートメントで使用されるラベル変数は、その GO TO ステートメントの実行時にアクティブであるブロック内で使われているラベル定数でなければなりません。 次の例を考えてみてください。

declare Lbl_x label;
Lbl_a:   statement;
   
·
·
·
Lbl_b: statement;
·
·
·
Lbl_x = Lbl_a;
·
·
·
go to Lbl_x;

Lbl_aLbl_b はラベル定数であり、 Lbl_x はラベル変数です。 Lbl_aLbl_x に割り当てることにより、 GO TO Lbl_x ステートメントは 制御を Lbl_a ステートメントに移します。 それ以外の場合には、Lbl_bLbl_x に 割り当てるステートメントをプログラムに入れることができます。 この割り当てにより、Lbl_x への参照は、 Lbl_b への参照と同じになります。 この Lbl_x の値は、別の値が割り当てられるまで保持されます。

ラベル変数に無効な値が割り当てられても、エラーが検出されるとは限りません。 以下の例では、値 I が基数となっている 配列 Z の特定エレメントに伝送が行われます。

go to Z(I);
    
·
·
·
Z(1): if X = Y then return;
·
·
·
Z(2): A = A + B + C * D;
·
·
·
Z(3): A = A + 10;

Z(2) が省略されると、 I=2 の場合には GO TO Z(I) で ERROR 条件が生じます。 I < LBOUND(Z) または I > HBOUND(Z) の ときに GO TO Z(I) を実行した場合、 SUBSCRIPTRANGE 条件が使用不能になっていると、予測できない結果が生じます。

フォーマット・データと FORMAT 属性

フォーマット・データ項目とは、フォーマット定数またはフォーマット変数のことです。 フォーマット定数は、FORMAT ステートメントのラベル接頭部として書かれる名前です。

FORMAT 属性は、宣言される名前がフォーマット変数であることを指定します。

構文図を読む構文図をスキップする>>-FORMAT------------------------------------------------------><
 

FORMAT 属性で宣言された名前は、別のフォーマット変数を持つか、 またはそれに割り当てられるフォーマット定数を持ちます。 そのような割り当てが行われると、ソース・ラベルの環境が ターゲット・ラベル変数に割り当てられます。

他の PL/I コンパイラーとの互換性を維持するために、フォーマット変数をラベル変数として宣言することもできます。

次の例を考えてみてください。

  Prntexe: format
              ( column(20),A(15), column(40),A(15), column(60),A(15) );
  Prntstf: format
              ( column(20),A(10), column(35),A(10), column(50),A(10) );

PrntexePrntstf はフォーマット定数です。

次の例では、  4  5  2  と同じ結果になり、  6  7  3  と同じ結果になります。

 1   dcl Print format;
 2   put edit (X,Y,Z) (R(Prntexe) );
 3   put edit (X,Y,Z) (R(Prntstf) );
 4   Print = Prntexe;
 5   put edit (X,Y,Z) (R(Print) );
 6   Print = Prntstf;
 7   put edit (X,Y,Z) (R(Print) );
VARIABLE 属性

VARIABLE 属性は、名前を変数として設定します。また、この属性は、属性 ENTRY、FILE、または LABEL のいずれかを指定した場合にのみ指定できます。 他のすべての宣言では無視されます。

構文図を読む構文図をスキップする>>-VARIABLE----------------------------------------------------><
 

名前が構造体または共用体のメンバーである場合、 または以下のいずれかの属性が指定されている場合、 VARIABLE 属性は暗黙に指定されています。

以下の例では、Account1Account2 は、 ファイル変数であり、File1File2 はファイル定数です。

  declare Account1 file variable,
          Account2 file automatic,
          File1 file,
          File2 file;

File1File2 は、 Account1 または Account2 に順番に割り振られます。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)