9.3.43 OclMessageExpCS

消息名称要么是一个信号名称,要么是目标对象的一个操作的名称。

[A] OclMessageExpCS ::= OclExpressionCS ‘^^’ simpleNameCS ‘(‘ OclMessageArgumentsCS? ‘)’
[B] OclMessageExpCS ::= OclExpressionCS ‘^’ simpleNameCS ‘(‘ OclMessageArgumentsCS? ‘)’

抽象语法映射

[A] OclMessageExpCS.ast : OclMessageExp
[B] OclMessageExpCS.ast : OclMessageExp

合成的属性

[A] OclMessageExpCS.ast.target = OclExpressionCS.ast
[A] OclMessageExpCS.ast.arguments = OclMessageArgumentsCS.ast
-- first, find the sequence of types of the operation/signal parameters
[A] let params : Sequence(Classifier) = OclMessageArguments.ast->collect(messArg |
                                messArg.getType() ),
-- try to find either the called operation or the sent signal
[A] operation : Operation = OclMessageExpCS.ast.target.type.lookupOperation(simpleNameCS.ast, params),
    signal : Signal = OclMessageExpCS.ast.target.type.lookupSignal(simpleNameCS.ast, params)
    in
    OclMessageExpCS.ast.calledOperation = if operation->isEmpty()
                                            then invalid
                                            else = operation
                                            endif
    OclMessageExpCS.ast.sentSignal = if signal->isEmpty()
                                     then invalid
                                     else signal
                                      endif
[B]
-- OclExpression^simpleNameCS(OclMessageArguments) is identical to
-- OclExpression^^simpleNameCS(OclMessageArguments)->size() = 1
-- actual mapping: straigthforward, TBD...

继承的属性

OclExpressionCS.env = OclMessageExpCS.env
OclMessageArgumentsCS.env = OclMessageExpCS.env

歧义消除规则

--none

results matching ""

    No results matching ""