掲示板一覧 - トピック一覧 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に関しては周囲にもネットにも情報が少なくて苦労していますが、ご提示いただいた回避方法で使い続けてみます。
|
|
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |




