掲示板一覧   -   トピック一覧
   Enterprise Architect 全般
     6.0のOCL文法チェック機能について


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
未登録ゲスト
投稿日時: 2005-12-27 10:00

6.0のOCL文法チェック機能について

 6.0で制約をOCLで記述できるようになったので試そうとしています。しかし、よそから拾ってきた例文を入れてみましたがエラーになってしまいます。

<例文>
context order inv:
fee = if (sum<100) then 2.00 else (sum*0.01) endif

 まず、"context"がエラーになるので、1行目は入れないようにしました。すると"fee"がエラーになるので、制約の名前を"fee"にして"if"以降を入れました。すると"if"がエラーになります。

 エラーメッセージも少し妙な感じで、
「OCLの文法チェック中にエラーが発生しました:の解析中にエラーが発生しました(行:1)。
 不明なシンボル:if」

 OCLに関してはまだ勉強中なので、実際に文法が間違っているのかもしれませんが・・・クラスメンバに"fee"がないというエラーなら納得いくのですが、"if"がエラーというのがよく分かりません。
 文法チェックはどのような構文に対応しているのか教えて下さい。
未登録ゲスト
投稿日時: 2005-12-27 11:40

Re: 6.0のOCL文法チェック機能について

 ちょっとだけ先へ進んだので自己レスです。例文には改行が入っていたのですが、"inv:"も削除してしまっていたので"if"でエラーになっていたようです。

<例文改>
inv:fee = if (sum<100) then 2.00 else (sum*0.01) endif

しかし、これだと"then"でエラーが発生します。

なんだかEAの質問ではなくてOCLの質問みたいになってきてしまいましたね・・・
未登録ゲスト
投稿日時: 2005-12-27 12:08

Re: 6.0のOCL文法チェック機能について

 さらに自己レスです。

inv:if (sum<100) then fee = 2.00 else fee = sum*0.01

 これならチェック通りましたが、"endif"をつけるとエラーになります。"endif"は省略可(というよりは要省略??)なのでしょうか?

 if~then~else~endifはthen節かelse節の結果型を持つと書いてあったので、この式の結果を代入できると思ってしまったのですが、それは勘違いなのかも知れません・・・。
tkouno
投稿日時: 2005-12-27 14:29
EA Administrator
投稿: 3939

Re: 6.0のOCL文法チェック機能について

まず、エラーメッセージの件はこちらでも気づきまして、次のビルドで修正予定です。


こちらでも調査を進めていて、頂きました内容と同じところまで到達しました。

手元の書籍(おそらく同じ本を見ているのではないかと思います)を見る限りでは、

inv:if (sum<100) then fee = 2.00 else fee = sum*0.01 endif

が正しいように思います。

If節の持つ値については、書籍文中の説明を読むと、頂きましたご指摘が正しいようにも思えます。

ただ、EBNFの説明を見ると、invのあとに直接if節(IfExpCS)が来るのが正しいようにも思います。難しいですね。


いずれにしても、endifがエラーになるのはバグのように思いますので、これは開発元に確認します。

申し訳ございませんが、まずは

inv:if (sum<100) then fee = 2.00 else fee = sum*0.01 --endif

という形で回避していただけると助かります。


なお、Enterprise Architectの場合には、コンテキストは
制約を定義する対象で決まりますので、context文は不要です。
未登録ゲスト
投稿日時: 2005-12-27 15:38

Re: 6.0のOCL文法チェック機能について

ご回答ありがとうございます。OCLに関しては周囲にもネットにも情報が少なくて苦労していますが、ご提示いただいた回避方法で使い続けてみます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ