AR# 6286

Foundation 4.2i - ABEL のステート マシン代入文でブロック文に {,} を使用した場合、不正な論理式が生成される

説明

キーワード : XABEL, ABEL, .abl, state machine, goto, state equation, incorrect, ステート マシン, 論理式, 不正

重要度 : 標準

概要 :
ステート論理式を閉じるために {,} を使用した場合、代入文が無視されてしまいます。

例 :

state_diagram Sreg
async_reset InitState : CLR;

state InitState: if !(A # B) then InitState;
else if (A) then {goto State1;}
else {goto State2;}
state State1: goto InitState;
state State2: goto InitState;

上記のステート マシン コードで、次の論理式が生成されます。

" State1.D = (InitState.Q);
" State2.D = (InitState.Q);

予期していた論理式は次のとおりです。

" State1.D = (InitState.Q & A);
" State2.D = (InitState.Q & !A & B);

ソリューション

ABEL 構文では、コンパイラが 1 つのステート論理式 (State1 または goto State1) を見つけます。 {,} を使用すると複数の文が含まれてしまうことになるため、ABEL 構文で意味をなしません。

{,} を使用しなかった場合、ABEL コードにより適正な論理式がコンパイルされます。 {,} が含まれていると、文に付けられた条件が無視されます。

ステート マシンが特定のレジスタ セットを使用した次ステートに遷移しなければならない場合、WITH 文を使用する必要があります。

ステート論理式と共に {,} が使用された場合、構文チェッカでエラーまたは警告メッセージが表示されるように修正中です。
AR# 6286
日付 08/12/2003
ステータス アーカイブ
種類 一般