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