このオプションは、特定の言語機能を使用可能または使用不可にし、代替の選択肢が提供されている場合はセマンティクスを選択するために 使用できます。 これは一般プログラミング・エラーの診断に役立ちます。
.-+---+-----------------------------------------. | '-,-' | V .-IBM--. | >>-RULES--(----+-+- ANS-+----------------------------------+-+--)->< | .-BYNAME---. | +-+-NOBYNAME-+------------------------------+ | .-NODECSIZE-. | +-+-DECSIZE---+-----------------------------+ | .-ELSEIF----. | +-+- NOELSEIF-+-----------------------------+ | .-EVENDEC----. | +-+- NOEVENDEC-+----------------------------+ | .-GOTO---. | +-+-NOGOTO-+--------------------------------+ | .-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-+--)-' | | .-LAXSCALE---. | +-+-NOLAXSCALE-+----------------------------+ | .-LAXSEMI----. | +-+- NOLAXSEMI-+----------------------------+ | .-LAXSTG----. | +-+- NOLAXSTG-+-----------------------------+ | .-NOLAXSTRZ-. | +-+-LAXSTRZ---+-----------------------------+ | .-MULTICLOSE---. | +-+-NOMULTICLOSE-+--------------------------+ | .-PROCENDONLY---. | +-+-NOPROCENDONLY-+-------------------------+ | .-STOP---. | +-+-NOSTOP-+--------------------------------+ | .-UNREF----. | '-+- NOUNREF-+------------------------------'
ANS サブオプションの場合:
RULES(DECSIZE) を指定すると、コンパイラーは、大量のメッセージを出すことがあります。 これは、SIZE が使用不可にされた場合、X = X + 1 の形式のステートメントにはすべてフラグが立てられるためです (X が FIXED DECIMAL の場合)。
このオプションは、ネストした一連の IF-THEN-ELSE ステートメントではなく、SELECT ステートメントの使用を実施するときに役立ちます。
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);
NOLAXIF の場合、以下のすべてにフラグが立てられます。
dcl i fixed bin; dcl b bit(8); ... if i then ... if b then ...
例えば、A1 が ENTRY(CHAR(8)) として、および A2 が ENTRY(POINTER) VARIABLE として宣言されているときに RULES(NOLAXLINK) の場合、コンパイラーは、A1 を A2 に代入する試みにフラグを立てます。
例えば、A3 が ENTRY RETURNS(FIXED BIN(31)) として、および A4 が RETURNS 属性なしで ENTRY VARIABLE として宣言されているときに RULES(NOLAXLINK) の場合、コンパイラーは、A3 を A4 に代入する試みにフラグを立てます。
例えば、A5 が ENTRY OPTIONS(ASM) として、および A6 が OPTIONS 属性なしで ENTRY VARIABLE として宣言されているときに RULES(NOLAXLINK) の場合、コンパイラーは、A5 を A6 に代入する試みにフラグを立てます。これは、A5 の宣言中の OPTIONS(ASM) は、A5 が LINKAGE(SYSTEM) を持つことを意味し、その一方、A6 は OPTIONS 属性がないため、デフォルトで LINKAGE(OPTLINK) を持つからです。
NOLAXMARGINS および STMT オプションがプリプロセッサーのいずれかとともに使用される場合、NOLAXMARGINS オプションが 原因でフラグが立てられたステートメントはステートメント・ゼロとして報告されます。 (これは、すべてのプリプロセッサーが完了してからステートメントの番号付けが行われるためです。 ただし、ソースが読み取られると同時にマージンの外側にあるテキストが検出されます。)
ステートメント "I = (1 * (2);" を例にとると、コンパイラーはセミコロンの前に右側の閉じ括弧を入れるべきであった と想定します。RULES(NOLAXPUNC) を指定した場合、このステートメント に対しては E レベル・メッセージのフラグが立てられ、指定していない場合は W レベル・メッセージのフラグが立てられます。
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 */
コンパイラーは、B が AUTOMATIC または STATIC ストレージにあると、前からこの種の問題にフラグを立てますが、B がパラメーターであるときには、デフォルトでこれにフラグを立てません (お客様によっては、実引数を記述しないでプレースホルダー属性で B を宣言するからです)。 パラメーターおよび引数の宣言が一致しない (または一致する必要のある) お客様にとって、RULES(NOLAXSTG) を指定することは、より多くのストレージ・オーバーレイの問題を検出するのに役立つ可能性があります。
デフォルト: RULES (IBM BYNAME NODECSIZE EVENDEC ELSEIF GOTO NOLAXBIF NOLAXCTL LAXDCL NOLAXDEF LAXENTRY LAXIF LAXINOUT LAXLINK LAXPUNC LAXMARGINS(STRICT) LAXQUAL LAXSCALE LAXSEMI LAXSTG NOLAXSTRZ MULTICLOSE PROCENDONLY STOP UNREF)