| |
Angenommene Spezifikation UML Ocl 2,0 75 Übernommene Attribute [ A ] OclExpressionCS[1].env = IteratorExpCS.env [ A ] VariableDeclarationCS.env = IteratorExpCS.env -- innerhalb eines iteratorausdruckes wird der Körper mit einem neuen Klima das ausgewertet -- umfaßt die iteratorvariable. [ A ] OclExpressionCS[2].env = IteratorExpCS.env.nestedEnvironment().addElement(VariableDeclarationCS.ast.varName, VariableDeclarationCS.ast, richten Sie) aus [ B ] OclExpressionCS.env = IteratorExpCS.env [ B ] argumentsCS.env = IteratorExpCS.env [ C ] OclExpressionCS.env = IteratorExpCS.env [ D ] OclExpressionCS.env = IteratorExpCS.env Disambiguierende Richtlinien [ 1 ] [ A ] wenn die variable Erklärung anwesend ist, kann sie möglicherweise nicht einen initausdruck haben. VariableDeclarationCS->notEmpty() deutet an VariableDeclarationCS.ast.initExpression->isEmpty() [ 2 ] [ B ] muß die Quelle von einer Ansammlungsart sein. OclExpressionCS.ast.type.oclIsKindOf(CollectionType) [ 3 ] [ C ] muß die Quelle von einer Ansammlungsart sein. OclExpressionCS.ast.type.oclIsKindOf(CollectionType) [ 4 ] [ C ] muß das verwiesene Attribut anwesend sein. refAtt->notEmpty() [ 5 ] [ D ] muß das verwiesene navifation anwesend sein. refNav->notEmpty() IterateExpCS IterateExpCS::= OclExpressionCS[1 ] ' - > ' ' wiederholen Sie ' ' (' (VariableDeclarationCS[1 ] ';')? VariableDeclarationCS[2 ] '|' OclExpressionCS[2 ] ') ' Abstract syntax Diagramm IterateExpCS.ast: IterateExp Synthetisierte Attribute -- das ast muß festgestellte Spitze durch Spitze sein, zuerst die Quellverbindung von IterateExp IterateExpCS.ast.source = OclExpressionCS[1].ast -- zunächst die iteratorverbindung von IterateExp -- wenn die erste variable Erklärung anwesend ist, ist sein ast das iterator von diesem -- iterateExp, wenn die variable Erklärung nicht anwesend ist, das iterator hat eine Rückstellung -- Name und Art, -- in jedem möglichem Fall, hat das iterator einen leeren initausdruck. IterateExpCS.ast.iterator.name = wenn VariableDeclarationCS[1]->isEmpty() dann '' sonst VariableDeclarationCS[1].ast.name endif IterateExpCS.ast.iterator.type = wenn VariableDeclarationCS[1]->isEmpty() oder |  |
|
| |
|
|