2008-03-27 18:07:13 +00:00
|
|
|
|
2005-09-08 09:16:50 +00:00
|
|
|
(*****************************************************************************
|
2016-10-23 23:35:11 +00:00
|
|
|
* su4sml --- an SML repository for managing (Secure)UML/OCL models
|
2007-07-04 06:41:30 +00:00
|
|
|
* http://projects.brucker.ch/su4sml/
|
2005-09-08 09:16:50 +00:00
|
|
|
*
|
2007-07-04 06:41:30 +00:00
|
|
|
* xmi_ocl.sml ---
|
|
|
|
* This file is part of su4sml.
|
|
|
|
*
|
|
|
|
* Copyright (c) 2005-2007, ETH Zurich, Switzerland
|
|
|
|
*
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions are
|
|
|
|
* met:
|
|
|
|
*
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
*
|
|
|
|
* * Redistributions in binary form must reproduce the above
|
|
|
|
* copyright notice, this list of conditions and the following
|
|
|
|
* disclaimer in the documentation and/or other materials provided
|
|
|
|
* with the distribution.
|
|
|
|
*
|
|
|
|
* * Neither the name of the copyright holders nor the names of its
|
|
|
|
* contributors may be used to endorse or promote products derived
|
|
|
|
* from this software without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
2005-09-08 09:16:50 +00:00
|
|
|
******************************************************************************)
|
2007-07-04 06:41:30 +00:00
|
|
|
(* $Id$ *)
|
2005-09-08 09:16:50 +00:00
|
|
|
|
|
|
|
(* ---------------------------------------------------------------------------
|
|
|
|
* The types in these structures are supposed to define a representation of
|
|
|
|
* the XML elements found in UML-XMI files. It is reasonably close to the UML
|
|
|
|
* metamodel and the XMI representation of it, while simplifying some kinds
|
|
|
|
* of references.
|
|
|
|
* --------------------------------------------------------------------------*)
|
|
|
|
|
|
|
|
structure XMI_OCL =
|
|
|
|
struct
|
2007-02-05 17:44:37 +00:00
|
|
|
|
2005-11-01 17:48:24 +00:00
|
|
|
(* FIX: LiteralExp should probably be renamed to PrimitiveLiteralExp *)
|
|
|
|
(* FIX: there should be also EnumLiteralExp and TupleLiteralExp *)
|
2007-02-05 17:44:37 +00:00
|
|
|
datatype OCLExpression = LiteralExp of { symbol : string,
|
|
|
|
expression_type : string }
|
|
|
|
| CollectionLiteralExp of { parts: CollectionLiteralPart list,
|
|
|
|
expression_type : string}
|
|
|
|
| IfExp of { condition : OCLExpression,
|
|
|
|
thenExpression : OCLExpression,
|
|
|
|
elseExpression : OCLExpression,
|
|
|
|
expression_type : string }
|
|
|
|
| AssociationEndCallExp of { source : OCLExpression,
|
|
|
|
referredAssociationEnd : string,
|
|
|
|
expression_type : string }
|
|
|
|
| AssociationClassCallExp of { source : OCLExpression,
|
|
|
|
referredAssociationClass : string,
|
|
|
|
expression_type : string }
|
|
|
|
| AttributeCallExp of { source : OCLExpression,
|
|
|
|
referredAttribute : string,
|
|
|
|
expression_type : string }
|
|
|
|
| OperationCallExp of { source : OCLExpression,
|
|
|
|
arguments : OCLExpression list,
|
|
|
|
referredOperation : string,
|
|
|
|
expression_type : string }
|
|
|
|
| OperationWithTypeArgExp of { source :OCLExpression,
|
|
|
|
name : string,
|
|
|
|
typeArgument: string,
|
|
|
|
expression_type: string}
|
|
|
|
| VariableExp of { referredVariable: string,
|
|
|
|
expression_type : string }
|
|
|
|
| LetExp of { variable : VariableDeclaration,
|
|
|
|
inExpression : OCLExpression,
|
|
|
|
expression_type : string }
|
|
|
|
| IterateExp of { iterators : VariableDeclaration list,
|
|
|
|
result : VariableDeclaration ,
|
|
|
|
body : OCLExpression,
|
|
|
|
source : OCLExpression,
|
|
|
|
expression_type : string}
|
|
|
|
| IteratorExp of { name : string,
|
|
|
|
iterators : VariableDeclaration list,
|
|
|
|
body : OCLExpression,
|
|
|
|
source : OCLExpression,
|
|
|
|
expression_type : string}
|
|
|
|
and CollectionLiteralPart = CollectionItem of { item : OCLExpression,
|
|
|
|
expression_type: string }
|
|
|
|
| CollectionRange of { first: OCLExpression,
|
|
|
|
last: OCLExpression,
|
|
|
|
expression_type: string}
|
2005-11-09 18:06:29 +00:00
|
|
|
(* from OCL 2.0 Expressions: -------------------------------------------------
|
|
|
|
* A VariableDeclaration declares a variable name and binds it to a type. The
|
|
|
|
* variable can be used in expressions where the variable is in scope. This
|
|
|
|
* metaclass represents amongst others the variables self and result and the
|
|
|
|
* variables defined using the Let expression.
|
|
|
|
* not supported: initExpression
|
|
|
|
* --------------------------------------------------------------------------*)
|
|
|
|
withtype VariableDeclaration = { xmiid: string,
|
|
|
|
name: string,
|
|
|
|
declaration_type: string,
|
|
|
|
init: OCLExpression option}
|
2005-11-01 17:48:24 +00:00
|
|
|
|
2005-09-08 09:16:50 +00:00
|
|
|
|
|
|
|
fun expression_type_of (LiteralExp{expression_type,...}) = expression_type
|
2005-11-09 18:37:10 +00:00
|
|
|
| expression_type_of (CollectionLiteralExp{expression_type,...}) = expression_type
|
2005-09-08 09:16:50 +00:00
|
|
|
| expression_type_of (IfExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (AssociationEndCallExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (AssociationClassCallExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (AttributeCallExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (OperationCallExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (OperationWithTypeArgExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (VariableExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (LetExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (IterateExp{expression_type,...}) = expression_type
|
|
|
|
| expression_type_of (IteratorExp{expression_type,...}) = expression_type
|
|
|
|
|
2006-05-09 13:17:45 +00:00
|
|
|
fun expression_source_of (AssociationEndCallExp{source,...}) = source
|
|
|
|
| expression_source_of (AssociationClassCallExp{source,...}) = source
|
|
|
|
| expression_source_of (AttributeCallExp{source,...}) = source
|
|
|
|
| expression_source_of (OperationCallExp{source,...}) = source
|
|
|
|
| expression_source_of (OperationWithTypeArgExp{source,...}) = source
|
|
|
|
| expression_source_of (IterateExp{source,...}) = source
|
|
|
|
| expression_source_of (IteratorExp{source,...}) = source
|
2009-01-03 21:18:36 +00:00
|
|
|
| expression_source_of _ = Logger.error ("expression has no source")
|
2006-05-09 13:17:45 +00:00
|
|
|
|
2005-09-08 09:16:50 +00:00
|
|
|
(* from UML 1.5 Core: --------------------------------------------------------
|
|
|
|
* A constraint is a semantic condition or restriction expressed in text.
|
|
|
|
* not supported:
|
|
|
|
* --------------------------------------------------------------------------*)
|
|
|
|
datatype ConstraintType = Inv | Pre | Post | Def | Body
|
|
|
|
|
|
|
|
(* We put Constraint into OCL, not into XMI_Core because we only use *)
|
|
|
|
(* OCL Constraints. *)
|
|
|
|
type Constraint = { xmiid : string,
|
|
|
|
name : string option,
|
|
|
|
constraint_type : string, (* xmi.idref to stereotype *)
|
|
|
|
body : OCLExpression }
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|