Rational Developer for System z
Enterprise PL/I for z/OS, Version 4.1, プログラミング・ガイド

RULES

RULES オプションを指定すると、ある種の言語機能を使用可能または 使用禁止にすることができ、代替の選択肢があればセマンティクスを選択できます。 これは一般プログラミング・エラーの診断に役立ちます。

構文図を読む構文図をスキップする             .-,--------------------------------------------.
             V   .-IBM--.                                   |
>>-RULES--(----+-+- ANS-+---------------------------------+-+--)-><
               | .-BYNAME----.                            |
               +-+- NOBYNAME-+----------------------------+
               | .-NODECSIZE-.                            |
               +-+-DECSIZE---+----------------------------+
               | .-ELSEIF----.                            |
               +-+- NOELSEIF-+----------------------------+
               | .-EVENDEC----.                           |
               +-+- NOEVENDEC-+---------------------------+
               | .-GLOBALDO---.                           |
               +-+-NOGLOBALDO-+---------------------------+
               | .-GOTO-------------------------.         |
               +-+-NOGOTO--+------------------+-+---------+
               |           |    .-STRICT-.    |           |
               |           '-(--+-LOOSE--+--)-'           |
               | .-NOLAXBIF-.                             |
               +-+-LAXBIF---+-----------------------------+
               | .-NOLAXCTL-.                             |
               +-+-LAXCTL---+-----------------------------+
               | .-LAXDCL----.                            |
               +-+- NOLAXDCL-+----------------------------+
               | .-NOLAXDEF-.                             |
               +-+-LAXDEF---+-----------------------------+
               | .-LAXENTRY----.                          |
               +-+- NOLAXENTRY-+--------------------------+
               | .-LAXIF----.                             |
               +-+- NOLAXIF-+-----------------------------+
               | .-LAXINOUT---.                           |
               +-+-NOLAXINOUT-+---------------------------+
               | .-LAXLINK----.                           |
               +-+- NOLAXLINK-+---------------------------+
               | .-LAXMARGINS---------------------------. |
               +-+-NOLAXMARGINS--+--------------------+-+-+
               |                 |    .-STRICT---.    |   |
               |                 '-(--+-XNUMERIC-+--)-'   |
               | .-LAXPUNC----.                           |
               +-+- NOLAXPUNC-+---------------------------+
               | .-LAXQUAL-------------------------.      |
               +-+-NOLAXQUAL--+------------------+-+------+
               |              |    .-LOOSE--.    |        |
               |              '-(--+-STRICT-+--)-'        |
               | .-LAXSEMI----.                           |
               +-+- NOLAXSEMI-+---------------------------+
               | .-LAXSTG----.                            |
               +-+- NOLAXSTG-+----------------------------+
               | .-NOLAXSTRZ-.                            |
               +-+-LAXSTRZ---+----------------------------+
               | .-MULTICLOSE----.                        |
               +-+- NOMULTICLOSE-+------------------------+
               | .-PADDING---.                            |
               +-+-NOPADDING-+----------------------------+
               | .-PROCENDONLY---.                        |
               +-+-NOPROCENDONLY-+------------------------+
               | .-STOP---.                               |
               +-+-NOSTOP-+-------------------------------+
               | .-UNREF----.                             |
               '-+- NOUNREF-+-----------------------------'
 

IBM | ANS
IBM サブオプションの場合:

ANS サブオプションの場合:

また、RULES(ANS) では、旧コンパイラーでは無視されていた次のエラーにより、E レベル・メッセージが生成されます。

BYNAME | NOBYNAME
NOBYNAME を指定すると、コンパイラーは E レベル・メッセージを 伴うすべての BYNAME 割り当てにフラグを付けます。
DECSIZE | NODECSIZE
DECSIZE を指定すると、代入によって SIZE 条件が発生した場合に SIZE 条件が使用不可であると、コンパイラーは FIXED DECIMAL 変数に対する FIXED DECIMAL 式のすべての代入にフラグを立てます。

RULES(DECSIZE) を指定すると、SIZE が使用不可であると、X が FIXED DECIMAL である場合に X = X + 1 という形式のすべてのステートメントにフラグが立てられる ことになるため、コンパイラーによって大量のメッセージが生成される場合があります。

ELSEIF | NOELSEIF
NOELSEIF を指定すると、直後に IF ステートメントが続く ELSE ステートメントに対しコンパイラーがフラグを立て、SELECT ステートメントとして書き直すように提案します。

一連のネストされた IF-THEN-ELSE ステートメントではなく SELECT ステートメントの使用を実施する場合に、このオプションを使用すると便利です。

EVENDEC | NOEVENDEC
NOEVENDEC を指定すると、コンパイラーは、偶数精度を指定するすべての FIXED DECIMAL 宣言にフラグを立てます。
GLOBALDO | NOGLOBALDO
NOGLOBALDO の指定は、コンパイラーに、親ブロックで宣言された制御変数を持つすべての DO ループにフラグを立てるように指示します。
GOTO|NOGOTO
NOGOTO(LOOSE) を指定すると、コンパイラーはラベル定数への GOTO ステートメントにフラグを立てます。ただし、その GOTO が ON ユニットを終了する場合や、ターゲットのラベル定数がその GOTO ステートメントと同じブロック内にある場合を除きます。

NOGOTO(STRICT) を指定すると、コンパイラーはラベル定数への GOTO ステートメントにフラグを立てます。ただし、その GOTO が ON ユニットを終了する場合を除きます。

LAXBIF | NOLAXBIF
LAXBIF を指定すると、空のパラメーター・リストを使用しない場合でも、 コンパイラーは NULL のようなコンテキスト宣言を組み込み関数のために 作成します。
LAXCTL | NOLAXCTL
LAXCTL を指定すると、固定エクステントを使用して CONTROLLED 変数を 宣言しても、CONTROLLED 変数を異なるエクステントに割り当てることができます。NOLAXCTL を指定すると、CONTROLLED 変数を異なるエクステントに 割り当てる場合に、そのエクステントをアスタリスクとして指定するか、 非定数式として指定する必要があります。

NOLAXCTL が指定されていると、次のコードは不正になります。

    dcl a bit(8) ctl;
    alloc a;
    alloc a bit(16);

ただし、次のコードは NOLAXCTL が指定されていても有効です。

    dcl b bit(n) ctl;
    dcl n fixed bin(31) init(8);
    alloc b;
    alloc b bit(16);
LAXDCL | NOLAXDCL
LAXDCL を指定すると、暗黙宣言が可能になります。NOLAXDCL を指定すると、BUILTIN の場合と SYSIN および SYSPRINT ファイル の場合を除いて、暗黙宣言およびコンテキスト宣言はすべて禁止になります。
LAXDEF | NOLAXDEF
LAXDEF を指定すると、いわゆる無許可の定義が、コンパイラーのメッセージなしに受け入れられます (コンパイラーが通常作成する E レベル・メッセージも出ません)。
LAXENTRY | NOLAXENTRY
LAXENTRY を指定すると、非プロトタイプ・エントリー宣言が許可されます。 NOLAXENTRY を指定すると、コンパイラーは、すべての非プロトタイプ・エントリー宣言 (つまり、パラメーター・リストを指定しないすべての ENTRY 宣言) のフラグを立てます。 なお、これは、ENTRY にパラメーターがない場合には、単なる ENTRY としてではなく ENTRY() として宣言する必要があることを意味します。
LAXIF | NOLAXIF
RULES(NOLAXIF) を指定すると、コンパイラーは、属性 BIT(1) NONVARYING を持たない すべての IF、WHILE、UNTIL、および WHEN 文節にフラグを立てます。

NOLAXIF を指定すると、以下はすべてにフラグが立てられます。

dcl i fixed bin;
dcl b bit(8);
   .
   .
   .
if i then ...
if b then ...
LAXINOUT | NOLAXINOUT
NOLAXINOUT を指定すると、コンパイラーはすべての ASSIGNABLE BYADDR パラメーターが入力 (かつ場合によっては出力) パラメーター であると想定するため、そのようなパラメーターが初期化されていないと、警告を出します。
LAXLINK | NOLAXLINK
NOLAXLINK を指定すると、以下のいずれかが一致 しない場合に、コンパイラーは、2 つの ENTRY 変数または定数の代入または比較 のすべてにフラグを立てます。
LAXMARGINS | NOLAXMARGINS
NOLAXMARGINS を指定すると、STRICT および XNUMERIC サブオプションの設定に応じて、右マージンの後に非ブランク文字がある行にコンパイラーがフラグを立てます。 このオプションは、誤って右マージンへ押し出された終了コメントなどのコードの検出に役立ちます。

いずれかのプリプロセッサーと共に NOLAXMARGINS および STMT オプションを使用すると、NOLAXMARGINS オプションによってフラグが立てられるステートメントは、ステートメント番号ゼロとして報告されます (ステートメントの番号付けはすべてのプリプロセッサーが終了した後でのみ行われますが、マージンの外側のテキストの検出はソースが読み取られるとすぐに行われるためです)。

STRICT
STRICT サブオプションを指定すると、右マージンの後に非ブランク文字がある行にコンパイラーがフラグを立てます。
XNUMERIC
XNUMERIC サブオプションを指定すると、右マージンがカラム 72 で、カラム 73 から 80 までのすべてのカラムに数字が含まれている場合を除き、右マージンの後に非ブランク文字がある行にコンパイラーがフラグを立てます。
LAXPUNC | NOLAXPUNC
NOLAXPUNC を指定すると、コンパイラーは想定される句読点が欠落している場所 に E レベル・メッセージのフラグを立てます。

ステートメント "I = (1 * (2);" を例にとると、 コンパイラーはセミコロンの前に右側の閉じ括弧を入れるべきであった と想定します。RULES(NOLAXPUNC) を指定した場合、このステートメント に対しては E レベル・メッセージのフラグが立てられ、 指定していない場合は W レベル・メッセージのフラグが立てられます。

LAXQUAL | NOLAXQUAL
NOLAXQUAL(LOOSE) を指定すると、コンパイラーはレベル 1 以外で、かつドット修飾のない構造体メンバーへのすべての参照にフラグを立てます。 次の例を考えてみてください。
dcl
  1 a,
    2 b,
      3 b fixed bin,
      3 c fixed bin;

c   = 11;   /* would be flagged */
b.c = 13;   /* would not be flagged */
a.c = 17;   /* would not be flagged */

NOLAXQUAL(STRICT) を指定すると、コンパイラーはラベル 1 名を含まない構造体メンバーへのすべての参照にフラグを立てます。 次の例を考えてみてください。

dcl
  1 a,
    2 b,
      3 b fixed bin,
      3 c fixed bin;

c   = 11;   /* would be flagged */
b.c = 13;   /* would be flagged */
a.c = 17;   /* would not be flagged */
LAXSCALE|NOLAXSCALE
NOLAXSCALE を指定すると、コンパイラーは、すべての FIXED BIN(p,q) または FIXED DEC(p,q) 宣言にフラグを立てます (ただし q < 0 または p < q)。
LAXSEMI | NOLAXSEMI
NOLAXSEMI を指定すると、コンパイラーは、コメント内に現れるすべてのセミコロン にフラグを立てます。
LAXSTG | NOLAXSTG
NOLAXSTG を使用すると、コンパイラーは、B がパラメーターであったとしても (これが中核です)、変数 A が ADDR(B) および STG(A) > STG(B) の BASED として宣言されている場所にフラグを立てます。

NOLAXSTG が指定されているときでも、B に添え字があれば、IBM2402I E レベル・メッセージは生成されません。

コンパイラーは、B が AUTOMATIC または STATIC ストレージ内にあった場合でも、この種の問題にフラグを立てたと考えられます。しかし、デフォルトでは、B がパラメーターである場合にフラグを立てます (一部に、実引数を記述しないプレースホルダー (置き換え) 属性を使用して B を宣言する場合があるため)。 パラメーターと引数の宣言が合致している (または合致している必要がある) 場合は、RULES(NOLAXSTG) を指定すると、ストレージ・オーバーレイの問題をより多く検出できる場合があります。

LAXSTRZ | NOLAXSTRZ
LAXSTRZ を指定すると、コンパイラーは、 余分のビットがすべてゼロである (または、余分の文字がすべてブランクで ある) 場合に、長すぎる定数値に初期化された、または割り当てられた ビット変数または文字変数にフラグを立てません。
MULTICLOSE | NOMULTICLOSE
NOMULTICLOSE を指定すると、コンパイラーは、E レベル・メッセージを伴うステートメントの複数のグループを強制的に閉じるステートメントすべてにフラグを立てます。
PADDING | NOPADDING
NOPADDING を指定すると、コンパイラーは、埋め込みを含むすべての構造にフラグを立てます。
PROCENDONLY|NOPROCENDONLY
NOPROCENDONLY を指定すると、PROCEDURE を終了するすべての END ステートメントにフラグが立てられます。ただし、その END ステートメントが PROCEDURE を指定していない場合、つまり END キーワードの直後にセミコロンがある場合に限られます。
STOP|NOSTOP
NOSTOP を指定すると、すべての STOP および EXIT ステートメントにフラグが立てられます。
UNREF | NOUNREF
NOUNREF を指定すると、参照されないレベル 1 AUTOMATIC 変数、および参照されるサブエレメントを含まない構造体または共用体であるレベル 1 AUTOMATIC 変数に、コンパイラーがフラグを立てます。

デフォルト: RULES (IBM BYNAME NODECSIZE EVENDEC ELSEIF GLOBALDO GOTO NOLAXBIF NOLAXCTL LAXDCL NOLAXDEF LAXIF LAXINOUT LAXLINK LAXPUNC LAXMARGINS(STRICT) LAXQUAL LAXSCALE LAXSEMI LAXSTG NOLAXSTRZ MULTICLOSE PADDING PROCENDONLY STOP UNREF)


Terms of use | Feedback

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